Следующий код у меня не работает. Я хочу, чтобы при обнаружении пересечения двух скользящих средних H1 я изменил период с помощью ChartSetSymbolPeriod на M5, разместил заказ на покупку (orderSend) и закрыл покупку (orderClose или trade). PositionClose) когда я обнаруживаю пересечение двух скользящих средних на M5, я знаю, что функция ChartSetSymbolPeriod выполняет смену периода асинхронно, правильно ли я это использую? Должен ли я сделать это с помощью ChartSetSymbolPeriod или другим способом? Получается, я не знаю, почему он у меня не работает, он никогда не входит в состояние скользящих средних на периоде М5:
Кто-нибудь может мне помочь? прилагается (example.png)
Период менять не надо, всё может работать без этого.
Надо просто проверять условие закрытия (по MA5) не на том же тике, что и открытие, а на последующих.
Период менять не надо, всё может работать без этого.
Надо просто проверять условие закрытия (по MA5) не на том же тике, что и открытие, а на последующих.
переключение таймфреймов повлечёт полную перезагрузку советника.
вам просто не надо переключать таймфреймы, у вас всё нужное уже есть.
возможно вам нехватает пары функций:
void OnH1() { // new H1 bar is opens // actions on it } void OnM5() { // new M5 bar is opens // actions on it }
и в OnTick или OnTimer добавить их вызов :
datetime timeH1=0; datetime timeM5=0; void OnTick() { // fragment for call OnM5, OnH1 datetime bartime=iTime(_Symbol,PERIOD_M5,0); if (bartime!=timeM5) { timeM5=bartime; OnM5(); bartime=iTime(_Symbol,PERIOD_H1,0); if (bartime!=timeH1) { timeH1=bartime; OnH1(); } } }
Например, вынести
if ( maM5_period50_Array[0] > maM5_period20_Array[0] && maM5_period50_Array[1] <= maM5_period20_Array[1] ) { CloseAllPosition(); isOrderOpen = false; printf("******M5*******"); }
из MACrossOver() в отдельную функцию Check_MA5_Close() и вызывать так:
void OnTick() { ... if (!isOrderOpen) { MACrossOver(maH1_period10_Array, maH1_period20_Array ,maH1_period200_Array); } else { Check_MA5_Close(); } }
И присмотритесь к тому, что Maxim Kuznetsov сказал.
Например, вынести
из MACrossOver() в отдельную функцию Check_MA5_Close() и вызывать так:
И присмотритесь к тому, что Maxim Kuznetsov сказал.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Следующий код у меня не работает. Я хочу, чтобы при обнаружении пересечения двух скользящих средних H1 я изменил период с помощью ChartSetSymbolPeriod на M5, разместил заказ на покупку (orderSend) и закрыл покупку (orderClose или trade). PositionClose) когда я обнаруживаю пересечение двух скользящих средних на M5, я знаю, что функция ChartSetSymbolPeriod выполняет смену периода асинхронно, правильно ли я это использую? Должен ли я сделать это с помощью ChartSetSymbolPeriod или другим способом? Получается, я не знаю, почему он у меня не работает, он никогда не входит в состояние скользящих средних на периоде М5:
Кто-нибудь может мне помочь? прилагается (example.png)