индикатор на movingах по 2-м таймфреймам

 

Доброго времени суток!

пишу индикатор (потом будет советник).. суть в том, чтобы настроить пока правильные сигналы на пересечении двух мувингов разного периода.. первый сигнал должен быть на старшем ТФ, по нему будет открываться ордер. Второй сигнал на младшем ТФ, по нему ордер будет закрываться. Например, открываем ордер при пересечении двух МА на Н1, закрываем при обратном пересечении на М30. Проблема возникла, когда я добавила второй ТФ. Мувинги разного периода сложились почему-то почти в одну линию..


в чем дело - искренне не понимаю.. есть подозрение, что как-то не верно рассчитываются данные баров, ведь ТФ разные.. но буферы для данных отдельные.. может нужно какую-то доп. функцию использовать?

P.S. я новичок.. делаю для себя.. поэтому на "не красивый" код прошу не обращать внимания.. в документации ничего толкового не нашла.. как и в инете..

Файлы:
ma.mq4  5 kb
 

Переменные должны быть типа int (или перечислимого типа ENUM_TIMEFRAMES), а не string. Напишите как ниже, и тип в объявлении поменяйте

      PerTF=PERIOD_M15; // ТФ для открытия сделки
      PerTFm=PERIOD_M5; // ТФ для закрытия сделки

то же касается и переменной applied_price.

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

 
спасибо большое, основная часть проблемы решена (эта ошибка у меня во всех программах была).. не подскажите, нужно ли использовать дополнительно функции какие-нибудь для обращения ко второму ТФ?
 

Заместо PerTF можете просто писать PERIOD_M15  и периоды это int значение а у вас опять переменная типа стринг использована должно быть так.

int PerTF = PERIOD_M1;

 

извиняюсь, я у себя поправила - но сюда не выложила.. все поменяла.. теперь на М15 все нормально отображается, на м5 дублируется положение МА с М15.

нижний - младший ТФ, верхний - старший.. может для младшего доп. функция нужна какая-нибудь, чтобы корректно значения выдавал..? код в прил., все поправила.. огромное спасибо, без вашей помощи ошибку бы не нашла..

Файлы:
ma_1.mq4  5 kb
 
maia666:

Доброго времени суток!

пишу индикатор (потом будет советник).. суть в том, чтобы настроить пока правильные сигналы на пересечении двух мувингов разного периода..

 ***

С мувингами на разных ТФ вопрос решается элементарно, 
период аналога мувинга обратно пропорционален периоду ТФ.

Например: m60:m30 = 2:1, 
значит чтобы увидеть МА(10) с графика H1, на графике m30 надо  рисовать МА(20). (1:2)

m60:m15 = 4:1, 
аналогом МА(10) с графика H1, будет МА(40)  на графике m15. (1:4)
И.т.д.
Другими словами, на одном ТФ вы можете можете собрать аналоги мувингов с несколькихТФ. Даже тех, которые терминал МТ4 не имеет. (m10, m20, ..., m120 и т.д. )
Погрешность, конечно, есть, но она очень мала. 

В вашем примере, аналогами МА(12) и МА(20) с периода m15, на периоде m5 будут МА(36) и МА(60). (1:3)

 

я боюсь, что в данном случае меня интересует правильный расчет индикатора на младшем ТФ, точнее правильный автоматический вывод.

каждая МА хранит свои значения в отдельном буфере..

    Buf_0[i]=iMA(Symbol(),PerTF,PerMa1,ma_shift,ma_method,applied_price,i); // Значение 0 буфера на i-ом баре
    Buf_1[i]=iMA(Symbol(),PerTF,PerMa2,ma_shift,ma_method,applied_price,i); // Значение 1 буфера на i-ом баре
    Buf_2[i]=iMA(Symbol(),PerTFm,PerMa1,ma_shift,ma_method,applied_price,i); // Значение 2 буфера на i-ом баре

    Buf_3[i]=iMA(Symbol(),PerTFm,PerMa2,ma_shift,ma_method,applied_price,i); // Значение 3 буфера на i-ом баре

и выводится вот так

SetIndexBuffer (0,Buf_0);
SetIndexStyle (0,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer (1,Buf_1);
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer (2,Buf_2);
SetIndexStyle (2,DRAW_LINE,STYLE_DOT,2);
SetIndexBuffer (3,Buf_3);
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2);

return(INIT_SUCCEEDED);

старший ТФ ведет себя нормально - данные отображаются корректно, но на младшем ТФ данные отображаются не верно. У меня вопрос не об изменении периода МА, т.к. он должен быть одинковым на разных ТФ, а о том, что я не дописала для правильного отображения данных на втором ТФ.. т.е. наверняка нужна дополнительная функция или нечто подобное для корректного отображения. То, что вы написали - это лишено смысла, т.к. я беру два ТФ, чтобы получать разные данные с них. Данные одного ТФ должны дополнять данные индикатора другого ТФ. Если же изменить периоды, как вы говорите - суть программы вобще теряет смысл, т.к. с двух ТФ пойдут одинаковые данные.

 
просто по логике данные не должны выводится одинаково для двух ТФ. что-то нужно добавить, но не могу найти стоящего примера в интернете, где можно посмотреть аналогичный вариант вывода индикатора на два ТФ..
 
maia666:
просто по логике данные не должны выводится одинаково для двух ТФ. что-то нужно добавить, но не могу найти стоящего примера в интернете, где можно посмотреть аналогичный вариант вывода индикатора на два ТФ..

Странно. А в кодебазе их довольно много

MTF 

 
вы кидаете ссылку на mql5, а мне нужен пример на mql4.. спасибо конечно, посмотрела.. где вы там нашли хоть один индикатор или советник, работающий по 2-м ТФ?? я же не просто так пишу - что не могу найти примера.. поэтому и спрашиваю.. может кто сталкивался.. или есть идеи по логике программы.. какой функции не хватает для корректной работы, например...
 
maia666:

я боюсь, что в данном случае меня интересует правильный расчет индикатора на младшем ТФ,

***

То, что вы написали - это лишено смысла, 

Ничем не могу помочь.
Я вам дал самое простое решение, проверяется элементарно.
Ищете сложный путь? Флаг вам в руки.