как в советнике отменить случайное нажатие смены таймфрейма?

 

Как в советнике отменить случайное нажатие смены таймфрейма?

Прочитал про Событие ChartEvent 

но там похоже это событие не отслеживается. ((


 
Alexander Kharlamov:

Как в советнике отменить случайное нажатие смены таймфрейма?

Прочитал про Событие ChartEvent 

но там похоже это событие не отслеживается. ((



Сделайте такую проверку в OnTick() в Вашем советнике:

if(_Period != PERIOD_H1)ChartSetSymbolPeriod(0, NULL, PERIOD_H1);

это для таймфрейма  Н1, если вам нужен другой период замените выделенное на нужное Вам.

P.S. будет работать как в mql4  так и mql5

 
Sergey Kolemanov:

Сделайте такую проверку в OnTick() в Вашем советнике:

это для таймфрейма  Н1, если вам нужен другой период замените выделенное на нужное Вам.

P.S. будет работать как в mql4  так и mql5


В OnTick()  тоже будет работать, но правильнее будет сделать в OnChartEvent() :

if(id == CHARTEVENT_CHART_CHANGE)
{
   if(_Period != PERIOD_H1)ChartSetSymbolPeriod(0, NULL, PERIOD_H1);
}
но тогда надо делать такую-же проверку и в OnInit() - вдруг изначально повесите эксперт не на тот период )
 
Alexander Kharlamov:

Как в советнике отменить случайное нажатие смены таймфрейма?

Прочитал про Событие ChartEvent 

но там похоже это событие не отслеживается. ((


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

Вы не хотите перефразировать задачу?

"Как в советнике сделать так, что бы при смене таймфрейма графика, советник не менял своих настроек на работу? И работал строго на определённом ТФ независимо от ТФ на графике. ТФ задавать сразу при включении в работу."

Вот тут можно программно на закачку данных с индикаторов и баров установить требуемый таймфрейм. Срабатывание строго в определённые интервалы времени и т.д.

 
rosomah:

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

Вы не хотите перефразировать задачу?

"Как в советнике сделать так, что бы при смене таймфрейма графика, советник не менял своих настроек на работу? И работал строго на определённом ТФ независимо от ТФ на графике. ТФ задавать сразу при включении в работу."

Вот тут можно программно на закачку данных с индикаторов и баров установить требуемый таймфрейм. Срабатывание строго в определённые интервалы времени и т.д.


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

int     LastDeinitReason = 0;        

int OnInit()
{
    if(LastDeinitReason==REASON_CHARTCHANGE || LastDeinitReason==REASON_TEMPLATE)
    {
        LastDeinitReason = 0;
        return(INIT_SUCCEEDED);
    }
//если причина в другом, делаем инициализацию
}

void OnDeinit(const int reason)
{
    LastDeinitReason = reason;
    if(reason==REASON_CHARTCHANGE)
        return;
   //EventKillTimer();
}

**

 

Да, проблема именно в том чтоб не дать переключиться на другой ТФ. Перехватить нужно!

 
Alexander Kharlamov:

Да, проблема именно в том чтоб не дать переключиться на другой ТФ. Перехватить нужно!

Вы переключаете график на другой ТФ, а он не должен переключаться?! Типа,- "защита от дурака".  

Программных средств от такого я не знаю, а запомнить не удастся. Человеческий мозг склонен к забыванию и рано или поздно вы таки ткнёте "не туда" и советник некорректно сработает. Лучше сразу задать ТФ работы программно и как правильно заметили "переинициализация" не должна приводить к срабатываниям и ошибкам. Последнее, для любителей "на ходу" вносить правки в код советника и на случаи разных обрывов связи.

 
Alexander Kharlamov:

Да, проблема именно в том чтоб не дать переключиться на другой ТФ. Перехватить нужно!


Перехватить средствами MQL никак нельзя. Только отследить переключение и переключиться обратно. Из внешней программы можно теоретически поставить хук на нажатия.

 

Делаю параметр TimeFrame, и таймфрейм графика не важен, хоть запереключайся.

 
Dmitry Fedoseev:

Делаю параметр TimeFrame, и таймфрейм графика не важен, хоть запереключайся.


Само собой, так все нормальные люди и делают. Но некоторым желательно помучиться )

 

Всем спасибо я понял! 

перехватить нельзя.

У меня прописанн ТФ в командах и сов работает правильно независимо от установленного тф так что в этом смысле давно уже не мучаюсь! )

Просто открыто как правило 2 окна и нет-нет да ткнешь не там тф. и думал может есть красивый способ решить вопрос кардинально! )

Спасибо еще раз!

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