ФОРЕКС 21 Четверг, 02.05.2024, 17:07
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта

Главная » 2009 » Декабрь » 27 » Учимся писать эксперты для Meta Trader. Урок №13
Учимся писать эксперты для Meta Trader. Урок №13
21:50
Учимся писать эксперты для Meta Trader. Урок №13 Обучение MQL II. Урок 13 Здравствуйте дорогие читатели. О пересечения средних, говорилось уже очень много, разработан индикатор, работающий на этом принципе (MACD). Но все же хоть эксперт и прост, он мне показался довольно интересным. При некоторых параметрах доходность довольно высокая. И помимо всего он реверсивного типа, открытие новой позиции, это и закрытие прошлой (противоположно направленной). Не буду забегать вперед. Итак, все по прядку. 15.1. Алгоритм Эксперт определяет точку входа с помощью двух скользящих средних, пусть будут ЕМА, разных периодов усреднения. Быстрая средняя и медленная (т.е. быстрая с меньшим периодом, медленная соответственно с большим). В тренде такая система будет торговать достаточно здорово, но вот во флэте все может быть довольно печально. Для улучшения этого момента в эксперт вводится дополнительное условие, мало того что должно произойти пересечение, но еще и после него МА должны разойтись на N пунктов (эта величина, как и периоды средних, будет во внешней переменной). Т.е. серия не глубоких пересечений, вверх вниз, вверх вниз во флэте будут просто игнорироваться. Другими словами пересечение должно иметь "запас". Эксперт находится все время в рынке. Как только происходит пересечение, МА поменяют свое взаимное положение, происходит закрытие текущей и открытие противоположной позиции. Стопы специально выставляются недостижимыми для того, что бы открытие новой позиции происходило только по факту пересечения, после тестирования и выбора нужных параметров можно расставить и нормальные стопы. Вход осуществляется по открытию следующего бара. Заключение В данном эксперте параметры играют важную роль. Параметры которые стоят сейчас по умолчанию очень не плохо показывают себя на часовом фунте. Довольно интересны параметры, евра, М5 fast 2 slow 4 Npips 10. Конечно, эти параметры могут быть переподогнанными, будет интересно, если что-нибудь из читателей проверит эту систему на более длинной истории (может по частям). Не могу сказать уверенно, что будет в следующем выпуска, пишите и возможно в следующем номере Вы увидите ответы на свои вопросы или свой эксперт. /*[[ Name := 2MA Author := Fxtest.ru Link := forextimes.ru Lots := 1.00 Stop Loss := 5000 Take Profit := 5000 Trailing Stop := 0 ]]*/ defines: fast(6),slow(9),Npips(7); // внешние переменные, периоды МА и // Npips-количество пунктов запаса var: cnt(0),fb(0),fs(0),fup(0),fdown(0),fast2(0),fast1(0),slow2(0),slow1(0); if CurTime-LastTradeTime<10 then exit; // на самом деле, закрыть старую позицию // и сразу открыть новую мы не может из-за ограничений на таймаут, поэтому // мы выдерживаем его If FreeMargin<1000 then Exit; // выход при нехватке свободной маржи if fb=1 then { fb=0; SetOrder(op_buy, lots, ask, 3, bid-stoploss*point, bid+takeprofit*point, green); exit;}; if fs=1 then { fs=0; SetOrder(op_sell,lots,bid,3,ask+stoploss*point,ask-takeprofit*point,red); exit;}; // fb и fs флаги, они нужны что бы выдержать таймаут и открыть соответствующие позиции fast2=iMA(FAST,MODE_EMA,2) ; // позапрошлое значение быстрой средней fast1=iMA(FAST,MODE_EMA,1); // прошлое значение быстрой средней slow2=iMA(SLOW,MODE_EMA,2); // позапрошлое значение медленной средней slow1=iMA(SLOW,MODE_EMA,1); // прошлое значение медленной средней if TotalTrades<1 then { // если нет окрытых позиций то... if fup=1 and (fast1-slow1)>Npips*point then { fup=0; SetOrder(op_buy,lots,ask,3,bid-stoploss*point,bid+takeprofit*point,green); exit;}; // открытие самой первой позиции если она длинная if fdown=1 and (slow1-fast1)>Npips*point then { fdown=0; SetOrder(op_sell,lots,bid,3,ask+stoploss*point,ask-takeprofit*point,red); exit;}; // открытие самой первой позиции если она короткая If fast2slow1 then { fup=1; fdown=0; exit;}; if fast2>slow2 and fast10 then // после открытия первой позиции далее эксперт будет все время искать возможность "переворота" { for cnt=1 to TotalTrades { if OrderValue(cnt,VAL_TYPE)<=OP_SELL and // buy или sell OrderValue(cnt,VAL_SYMBOL)=Symbol then // инструмент совпадает { If OrderValue(cnt,VAL_TYPE)=OP_BUY then // если buy... { if (slow1-fast1)>Npips*point then // условие переворота { CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet); //закртыие fs=1; // флаг на открытие противоположной позиции Exit; }; }; If OrderValue(cnt,VAL_TYPE)=OP_SELL then // если sell { if (fast1-slow1)>Npips*point then // условие переворота { CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),ask,3,Violet); //закртыие fb=1; // флаг на открытие противоположной позиции Exit; }; }; }; };};
Просмотров: 312 | Добавил: forex21 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Календарь новостей
«  Декабрь 2009  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск

Друзья сайта


Статистика

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz