Подскажите по Машке.

 

Ни как не могу понять как "обьяснить советнику" выполнить условия пересечения цены и МА

double MA1 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,1);
  double MA2 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,3);  
  double per=(Open[2]+High[2]+Low[2]+Close[2])/4;
  
  if (MA1<per<MA2)
  {

..........

}  

Вот вроде так  но........не работает.

Подскажите пожалуйста! 

 

мож так!?

if (MA1 < per && per < MA2)
{

.......

}

 
mozg >>:

Ни как не могу понять как "обьяснить советнику" выполнить условия пересечения цены и МА

double MA1 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,1);
double MA2 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,3);
double per=(Open[2]+High[2]+Low[2]+Close[2])/4;

if (MA1<per<MA2)
{

..........

}

Вот вроде так но........не работает.

Подскажите пожалуйста!

вот условие пересечения цены с машкой MA1=Bid это пересечение не самый лучший сигнал т.к. при флете таких пересечений будет сотни. лучше использовать МА1>MA2 или наоборот МА2>MA1

 
Спасибо огромное. Попробую.......отпишусь
 
  double MA1 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,1);
  double MA2 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,3);  
  double per=(iOpen(NULL,0,2)+iHigh(NULL,0,2)+iLow(NULL,0,2)+iClose(NULL,0,2))/4;
  
  if (MA1<per && per<MA2) 
Так попробуйте.
 

А я считаю, что код должен выглядеть как-то так:

double MA1 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,1);
double per1=(Open[1]+High[1]+Low[1]+Close[1])/4;
double MA3 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,3);
double per3=(Open[3]+High[3]+Low[3]+Close[3])/4;
if((MA1>per1 && MA3<per3) || (MA1<per1 && MA3>per3))
{
.............................
}

В этом случае хоть какая-то логика есть.

 

Не совсем понятно, что подразумевает третий параметр в Вашей задаче?

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
 
gorby777 писал(а) >>

Не совсем понятно, что подразумевает третий параметр в Вашей задаче?

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

Можете вместо тройки поставить двойку, или четверку сути это не меняет. Таким образом я просто диапазон чувствительности задал. Поставите 2 чувствительность будет выше, четыре - ниже. А тройка по-моему наиболее оптимально, хотя решать mozg'у.

 

Действительно все работает вот так а 3 или 4 просто задает парог срабатывания.

спасибо всем кто помогал.

double MA1 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,1);
double per1=(Open[1]+High[1]+Low[1]+Close[1])/4;
double MA3 =iMA(NULL,0,PERIOD_M15,0,MODE_SMA,PRICE_CLOSE,3);
double per3=(Open[3]+High[3]+Low[3]+Close[3])/4;
if((MA1>per1 && MA3<per3) || (MA1<per1 && MA3>per3))
{
.............................
}

 
Rizer >>:

Можете вместо тройки поставить двойку, или четверку сути это не меняет. Таким образом я просто диапазон чувствительности задал. Поставите 2 чувствительность будет выше, четыре - ниже. А тройка по-моему наиболее оптимально, хотя решать mozg'у.

При чем тут двойка или тройка? Какая чувствительность? Третий параметр, передаваемый в функцию - это период усреднения машки. У вас он почему-то обозван PERIOD_M15. Хотя таймфрейм - это второй параметр. Что-то я не догоняю

 
gorby777 писал(а) >>

При чем тут двойка или тройка? Какая чувствительность? Третий параметр, передаваемый в функцию - это период усреднения машки. У вас он почему-то обозван PERIOD_M15. Хотя таймфрейм - это второй параметр. Что-то я не догоняю

Верно, но как ни странно функция-то работает! Исправьте параметры и пользуйтесь на здоровье. Не думаю, что это предмет для обсуждений - легкий косячок не более.

Причина обращения: