double lpf0 = iMA(Symbol(),0,slo,0,MODE_SMA,PRICE_CLOSE,0);
double lpf1 = iMA(Symbol(),0,slo,0,MODE_SMA,PRICE_CLOSE,1);
попробуйте
double lpf0 = iMA(Symbol(),0,slo,0,MODE_SMA,PRICE_CLOSE,1);
double lpf1 = iMA(Symbol(),0,slo,0,MODE_SMA,PRICE_CLOSE,2);
Да я тоже хочу торговать на нолевом баре....
Да, все хотят торговать на нулевом баре )))
Я вот не понимаю в чём тут проблема, значение Close[0] ведь меняется с каждым новым тиком, почему его нельзя использовать тогда? запаздывание на 1 бар при данной ТС слишком серьезно, сигнал уже может потерять смысл в некоторых случаях, а тогда - убыток.
И да, я пытался бары 1 и 2 подставить, та же самая проблема в диком расколбасе ордеров Бай :( Так что это - не решение. Более того, уже ВСЕ ордера Селл стали убыточны.
Да, все хотят торговать на нулевом баре )))
Я вот не понимаю в чём тут проблема, значение Close[0] ведь меняется с каждым новым тиком, почему его нельзя использовать тогда? запаздывание на 1 бар при данной ТС слишком серьезно, сигнал уже может потерять смысл в некоторых случаях, а тогда - убыток.
И да, я пытался бары 1 и 2 подставить, та же самая проблема в диком расколбасе ордеров Бай :( Так что это - не решение. Более того, уже ВСЕ ордера Селл стали убыточны.
Мой первый "грааль"
О! Точно такой же практически ))) Спасибо, читаю. Жалко в поиске на эту статью не наткнулся. Правда там бОльшая часть статьи про ММ, а хотелось бы про ошибки в алгоритме открытия ордеров больше узнать в этих самых "Граалях". Мне не нужен грааль, мне надо чтобы ордер открывался только один раз после начала новой свечи после пересечения линий индикатора, не штампуя сам себя сотни раз.
А использовать буду не МА, а цифровые фильтры НЧ и ВЧ, они гораздо меньше ложных пересечений дают. Я же точно такую ТС в ручном режиме гоняю, там ведь всё работает нормально, разве никак нельзя это перевести в код?
И почему только Бай повторяется, Селл открывается только ОДИН раз, как и положено???
О! Точно такой же практически ))) Спасибо, читаю. Жалко в поиске на эту статью не наткнулся. Правда там бОльшая часть статьи про ММ, а хотелось бы про ошибки в алгоритме открытия ордеров больше узнать в этих самых "Граалях". Мне не нужен грааль, мне надо чтобы ордер открывался только один раз после начала новой свечи после пересечения линий индикатора, не штампуя сам себя сотни раз.
А использовать буду не МА, а цифровые фильтры НЧ и ВЧ, они гораздо меньше ложных пересечений дают. Я же точно такую ТС в ручном режиме гоняю, там ведь всё работает нормально, разве никак нельзя это перевести в код?
И почему только Бай повторяется, Селл открывается только ОДИН раз, как и положено???
Из статьи:
"...Тогда он решил более внимательно посмотреть на таймфрейм с отметками открытия и закрытия ордеров и к своему удивлению обнаружил, что его эксперт без всяких на то видимых оснований открывает ордера не только в момент пересечения МА, но и в других местах!..."
------------
Ссылка на статью выше. В статье ответ на Ваш вопрос - но вам лень. Если лень читать..., а программировать не лень... Чукча не читатель, чукча писатель (с)
Из статьи:
"...Тогда он решил более внимательно посмотреть на таймфрейм с отметками открытия и закрытия ордеров и к своему удивлению обнаружил, что его эксперт без всяких на то видимых оснований открывает ордера не только в момент пересечения МА, но и в других местах!..."
------------
Ссылка на статью выше. В статье ответ на Ваш вопрос - но вам лень. Если лень читать..., а программировать не лень... Чукча не читатель, чукча писатель (с)
Попросил бы не хамить ) Я же не утверждал что я первый кому в голову пришла такая "блестящая идея", нет далеко не первый и далеко не последний. Даже граалем её не считал ни разу, просто очередная ТС которую мне интересно закодить и заставить работать.
Я внимательно прочёл ту статью, не отрицаю, там те же ошибки что и у меня, но решения их я там не увидел. Ну поставил я обнуление этого самого "рес", вписал и кусок кода с проверкой начала нового бара, никаких улучшений.
блин вы и тестируете на daily ну тестируйте на минутках а период поставьте 1440 минуты и посмотрите на close(0)(честно хочу помочь)- "начинающему"плохому танцору тестер мешает(поговорка)
В общем я решил что действительно не стоит работать с нулевым баром, хоть это и очень заманчивая в плане скорости реагирования на изменение направления тренда стратегия. Увы, таких лисапедов, хоть с педалями, хоть с пропеллером действительно много и ни один не работает как надо :(
Спасибо тем кто откликнулся, а особенно тем кто прошел мимо, ведь именно благодаря им я набираюсь опыта самостоятельно xD
extern int Period_MAfast = 1; extern int Period_MAslow = 4; extern int Ma_Method = MODE_SMA; extern int Ma_Price = PRICE_OPEN; double detect() { double _Ret = 0.0; double _Up = 1.0; double _Dn = -1.0; //----------------- double MA_fast_0 = iMA(Symbol(),0,Period_MAfast,0,Ma_Method,Ma_Price,0); double MA_fast_1 = iMA(Symbol(),0,Period_MAfast,0,Ma_Method,Ma_Price,1); double MA_slow_0 = iMA(Symbol(),0,Period_MAslow,0,Ma_Method,Ma_Price,0); double MA_slow_1 = iMA(Symbol(),0,Period_MAslow,0,Ma_Method,Ma_Price,1); //----------------- if(MA_fast_0 > MA_slow_0 && MA_fast_1 <= MA_slow_1) _Ret = _Up; if(MA_fast_0 < MA_slow_0 && MA_fast_1 >= MA_slow_1) _Ret = _Dn; //----------------- return(_Ret) }
И чем этот код от моего отличается?
double detect() { RefreshRates(); //Free margin check int res = 0; double lotcost = MarketInfo(Symbol(),MODE_MARGINREQUIRED);// Стоимость 1 лота if(AccountFreeMargin()<LotsOptimized()*lotcost) { Print("Not enough funds, free margin = ", AccountFreeMargin()); return(0); } // lpf0 = iMA(Symbol(),0,slo,0,mamode_slo,maprice_slo,0); lpf1 = iMA(Symbol(),0,slo,0,mamode_slo,maprice_slo,1); hpf0 = iMA(Symbol(),0,fast,0,mamode_fast,maprice_fast,0); hpf1 = iMA(Symbol(),0,fast,0,mamode_fast,maprice_fast,1); //----------------- //if(MA_fast_0 > MA_slow_0 && MA_fast_1 <= MA_slow_1) _Ret = _Up; //if(MA_fast_0 < MA_slow_0 && MA_fast_1 >= MA_slow_1) _Ret = _Dn;// if(hpf1<lpf1 && hpf0>lpf0) res = 1; if(hpf1>lpf1 && hpf0<lpf0) res = -1; return(res); }
Переменой мест сравниваемых параметров разве что и применением к цене открытия бара, что даст то же самое зепездывание на 1 бар, как если и выставить смещение МАшки на 1 бар вперед...
Проблему переоткрывания десятков ордеров Бай и Селл это не решает никак, к сожалению :(
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Суть данной ТС - отлавливать пересечения линий индикаторов, в данном случае SMA1 & SMA4. Пересечение медленной МА вверх с прохождением заданного количества пунктов - ордер на покупку, обратное пересечение - закрытие длинной позиции и ордер на продажу.
Вручную всё прекрасно получается, если правильно подобрать параметры индикаторов то количество ошибок мало. Но вот в написании советника я забуксовал, даже не знаю что и где я упустил, но ордера на Бай клобасит в тестере со страшной силой. В приложенном видео это видно (Скачать DFFfailed.avi с rapidshare.ru) - после пересечения медленнй МА вверх советник начинает открывать-закрывать позиции без видимой на то причины. Я уже и ограничение на одну открытую позицию прописывал, бесполезно, он ведь всё равно сначала закрывает Бай потом переоткрывает его заново, получается множество ордеров с убытком в пределах -2 .. 0 пипс :(
Понятно что дело в логике работы советника, но я неделю смотрю уже на этот код, глаза замылилися, так сказать. Может кто-то подскажет как ещё можно эти пересечения отловить, чтобы отдера на покупку не сыпались потоком а открывался только один в момент закрытия ордера Селл или сразу после этого? А ведь команды на открытие ордера Селл иногда почему-то правильно срабатывают.
Пожалуйста, помогите доделать советник, сколько ни искал в учебнике, так и не нашел решения...