Пересечение MA с разными периодами.

 

Доброго времени суток, уважаемые форумчане!

Назрел вот такой вопрос, как отловить пересечение MA с разными периодами?

Делаю так:



ima_fast=iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_CLOSE, 0);
ima_slow=iMA(NULL, 0, 55, 0, MODE_SMA, PRICE_CLOSE, 0);
ima_fast1=iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_CLOSE, 1);
ima_slow1=iMA(NULL, 0, 55, 0, MODE_SMA, PRICE_CLOSE, 1);
if ((ima_fast==ima_slow) && (ima_fast1>ima_slow1))
{
// тут мы выставляем ордера и т.п.
}

Дело в том, что это условие вообще никогда не выполняется, хотя в тестере рисуются 2 средние и они не раз пересекаются.

P.S. сильно только не пинайте, я еще новичок в этом деле.))

 
Допустим даже Вы имеет право сравнивать два числа типа double. Но почему тем не менее Вы решили, что две функции, определенные в строго дискретных местах должны иметь где либо одинаковые значения ?
 

Я бы написал так:

if ((ima_fast-ima_slow<(MathAbs(Delta)) && (ima_fast1>ima_slow1))

где Delta величина приближения ima_fast  к ima_slow.

 
Const:

Доброго времени суток, уважаемые форумчане!

Назрел вот такой вопрос, как отловить пересечение MA с разными периодами?

Делаю так:



ima_fast=iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_CLOSE, 0);
ima_slow=iMA(NULL, 0, 55, 0, MODE_SMA, PRICE_CLOSE, 0);
ima_fast1=iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_CLOSE, 1);
ima_slow1=iMA(NULL, 0, 55, 0, MODE_SMA, PRICE_CLOSE, 1);
if ((ima_fast==ima_slow) && (ima_fast1>ima_slow1))
{
// тут мы выставляем ордера и т.п.
}

Дело в том, что это условие вообще никогда не выполняется, хотя в тестере рисуются 2 средние и они не раз пересекаются.

P.S. сильно только не пинайте, я еще новичок в этом деле.))

Мне кажется, что самый простой способ проверки пересечения, это проверять отрицательное или нет произведение.

Что-то типа этого.

MA01=iMA(.....);
MA02=iMA(.....);
MA11=iMA(.....);
MA12=iMA(.....);

if ((MA01-MA11)*(MA02-MA12)<0) {Пересечение было}
И все.
 
Rosh:
Допустим даже Вы имеет право сравнивать два числа типа double. Но почему тем не менее Вы решили, что две функции, определенные в строго дискретных местах должны иметь где либо одинаковые значения ?

А разве нельзя сравнивать два числа типа double? И ведь линии пересекаются, разве они не имеют в точках пересеченя одинаковые значения?

 
zhuki:

Я бы написал так:

if ((ima_fast-ima_slow<(MathAbs(Delta)) && (ima_fast1>ima_slow1))

где Delta величина приближения ima_fast  к ima_slow.

Да, наверное это оптимальное решение, т.к. мне еще требуется знать какая линия сверху, а какая снизу. А если в качестве Delta указать Point, нормально будет?

 
Const:
Rosh:
Допустим даже Вы имеет право сравнивать два числа типа double. Но почему тем не менее Вы решили, что две функции, определенные в строго дискретных местах должны иметь где либо одинаковые значения ?

А разве нельзя сравнивать два числа типа double? И ведь линии пересекаются, разве они не имеют в точках пересеченя одинаковые значения?

они визуально равны в точке пересечения, а вот с точностью допустим до 1000 знака после запятой неравны.

 
Prival, ясно. Просто я написал скрипт, который в точке пересечения (которые визуально видно) выводит значения МАшек, и он выдавал одинаковые значения. Вот я  и не мог понять в чем проблема.
 
кроме того вы учитываете пересечение только между барами, а они могут и на каком то одном пересектись,так что надо считать не два, а три бара
Причина обращения: