Пишу советник похожий по принципу на тот, который описан в примере. Т.е. ордера открываются (закрываются) на пересечении МА или других похожих индикаторов.
Но возник вопрос: как научиться советник ждать новый критерий входа на рынок, а не анализировать текущий ?!
Для примера возьмём торговлю по стратегии Пуриа _http://strategy4you.ru/skalpiruyushhie-strategii-foreks/metod-puria.html . Там точками входа являются пересечения МА и показания МАКД.
Сейчас у меня возникает такая картина:
На графике видно, что советник открыл ордер по точке входа от 1 Feb 07:00 (немного правее от неё) . Но на момент написания поста тренд скорее всего изживет себя и сделка скорее всего закроется по SL.
Вот как научить советник отркывать ордера не по текущей ситуации, а ждать нового критерия входа -- нового пересечения МА и соотв. данных от MACD . Если такая тема уже есть, то дайте пожалуйста ссылку :)
Тема рассматривалась в ветке: "Любые вопросы от новичков..." (эпизод не помню). Необходимо использовать флаги - их ставить и сбрасывать - и все.
Но возник вопрос: как научиться советник ждать новый критерий входа на рынок, а не анализировать текущий ?!
...
Вот как научить советник отркывать ордера не по текущей ситуации, а ждать нового критерия входа -- нового пересечения МА и соотв. данных от MACD . Если такая тема уже есть, то дайте пожалуйста ссылку :)
Вот статья - c подобными Вашим условиям входа в рынок... Подход - один.
Вот реализация в коде - инклюд Критерион - по учебнику.
//-------------------------------------------------------------------- // Criterion.mqh // Предназначен для использования в качестве примера в учебнике MQL4. //--------------------------------------------------------------- 1 -- // Функция вычисления торговых критериев. // Возвращаемые значения: // 10 - открытие Buy // 20 - открытие Sell // 11 - закрытие Buy // 21 - закрытие Sell // 0 - значимых критериев нет // -1 - используется другой финансовый инструмент //--------------------------------------------------------------- 2 -- // Внешние переменные: extern string A5 = "Параметры"; extern int Tenkan=9; extern int Kijun=26; extern int Senkou=52; extern int FlatSE=7; extern int DeMarker=25; extern int FastMA=14; extern int SlowMA=25; extern double DeMarker_OpenLevel_Sell = 0.7; extern double DeMarker_OpenLevel_Buy = 0.7; bool DeMarker_Buy_signal=false, DeMarker_Sell_signal=false, MA_Buy_signal=false, MA_Sell_signal=false; //--------------------------------------------------------------- 3 -- int Criterion() // Пользовательская функция { int trend_period=GetPeriod(t_trend_period); //--------------------------------------------------------------- 4 -- // Параметры технич. индикат: double Taichi_1 = iCustom (Symbol(), trend_period, "Cronex Taichi",Tenkan, Kijun, Senkou, FlatSE, 0, 1); double TaichiFor_1 = iCustom (Symbol(), trend_period, "Cronex Taichi", Tenkan, Kijun, Senkou, FlatSE, 3, 1); double Signal_1 = iCustom (Symbol(), trend_period, "Cronex Taichi", Tenkan, Kijun, Senkou, FlatSE, 1, 1); double SSignal_1 = iCustom (Symbol(), trend_period, "Cronex Taichi", Tenkan, Kijun, Senkou, FlatSE, 2, 1); double FlatBuffer1 = iCustom (Symbol(), trend_period, "Cronex Taichi", Tenkan, Kijun, Senkou, FlatSE, 4, 1); double FlatBuffer2 = iCustom (Symbol(), trend_period, "Cronex Taichi", Tenkan, Kijun, Senkou, FlatSE, 5, 1); double DeMarker_1 = iCustom (Symbol(), trend_period, "Cronex DeMarker",DeMarker, FastMA, SlowMA, 0, 1); double DeMarker_2 = iCustom (Symbol(), trend_period, "Cronex DeMarker",DeMarker, FastMA, SlowMA, 0, 2); double FastMA_1 = iCustom (Symbol(), trend_period, "Cronex DeMarker", DeMarker, FastMA, SlowMA, 1, 1); double FastMA_2 = iCustom (Symbol(), trend_period, "Cronex DeMarker", DeMarker, FastMA, SlowMA, 1, 2); double SlowMA_1 = iCustom (Symbol(), trend_period, "Cronex DeMarker", DeMarker, FastMA, SlowMA, 2, 1); double SlowMA_2 = iCustom (Symbol(), trend_period, "Cronex DeMarker", DeMarker, FastMA, SlowMA, 2, 2); //--------------------------------------------------------------- 5 -- // Вычисление торговых критериев if(( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (DeMarker_Buy_signal == true && DeMarker_Sell_signal==false)) && // когда DeMarker пересекает медленую (выше уровня бай (0.7)) для лонг ( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (MA_Buy_signal==true && MA_Sell_signal==false)) && // пересечение МА DeMarkers (iClose(Symbol(), trend_period,1) > Taichi_1 && Taichi_1 > TaichiFor_1 && Signal_1 > SSignal_1 && FlatBuffer1==0 && FlatBuffer2==0)) { Print ("Taichi_1 = ", Taichi_1, "TaichiFor_1 = ",TaichiFor_1, "Signal_1 = ", Signal_1, "SSignal_1 = ",SSignal_1, "FlatBuffer1 = ", FlatBuffer1, "FlatBuffer2 = ", FlatBuffer2); Print ("DeMarker_1 = ", DeMarker_1, "DeMarker_2 = ",DeMarker_2, "FastMA_1 = ", FastMA_1, "FastMA_2 = ",FastMA_2, "SlowMA_1 = ", SlowMA_1, "SlowMA_2 = ", SlowMA_2); return(10); // Открытие Buy } if(( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_SELL) || (DeMarker_Buy_signal==false && DeMarker_Sell_signal==true)) && // когда DeMarker пересекает медленую (ниже уровня селл) для шорт ( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_SELL) || (MA_Buy_signal==false && MA_Sell_signal==true)) && // пересечение МА DeMarkers (iClose(Symbol(), trend_period,1) < Taichi_1 && Taichi_1 < TaichiFor_1 && Signal_1 < SSignal_1 && FlatBuffer1==0 && FlatBuffer2==0)) { Print ("Taichi_1 = ", Taichi_1, "TaichiFor_1 = ",TaichiFor_1, "Signal_1 = ", Signal_1, "SSignal_1 = ",SSignal_1, "FlatBuffer1 = ", FlatBuffer1, "FlatBuffer2 = ", FlatBuffer2); Print ("DeMarker_1 = ", DeMarker_1, "DeMarker_2 = ",DeMarker_2, "FastMA_1 = ", FastMA_1, "FastMA_2 = ",FastMA_2, "SlowMA_1 = ", SlowMA_1, "SlowMA_2 = ", SlowMA_2); return(20); } // Открытие Sell //--------------------------------------------------------------- 6 -- return(0); // Выход из пользов. функции } //--------------------------------------------------------------- 7 -- //для оптимизации по всем ТФ int GetPeriod(int period) {int periodres; switch(period) { case 1: periodres=1;break; case 2: periodres=5;break; case 3: periodres=15;break; case 4: periodres=30;break; case 5: periodres=60;break; case 6: periodres=240;break; case 7: periodres=1440;break; case 8: periodres=10080;break; default: periodres=1;break; } return(periodres); } int type_op_DeMarker(double D1, double D2, double F1, double F2, double S1,double S2)// Функция - условия для входа в рынок и сохранения их через переменные Buy_signal и Sell_signal (даже после их сработки - до отмены // противоположными сигналами) { if (D2-S2 < 0 && D1-S1 > 0 && D1 > F1 && D1 < DeMarker_OpenLevel_Buy) { DeMarker_Buy_signal=true; DeMarker_Sell_signal=false; return(OP_BUY); } if (D2-S2 > 0 && D1-S1 < 0 && D1 < F1 && D1 > DeMarker_OpenLevel_Sell) { DeMarker_Buy_signal=false; DeMarker_Sell_signal=true; return(OP_SELL); } else return(-1); } int type_op_MA(double d1, double d2, double f1, double f2, double s1,double s2) // Функция МЕТА_СОТ - условия для входа в рынок и сохранения их через переменные Buy_signal и Sell_signal (даже после их сработки - до отмены // противоположными сигналами) { if (f2 - s2 < 0 && f1 - s1 > 0) { MA_Buy_signal=true; MA_Sell_signal=false; return(OP_BUY); } if (f2-s2 > 0 && f1-s1 < 0) { MA_Buy_signal=false; MA_Sell_signal=true; return(OP_SELL); } else return(-1); }
Вот статья - c подобными Вашим условиям входа в рынок... Подход - один.
Вот реализация в коде - инклюд Критерион - по учебнику.
ух.. легче тонда уже вручную один раз вовремя запустить
а попроще никак нельзя сделать?!
По времени, запоминайте время события (пересечения предположим) в глобальной переменной, и потом сравнимвайте, как только время нового события больше - новый ордер, и опять запоминаем
Можно время напрямую в мажик писать, тогда уж точно никак не пропадет.
ух.. легче тонда уже вручную один раз вовремя запустить
а попроще никак нельзя сделать?!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пишу советник похожий по принципу на тот, который описан в примере. Т.е. ордера открываются (закрываются) на пересечении МА или других похожих индикаторов.
Но возник вопрос: как научиться советник ждать новый критерий входа на рынок, а не анализировать текущий ?!
Для примера возьмём торговлю по стратегии Пуриа _http://strategy4you.ru/skalpiruyushhie-strategii-foreks/metod-puria.html . Там точками входа являются пересечения МА и показания МАКД.
Сейчас у меня возникает такая картина:
На графике видно, что советник открыл ордер по точке входа от 1 Feb 07:00 (немного правее от неё) . Но на момент написания поста тренд скорее всего изживет себя и сделка скорее всего закроется по SL.
Вот как научить советник отркывать ордера не по текущей ситуации, а ждать нового критерия входа -- нового пересечения МА и соотв. данных от MACD . Если такая тема уже есть, то дайте пожалуйста ссылку :)