Четверг, 18.04.2024, 21:55
Приветствую Вас Гость | RSS
Меню сайта
Мини-чат
Наш опрос
Оцените мой сайт
Всего ответов: 12
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2013 » Март » 23 » MQLabs: Поймать ценовой экстремум
22:39
 

MQLabs: Поймать ценовой экстремум

MQLabs: Поймать ценовой экстремум

Советник ToCatchAPriceExtremum

Файлы стратегий для AutoGraf 4.0

Признаком высокого класса в торговле является умение определять разворотные точки ценового движения, находясь в непосредственной близости от них. В идеале это совершение продажи по максимальной цене или совершение покупки по минимальной цене.

Идеал является таковым по той простой причине, что достичь его невозможно или невероятно трудно. А потому не будем рассчитывать на то, что сможем совершить подобные сделки пункт в пункт. Можно лишь надеяться на то, что одна из тысячи сделок все же окажется идеальной. А вот рассчитывать на частое совершение сделок по наиболее выгодным (не точно максимальным или минимальным, а близким к ним уровням) для нас ценам мы имеем полное право. Главное в этом случае - подбор правильной стратегии, суть которой основана на большом преимуществе качества прибыльных сделок над убыточными. Речь идет о соотношении порядка три и более раз, т.е. одна прибыльная сделка должна с лихвой покрывать три предыдущие убыточные сделки. Такое соотношение можно получить при совершении частых попыток открытия позиции в расчете на отскок цены от очередного локального экстремума. Не беда, что эти попытки зачастую будут преждевременными. Конечным итогом будет своевременное совершение сделки. То есть стратегия должна быть контртрендовой.

Стратегия, основанная на торговле против сложившегося тренда, реализуется при помощи одной из интерпретаций стандартного индикатора Stochastic. Упомянутая интерпретация заключается в использовании зон перекупленности и перепроданности индикатора. При нахождении индикатора в зоне перекупленности ожидается снижение цены, а в зоне перепроданности - повышение (см. рис. 1).

Рис. 1 - Зоны перекупленности и перепроданности индикатора Stochastic.

Проблемой такого определения момента отскока цены является преждевременность действий, т.к. главная линия стохастика (синяя сплошная на рис. 1) может находиться в зоне перекупленности или перепроданности достаточно продолжительное время, в течение которого будет поддерживаться начатое движение. Поэтому системе необходим фильтр, при помощи которого можно было бы с большей долей вероятности утверждать, что в дальнейшем последует остановка текущего движения и его разворот. Одним из вариантов фильтра является использование "приседающего" (термин Билла Вильямса) бара стандартного индикатора MFI. "Приседающий" бар характеризуется снижением показаний индикатора MFI на фоне роста объемов торгов. Здесь стоит оговориться, что в МТ4 не видны реальные объемы торгов (на Форекс их практически невозможно получить, такая информация, видимо, доступна только "не простым смертным"), а индикатор, который называется Volumes, показывает количество тиков, пришедших за время существования бара. За неимением альтернативы для получения объемов торгов будем использовать именно индикатор Volumes.

"Приседающий" бар отображается индикатором MFI как гистограмма розового цвета (таковы настройки индикатора по умолчанию). По технологии работы с "приседающим" баром, которая предложена Биллом Вильямсом, необходимо открывать сделку в направлении пробоя "приседающего" бара. В рассматриваемой стратегии направление сделки уже определено при помощи показаний индикатора Stochastic. Поэтому от индикатора MFI необходимо подтверждение сигнала и уровень открытия сделки - один из экстремумов "приседающего" бара. При нахождении стохастика в зоне перепроданности нас будет интересовать максимум "приседающего" бара, а при нахождении главной линии стохастика в зоне перекупленности необходимо следить за пробитием минимума "приседающего" бара (см. рис. 2).

Рис. 2 - Сигнальным баром является "приседающий" бар, принадлежащий экстремуму определенного периода.

Третьим критерием полноценности сигнала, полученного от индикаторов Stochastic и MFI, является принадлежность бара к экстремуму некоторого периода Range. То есть, если получен сигнал покупки, то сигнальный бар должен иметь минимальное значение среди последних Range баров, а при получении сигнала продажи сигнальный бар должен иметь максимальное значение, которое больше максимумов последних Range баров.

Складывая все три критерия, получаем правила формирования сигнального бара. Для открытия сделки в нужном направлении требуется преодоление ценой соответствующего экстремума бара. Так как цена открытия будущей сделки становится известна сразу же после фиксации "приседающего" бара, наиболее эффективным методом торговли в данном случае является использование отложенных стоповых ордеров - Buy Stop или Sell Stop - в зависимости от направления сигнала. Если цена пробьет нужный уровень, то отложенный ордер сработает, и сделка будет открыта. Установленный ордер должен существовать до тех пор, пока главная линия стохастика находится в зоне перекупленности или перепроданности. Выход главной линии в среднюю зону индикатора приведет к отмене отложенного ордера.

Закрытие имеющейся сделки будет производиться только в двух случаях: срабатывание уровня стоп-приказа и получение противоположного сигнала (когда необходимо установить противоположный отложенный ордер). Автоматически рассчитываемого уровня профита в стратегии не предусмотрено. Стоп-приказ сделки устанавливается на противоположном экстремуме "приседающего" бара. Таким образом решается вопрос о качественном превосходстве прибыльной сделки над убыточной, т.к. "приседающие" бары достаточно редко являются высокими (разность между максимумом и минимумом невелика).

Торговый робот ToCatchAPriceExtremum, осуществляющий деятельность по описанным правилам, будет располагать следующими настроечными параметрами: Lots (фиксированный объем сделки), KPeriod, DPeriod, SlowingPeriod (все три определяют внешний вид индикатора Stochastic), OverBuy (минимальное значение зоны перекупленности), OverSell (максимальное значение зоны перепроданности), Range (необходимый минимальный период экстремума) и TakeProfit (фиксированный размер профита сделки в пунктах, который в предлагаемой версии по умолчанию будет равен нулю). При желании, пользователь может установить необходимый уровень профита, хотя для достижения наилучших результатов торговли делать это не рекомендуется.

Перед совершением торговых операций эксперт должен вычислить текущие значения уровней продажи и покупки. Эта задача решается посредством функции GetLevel:

//+-------------------------------------------------------------------------------------+ //| Вычисление уровня открытия отложенного ордера (BuyLevel или SellLevel) | //+-------------------------------------------------------------------------------------+ void GetLevel() { BuyLevel = 0; SellLevel = 0; // - 1 - ========================= Поиск последнего приседающего бара =================== int Signal = 0; // Указание направления стохастика: // 0 - нет (между уровнями) // 1 - в зоне перекупленности // -1 - в зоне перепроданности for (int i = 1; i < Bars; i++) { // - 1.1 - ========================= Сбор значений индикаторов ==================== double MFI = iBWMFI(NULL, 0, i); double MFI2 = iBWMFI(NULL, 0, i+1); double Stoch = iStochastic(NULL, 0, KPeriod, DPeriod, SlowingPeriod, MODE_LWMA, 0, MODE_MAIN, i); // - 1.1 - ============================== Окончание блока ========================= // - 1.2 - ======== Определение нахождения стохастика в одной из зон ============== if (Stoch > OverBuy && i == 1) // Если стохастик в зоне.. // ..перекупленности и это первая.. // ..итерация цикла, то.. Signal = 1; // ..фиксируем сигнал перекупленности else if (Stoch < OverSell && i == 1) // Стохастик в зоне перепроданности и // ..совершается первая итерация цикла Signal = -1; // Фиксируется сигнал перепроданности else // Если ни один из предыдущих случаев.. if ((Stoch <= OverBuy && Stoch >= OverSell) ||// ..подошел, то если стохастик (Stoch > OverBuy && Signal == -1) ||// ..за предалеми обоих уровней или.. (Stoch < OverSell && Signal == 1)) // ..вошел в зону, отличную от.. { // ..предыдущей, то прерываем цикл со.. Signal = 0; // ..сбросом значения сигнала break; } // - 1.2 - ============================== Окончание блока ========================= // - 1.3 - ===================== Определение приседающего бара ==================== if (MFI < MFI2 && Volume[i] > Volume[i+1]) // Если обнаружен приседающий бар, то break; // ..прерываем цикл // - 1.3 - ============================== Окончание блока ========================= } // - 1 - ================================ Окончание блока =============================== // - 2 - ======================== Определение уровней открытия сделки =================== if (Signal == 1 && // Стохастик в зоне перекупленности,.. iHighest(NULL, 0, MODE_HIGH, Range, i) == i)// ..а бар является максимумом среди.. // ..ближайших Range баров, то.. { // ..ожидаем снижение цены SellLevel = Low[i]; // Сохраним значение уровня продажи SL = High[iHighest(NULL, 0, MODE_HIGH, i+1)];// и уровень стоп-приказа } if (Signal == -1 && // Стохастик в зоне перепроданности,.. iLowest(NULL, 0, MODE_LOW, Range, i) == i) // ..а бар является максимумом среди.. // ..ближайших Range баров, то.. { // ..ожидаем повышение цены BuyLevel = High[i]; // Сохраним значение уровня покупки SL = Low[iLowest(NULL, 0, MODE_LOW, i+1)]; // и уровень стоп-приказа } // - 2 - ================================ Окончание блока =============================== }

Результатом работы функции являются значения трех глобальных переменных эксперта: BuyLevel - максимум "приседающего" бара, SellLevel - минимум "приседающего" бара и SL - противоположный значению, указанному в BuyLevel или SellLevel, экстремум бара. В тех случаях, когда уровень стопа "приседающего" бара был пробит, а сигнал все еще остается в силе, значение переменной SL указывает на максимальное или минимальное значение, которое было зафиксировано после "приседающего" бара. Следствием такого поведения функции является исключение случаев цепного получения стопов, установленных на одном и том же уровне.

В самом начале функции значения BuyLevel и SellLevel приводятся к нулю, что означает отсутствие какого бы то ни было сигнала.

Первый блок функции также начинается с инициализации переменной. Переменная Signal является дополнительной и не видна за пределами функции. Ее назначением является слежение за положением главной линии стохастика. Значение 0 означает нахождение главной линии в средней зоне, 1 - в зоне перекупленности, а -1 - в зоне перепроданности. Далее в цикле перебираются все бары, начиная с первого. Цикл завершается, когда обнаружен "приседающий" бар или когда найден бар, которому соответствует значение стохастика, находящегося за пределами зон перекупленности или перепроданности.

Второй блок анализирует результат, полученный в первом блоке, а именно: значение переменной Signal и номер "приседающего" бара, указанный в переменной i. Если значение Signal осталось равным нулю, то никаких действий не предпринимается. При ненулевом значении Signal проверяется третий критерий - "приседающий" бар должен быть экстремумом среди последних Range баров. При выполнении этих условий заполняется одна из переменных BuyLevel или SellLevel. Переменная SL принимает значение противоположного экстремума.

Для анализа имеющихся ордеров эксперт использует функцию FindOrders, которая была задействована в эксперте MANew (Укрощение скользящей средней). После подсчета ордеров можно переходить к выполнению торговых операций, которые производятся при помощи функции Trade:

//+-------------------------------------------------------------------------------------+ //| Открытие позиций | //+-------------------------------------------------------------------------------------+ bool Trade() { // - 1 - ======================= Существует уровень открытия Buy Stop =================== if (BuyLevel > 0) { switch (Type) // В зависимости от наличия текущей.. { // ..сделки выполняются различные.. // ..действия case OP_BUY: // Если присутствует сделка Buy,.. return(True); // ..то ничего не предпринимается case OP_SELL: // Если найдена сделка Sell,.. if (!CloseDeal(Ticket)) // ..то производится попытка закрытия return(false); // ..сделки. В случае неудачи - выход break; case OP_SELLSTOP: // Если найден ордер Sell Stop,.. if (!DeleteOrder(Ticket)) // ..то совершается попытка удаления.. return(false); // ..ордера. В случае неудачи - выход break; case OP_BUYSTOP: // Если найден ордер Buy Stop,.. if (!CheckLevels(Ticket, // ..то проводится проверка.. NP(BuyLevel + Tick + Spread),// ..правильности уровней его NP(SL - Tick))) // ..открытия и стопа. В случае.. return(false); // ..неудачи - выход с ошибкой return(true); // В случае успеха - выход без ошибки break; } if (TakeProfit == 0) // Если не задан профит, то.. double tp = 0; // ..не устанавливаем его else // Если задан, то рассчитываем tp = NP(BuyLevel + Tick + Spread + TakeProfit*Point); if (OpenOrderCorrect(OP_BUYSTOP, Lots, // Установка ордера Buy Stop NP(BuyLevel + Tick + Spread), NP(SL - Tick), tp) != 0) return(false); } // - 1 - ================================== Окончание блока ============================= // - 2 - ======================= Существует уровень открытия Sell Stop ================== if (SellLevel > 0) { switch (Type) // В зависимости от наличия текущей.. { // ..сделки выполняются различные.. // ..действия case OP_BUY: // Если присутствует сделка Buy,.. if (!CloseDeal(Ticket)) // ..то производится попытка закрытия return(false); // ..сделки. В случае неудачи - выход break; case OP_SELL: // Если найдена сделка Sell,.. return(True); // ..то ничего не предпринимается break; case OP_SELLSTOP: // Если найден ордер Sell Stop,.. if (!CheckLevels(Ticket, // ..то проводится проверка.. NP(SellLevel - Tick), // ..правильности уровней его NP(SL + Spread + Tick)))// ..открытия и стопа. В случае.. return(false); // ..неудачи - выход return(true); // В случае успеха - выход без ошибки break; case OP_BUYSTOP: // Если найден ордер Buy Stop,.. if (!DeleteOrder(Ticket)) // ..то совершается попытка удаления.. return(false); // ..ордера. В случае неудачи - выход break; } if (TakeProfit == 0) // Если не задан профит, то.. tp = 0; // ..не устанавливаем его else // Если задан, то рассчитываем tp = NP(SellLevel - Tick - TakeProfit*Point); if (OpenOrderCorrect(OP_SELLSTOP, Lots, // Установка ордера Sell Stop NP(SellLevel - Tick), NP(SL + Tick + Spread), tp) != 0) return(false); } // - 2 - ============================= Окончание блока ================================== return(True); // Все операции завершены }

Как обычно, блоки 1 и 2 в функции отличаются лишь в направлении устанавливаемых и удаляемых ордеров. Первый блок срабатывает при активном (не равном нулю) значении переменной BuyLevel, а второй - при активном значении SellLevel. Активность обеих переменных одновременно исключена.

Если активен уровень BuyLevel, то проверяется наличие всех возможных ордеров: Buy, Sell, Buy Stop и Sell Stop. При наличии Buy никакие действия не производятся - функция возвращает значение true, что означает нормальное ее завершение. Если найден Sell, то производится попытка закрытия позиции при помощи функции CloseDeal (аналог функции CloseOrder эксперта VolatilityFlatAndTrend, Волатильность тренда и флэта). Неудачное закрытие приводит к прерыванию функции с возвратом ошибки - false. Если обнаружен ордер Sell Stop, то совершается попытка его удаления при помощи функции DeleteOrder (взята из эксперта BifurcationBox, Точка бифуркации). В случае присутствия ордера Buy Stop производится проверка правильности цены его открытия с модификацией при обнаружении несоответствия. Проверка и модификация совершаются в теле функции CheckLevels, которой передаются тикет ордера, правильная цена открытия и текущий уровень стоп-приказа. Вне зависимости от успешности выполнения функции CheckLevels, дальнейшего выполнения функции Trade не следует. Ордер Buy Stop устанавливается только в случае отсутствия ордеров эксперта.

Подобные действия производятся во втором блоке функции Trade. При нахождении сделки Buy производится ее закрытие, при обнаружении сделки Sell - ничего не происходит. Если обнаружен ордер Sell Stop, то проверяется правильность цены его открытия, а при наличии ордера Buy Stop происходит его удаление. Ордер Sell Stop устанавливается только в случае отсутствия ордеров эксперта.

Функция CheckLevels располагает таким кодом:

//+-------------------------------------------------------------------------------------+ //| Проверка правильности уровней открытия и стоп-приказа | //+-------------------------------------------------------------------------------------+ bool CheckLevels(int ticket, double price, double sl) { if (OrderSelect(ticket, SELECT_BY_TICKET) && // Существует ордер с заданным.. OrderCloseTime() == 0) // ..тикетом и ордер не закрыт if (WaitForTradeContext()) // Свободен ли торговый поток? { RefreshRates(); // - 1 - ========================= Нуждается ли цена открытия в изменении? ============== double newprice = 0, tp = 0; // Пока уровень открытия не меняется if (MathAbs(OrderOpenPrice() - price) >= Tick)// Нужно ли менять цену открытия? if ((OrderType() == OP_BUYSTOP && // Если нужно, то проверяется близость price - Ask > StopLevel && // текущей рыночной цены к.. price - Ask > FreezeLevel) || // ..новой цене открытия ордера (OrderType() == OP_SELLSTOP && Bid - price > StopLevel && Bid - price > FreezeLevel)) { newprice = price; // Цена открытия изменяется. Поэтому.. // ..необходимо изменить уровень стопа // - 1.1 - ======== Расчет уровней стоп-приказа и профита для Buy Stop ====== if (OrderType() == OP_BUYSTOP) // Проверка близости стоп-приказа к.. { // ..цене открытия ордера и расчет.. if (TakeProfit == 0) // ..нового профита tp = 0; else tp = price + TakeProfit*Point; if (price - sl <= StopLevel) // В случае, если стоп расположен.. sl = price - StopLevel - Tick;// ..близко, минимально отодвигаем его } // - 1.1 - ===================== Окончание блока ============================ // - 1.2 - ======== Расчет уровней стоп-приказа и профита для Sell Stop ===== if (OrderType() == OP_SELLSTOP) // Проверка близости стоп-приказа к.. { // ..цене открытия ордера и расчет.. if (TakeProfit == 0) // ..нового профита tp = 0; else tp = price - TakeProfit*Point; if (sl - price <= StopLevel) // В случае, если стоп расположен.. sl = price + StopLevel + // ..близко, минимально отодвигаем его Spread + Tick; } // - 1.2 - ===================== Окончание блока ============================ } // - 1 - ================================== Окончание блока ============================= // - 2 - ============================ Модификация ордера ================================ if (newprice != 0) // Если цена открытия нуждается в.. if (!OrderModify(ticket, NP(newprice), NP(sl), NP(tp), 0))// ..изменении, то return(false); // ..модифицируем ордер // - 2 - ================================== Окончание блока ============================= } return(true); }

После выбора ордера из списка открытых ордеров и проверки свободности торгового потока, производится сравнение текущей цены открытия ордера со значением переменной price, несущей значение новой цены открытия. Если значения оказываются одинаковыми, то переменная newprice, служащая признаком необходимости изменения цены открытия ордера, остается равной нулю. Это приводит к тому, что второй блок функции CheckLevels не исполняется, а, следовательно, не производится модификация ордера.

Если переменные price и newprice не равны, то запускается алгоритм принятия новой цены открытия. Перед принятием новой цены необходимо убедиться, что текущие рыночные условия позволяют установить ордер по цене price. Поэтому измеряется расстояние между текущей рыночной ценой (Bid или Ask в зависимости от типа ордера) и сравнивается со значениями StopLevel и FreezeLevel. Если изменение цены возможно, то происходит переход к вложенным блокам, в которых рассчитываются новые значения стоп-приказа и профита, т.к. изменение цены открытия приводит к обязательному изменению этих уровней.

Уровень профита рассчитывается просто - необходимое значение прибавляется или вычитается из новой цены открытия ордера. Если значение TakeProfit равно нулю, то профит не устанавливается. Уровень стоп-приказа принимается равным значению, заданному во входном параметре функции sl, если расстояние между ценой открытия и sl более, чем минимально разрешенный размер стопов StopLevel. В противном случае уровень отодвигается на минимально возможное расстояние от цены открытия.

После расчета новых значений цены открытия ордера, стоп-приказа и профита, производится модификация всех без исключения уровней. При успешном выполнении торговой операции OrderModify, функция CheckLevel возвращает значение true. При обнаружении ошибки вследствие модификации, возвращается значение false - ошибка.

Тестирование советника

Тестирование советника ToCatchApriceExtremum проведем на привычном таймфрейме Н1, используя исторический диапазон 01.01.2009 - 22.01.2011. Таймфрейм Н1 - это наиболее крупный таймфрейм, который одинаково воспринимается всеми участниками рынка, в каком бы уголке Земли они не находились. Понятно, что вид свечей таймфрейма Н1 может немного отличаться, в зависимости от настроек времени сервера брокера (возможны колебания точности времени в пределах одной минуты), но, тем не менее, отличие в графиках Н1 различных инстанций не такое очевидное, как отличия, наблюдаемые на графиках Н4 и D1.

Параметры эксперта, используемые по умолчанию для всех тестируемых валютных пар, были следующими: Lots = 0.1, SlowingPeriod = 3, TakeProfit = 0, MagicNumber = 11260. Остальные параметры были индивидуально подобраны для каждой валютной пары. Результаты тестирования показаны на рис. 3-6.

Рис. 3. Результаты тестирования эксперта ToCatchAPriceExtremum на валютной паре EURUSD.

EURUSD. Значения настроечных параметров: KPeriod = 15, DPeriod = 33, OverBuy = 63, OverSell = 32, Range = 20. Следует заметить, что уровни перекупленности и перепроданности установлены не зеркально. Правильным вариантом установки было бы повышение значения OverBuy до 68 или OverSell до 37. Таким образом, констатируем, что подобный набор параметров больше ориентирован на медвежий рынок, что подтверждают результаты тестирования: процент успешных коротких сделок (35.19%) выше, чем процент успешных длинных сделок (30.80%), хотя количество длинных сделок выше, чем коротких (237 - длинных и 216 - коротких).

По результату тестирования вряд ли можно сказать что-то хорошее. Кривая баланса, имея общую направленность вверх, ведет себя крайне неуверенно, большую часть тестирования находясь в перманентном состоянии. Чистая прибыль 3 430 долларов против максимальной просадки 1 300 долларов. Фактор восстановления 2.64. Крайне низкий показатель.

Рис. . 4. Результаты тестирования эксперта ToCatchAPriceExtremum на валютной паре USDCHF.

USDCHF. Значения настроечных параметров: KPeriod = 12, DPeriod = 16, OverBuy = 64, OverSell = 11, Range = 20. Как видим, перекос чувствительности советника в сторону коротких сделок еще более явный, хотя на качестве это никак не сказалось (успешность коротких и длинных примерно одинакова - 21.19% против 21.31%). Предрасположенность к коротким сделкам вылилась в количестве - коротких сделок проведено 151, а длинных - 61. Вид кривой баланса отображает, скорее, какую-то случайность, нежели закономерность. Отсюда и статистические показатели: чистая прибыль 1 173 доллара и максимальная просадка 1 325 долларов. Фактор восстановления ниже единицы.

Рис. 5. Результаты тестирования эксперта ToCatchAPriceExtremum на валютной паре GBPUSD.

GBPUSD. Значения настроечных параметров: KPeriod = 7, DPeriod = 26, OverBuy = 86, OverSell = 33, Range = 6. В данном случае наблюдается преимущество длинных сделок (зона перепроданности в два раза шире зоны перекупленности). Длинных сделок 260, а коротких 120, хотя качество коротких выше - 32.5% прибыльных против 25% прибыльных длинных. Вид кривой баланса наиболее уверенный из всех рассмотренных. Чистая прибыль 3 661 доллар, максимальная просадка 1 036 долларов. Фактор восстановления 3.53, что для фунта является посредственным показателем.

Рис. 6. Результаты тестирования эксперта ToCatchAPriceExtremum на валютной паре USDJPY.

USDJPY. Значения настроечных параметров: KPeriod = 3, DPeriod = 18, OverBuy = 61, OverSell = 19, Range = 4. Преимущество коротких над длинными: 305 против 109. Рост кривой баланса не такой уверенный, как у фунта, но все же более явный, чем в случае с евро и франком. Чистая прибыль 2 575 долларов, максимальная просадка 1 150 долларов. Фактор восстановления 2.24.

Доработка стратегии для использования в AutoGraf 4.0

Из имеющегося набора входных параметров эксперта ToCatchAPriceExtremum в настроечные параметры приложения AutoGraf 4.0 требуют переноса только шесть переменных: KPeriod, которому будет соответствовать значение переменной AT_1, DPeriod - AT_2, SlowingPeriod - AT_3, OverBuy - AT_4, OverSell - AT_5, Range - AT_6. Для указания объема сделок необходимо использовать имеющийся в AutoGraf 4.0 механизм - установку значения параметра Lot на панели настроек (нижняя часть текущего графика). Подобным образом можно указать значение параметра TakeProfit, которому соответствует параметр TP, находящийся на панели настроек.

Запуск стратегии "Поймать ценовой экстремум" в среде AutoGraf 4.0 состоит из следующих шагов:

  • Получить файл по ссылке Файлы стратегий для AutoGraf 4.0 и распаковать полученный архив в папку MT4\experts\libraries (с перезаписью файлов AG_AT.ex4 и AG_AT.mq4).

  • Запустить AutoGraf (прикрепить индикатор AG_ind, а затем эксперт AG_exp).

  • Для работы стратегии в ключе приведенных результатов в окне настроек AutoGraf (закладка "Входные параметры") установить нужные значения параметров AT_1 - AT_6. Полное повторение результатов при этом не гарантируется.

  • Выбрать стратегию №5. Для этого необходимо передвинуть вверх значок So и среди названий стратегий найти значок S5, который также потянуть вверх.

  • Запустить функцию автоматической торговли, передвинув значок AT в верхнее положение.

Использование полученного советника рекомендуется только в полуавтоматическом режиме под присмотром трейдера и после всестороннего изучения слабых и сильных сторон стратегии.

Игорь Герасько

Январь 2011

Специально для компании Admiral Markets

Просмотров: 402 | Добавил: whapronce | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск
Календарь
«  Март 2013  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz