Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь написать технический индикатор? Загляни в Справочник MQL5!
_MorPHeuS_
63
_MorPHeuS_ 2012.03.08 22:49 

Здравствуйте уважаемые форумчани.

Говорю сразу, я только учусь программированию, так что не судите строго:)

Ну как сделать пересечение двух ma я уже понял, а вот как сделать если у нас три ma в советнике?

Теперь подробнее: У нас есть три ma, с разными периодами, к примеру 5, 14, 50 и сигналом для открытия ордера будут два последовательных пересечения средних скользящих (5 пересекает 50 & 14 пересекает 50). Тут проблема вот в чем, если установить эти три ma на графих, то мы уведем, что пересечение 5и50 идет немного раньше чем 14и50, то есть пересечение 14и50 происходит примеру на первом баре, в 5и50 на 5 баре, а значит, тут надо что то придумать что бы советник работал именно по двум этим сигналам.

Заранее благодарю!

Vitalie Postolache
11097
Vitalie Postolache 2012.03.09 00:58  

То есть вас устроит если пересечение по очереди будет, не обязательно чтобы МАшки в одной точке сошлись, я правильно понял? Тогда можно вызвать цикл 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 МА пересеклись вниз
}




Не уверен, можно ли так массивы задекларировать в советнике, раньше таким образом только в индикаторе делал, так что ногами не бейте...

Alexander
2441
Alexander 2012.03.09 03:00  
Так и пиши, если пятая на нулевом баре больше пятидесятой и на пятом баре меньше и четырнадцатая на нулевом больше и на первом-втором меньше.
_MorPHeuS_
63
_MorPHeuS_ 2012.03.09 11:52  
Большое спасибо за такой быстрый ответ, помочь, сейчас попробую:)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий