То есть вас устроит если пересечение по очереди будет, не обязательно чтобы МАшки в одной точке сошлись, я правильно понял? Тогда можно вызвать цикл for{} баров на 10 и в нем отлавливать пересечения каждой пары МА, записывая в отдельную переменную каждой паре, потом уже дело техники.
for(int i=0;i<=10;i++) { int intersect_ma5ma14 = 0, intersect_ma5ma50 = 0, intersect_ma50ma14 = 0, direction = 0; double ma5[i] = iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,i); double ma14[i] = iMA(NULL,0,14,0,MODE_SMA,PRICE_CLOSE,i); double ma50[i] = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,i); if(ma5[i]>ma14[i] && ma5[i+1]<=ma14[i+1] && ma5[i+2]<ma14[i+2]) intersect_ma5ma14 = 1; //пересечение ma5ma14 вверх if(ma5[i]>ma50[i] && ma5[i+1]<=ma50[i+1] && ma5[i+2]<ma50[i+2]) intersect_ma5ma50 = 1; //пересечение ma5ma50 вверх if(ma14[i]>ma50[i] && ma14[i+1]<=ma50[i+1] && ma14[i+2]<ma50[i+2]) intersect_ma14ma50 = 1; //пересечение ma14ma50 вверх if(ma5[i]<ma14[i] && ma5[i+1]>=ma14[i+1] && ma5[i+2]>ma14[i+2]) intersect_ma5ma14 = -1; //пересечение ma5ma14 вниз if(ma5[i]<ma50[i] && ma5[i+1]>=ma50[i+1] && ma5[i+2]>ma50[i+2]) intersect_ma5ma50 = -1; //пересечение ma5ma50 вниз if(ma14[i]<ma50[i] && ma14[i+1]>=ma50[i+1] && ma14[i+2]>ma50[i+2]) intersect_ma14ma50 = -1; //пересечение ma14ma50 вниз if(intersect_ma5ma14 == 1, intersect_ma5ma50 == 1, intersect_ma50ma14 == 1) direction = 1; //все 3 МА пересеклись вверх if(intersect_ma5ma14 == -1, intersect_ma5ma50 == -1, intersect_ma50ma14 == -1) direction = -1; //все 3 МА пересеклись вниз }
Не уверен, можно ли так массивы задекларировать в советнике, раньше таким образом только в индикаторе делал, так что ногами не бейте...
Так и пиши, если пятая на нулевом баре больше пятидесятой и на пятом баре меньше и четырнадцатая на нулевом больше и на первом-втором меньше.
Большое спасибо за такой быстрый ответ, помочь, сейчас попробую:)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте уважаемые форумчани.
Говорю сразу, я только учусь программированию, так что не судите строго:)
Ну как сделать пересечение двух ma я уже понял, а вот как сделать если у нас три ma в советнике?
Теперь подробнее: У нас есть три ma, с разными периодами, к примеру 5, 14, 50 и сигналом для открытия ордера будут два последовательных пересечения средних скользящих (5 пересекает 50 & 14 пересекает 50). Тут проблема вот в чем, если установить эти три ma на графих, то мы уведем, что пересечение 5и50 идет немного раньше чем 14и50, то есть пересечение 14и50 происходит примеру на первом баре, в 5и50 на 5 баре, а значит, тут надо что то придумать что бы советник работал именно по двум этим сигналам.
Заранее благодарю!