Расхождение мувингов - помогите новичку

 

Как найти момент пересечения двух средних - понятно, а вот как открыться тогда, когда расхождение между мувингами (т.е. ma1 - ma2 >= x) после пересечения составит несколько пунктов?

Пожалуйста,помогите!

 
Вы же сами ответили, написав формулу:

extern int X = 10;
extern int MA_Period = 13;
extern int MA2_Period = 34;
 
int start()
{
  double MA1 = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 1); 
  double MA2 = iMA(Symbol(), 0, MA2_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
 
  if(MA1-MA2 >= X)
   {
    // ваши действия
    }
 
 }
 

Я именно не догоняю, как учесть и пересечение,и эту разницу Х - она ведь может случиться и через 10-15 баров, и через 2...Насколько я поняла в описании индикатора - последняя цифра в скобках - это именно бары?

 
fefochka:

Я именно не догоняю, как учесть и пересечение,и эту разницу Х - она ведь может случиться и через 10-15 баров, и через 2...Насколько я поняла в описании индикатора - последняя цифра в скобках - это именно бары?


Порядковый номер бара начиная от текущего.

0-текущий бар

1-предыдущий, до нулевого

2-еще более поздний чем 1

и тд

double MA2 = iMA ( Symbol (), 0, MA2_Period, 0, MODE_SMA, PRICE_CLOSE, 1 ) ;

в данном случае МА2=значение средней с определенным периодом которое было на прошлом баре.

 

Девушка-программистка!!!

 
D500_Rised:

Девушка-программистка!!!


Я только учуссс:) И все-таки...кхы-кхы...

if( ma1(0)-ma2(0)>X && ma1(i)>ma2(i) && ma1(i-1)<ma2(i-1)) то тра-ля-ля...

Как определить, чему равно i ? Спасибо заранее

 
fefochka:


Я только учуссс:) И все-таки...кхы-кхы...

if( ma1(0)-ma2(0)>X && ma1(i)>ma2(i) && ma1(i-1)<ma2(i-1)) то тра-ля-ля...

Как определить, чему равно i ? Спасибо заранее


" i "- в данном случае индекс буфера хранящего значения МА

Вы сами вольны его определять с помощь введения в код внешней переменной, например

extern int i=1;

В рассматриваемом случае занчение i и может быть равно 1.(и любое другое)

if ( ( (MathAbs(ma1(0)-ma2(0))*Point > X ) && (ma1(i)>ma2(i) ) && ( ma1(i-1)<ma2(i-1) )

{

делаем что хотим

}

 
fefochka:

Как найти момент пересечения двух средних - понятно, а вот как открыться тогда, когда расхождение между мувингами (т.е. ma1 - ma2 >= x) после пересечения составит несколько пунктов?

Пожалуйста,помогите!


Посмотрите здесь: Учебник по MQL4 Простые программы на MQL4 Использование технических индикаторов .
 
fefochka:
Я только учуссс:) И все-таки...кхы-кхы...
if( ma1(0)-ma2(0)>X && ma1(i)>ma2(i) && ma1(i-1)<ma2(i-1)) то тра-ля-ля...
Как определить, чему равно i ? Спасибо заранее
Если нужно определить пересечение да к тому же такое, при котором расхождение составит больше, чем Х пунктов, то так:
extern int X = 10;
extern int MA_Period = 13;
extern int MA2_Period = 34;
 
int start()
{
  double MA1 = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 1); 
  double MA2 = iMA(Symbol(), 0, MA2_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
  double MA1_2 = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 2); 
  double MA2_2 = iMA(Symbol(), 0, MA2_Period, 0, MODE_SMA, PRICE_CLOSE, 2);
 
  if(MA1-MA2 >= X && MA1_2 < MA2_2)
   {
    // ваши действия (насколько я понимаю, Buy)
    }
 
  if(MA2-MA1 >= X && MA2_2 < MA1_2)
   {
    // ваши действия (насколько я понимаю, Sell)
    }
 
 
 }
 
Scriptong:
Если нужно определить пересечение да к тому же такое, при котором расхождение составит больше, чем Х пунктов, то так:
extern int X = 10;
extern int MA_Period = 13;
extern int MA2_Period = 34;
 
int start()
{
  double MA1 = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 1); 
  double MA2 = iMA(Symbol(), 0, MA2_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
  double MA1_2 = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 2); 
  double MA2_2 = iMA(Symbol(), 0, MA2_Period, 0, MODE_SMA, PRICE_CLOSE, 2);
 
  if(MA1-MA2 >= X && MA1_2 < MA2_2)
   {
    // ваши действия (насколько я понимаю, Buy)
    }
 
  if(MA2-MA1 >= X && MA2_2 < MA1_2)
   {
    // ваши действия (насколько я понимаю, Sell)
    }
 
 
 }


Если Х=10, а разница двух MA исчисляется в сотых и десятитысячных долях от единицы (на Евродолларе значение MA1 примерно 1.4601 например а МА2 =1.4635, и разница между ними составит всего 0,0034 )

Получается что:

выражение MA1 - MA2 >= X не реализуется никогда (в ближайшие 100 лет точно)

а выражение MA1 - MA2 <= X,выполнятся всегда (ну или в ближайшие 100 лет точно)

Как в таких сравнениях можно сравнивать 2 значения абсолютно разных порядков?

Их для начала надо привести в один порядок, например так:

//

extern double X=10;

...

X=X*point;

//

Зачем подсказывать человеку, то в чем сами еще делаете такие же ошибки?

Про условия покупки/продажи в целом я вообще молчу.

 

Спасибо вам за участие, но чур не ругаться:)

Все равно не догоняю.... здесь может быть должен присутствовать цикл? Мне не совсем ясно, как вы все предлагаете узнавать номера баров по ходу действия. Текущая разность (как сигнал) в "X" пунктов - это бар №0. Т.е сейчас. А за сколько баров до этого произошло пересечение - как узнать это??

Это могло быть и 2 бара назад, и 20...