staticintChanGeTF = 0; // Признак смены ТФ , держим как статическую переменную в памяти эксперта
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
if( ChanGeTF == 0) // при первом вызове код в OnInit полностью обрабатывается , но не отработает если просто менялся ТФ
{
// тут сформируем переменные для нашего эксперта которые отработают при первом старте экперта
// возможно сформируем графические объекты
}
else
{
ChanGeTF=0;
// сюда попадет при смене ТФ
// а формировать ничего уже не будем , у нас все сформировано и мы не желаем делать инициализацию переменных
// но если необходимо - что то обработаем в код OnInit
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
Print(__FUNCTION__,"_UninitReason = ",getUninitReasonText(_UninitReason)); // пишем в лог причину входа в DeInit - очень полезная информация
if ( REASON_CHARTCHANGE != _UninitReason )
{
// сюда не попадаем , если произошла смена ТФ
// удалим графические объекты - для полноценного завершения работы эксперта
//
}
else
{
// сюда попадем если просто произошла смена ТФ
// сделаем то что нам интересно - но при этом - к примеру - не будем удалять с графика графические объекты
ChanGeTF=1;
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+string getUninitReasonText(int reasonCode)
{
string text="";
//--- switch(reasonCode)
{
caseREASON_ACCOUNT:
text="Account was changed";break;
caseREASON_CHARTCHANGE:
text="Symbol or timeframe was changed";
break;
caseREASON_CHARTCLOSE:
text="Chart was closed";break;
caseREASON_PARAMETERS:
text="Input-parameter was changed";break;
caseREASON_RECOMPILE:
text="Program "+__FILE__+" was recompiled"; break;
caseREASON_REMOVE:
text="Program "+__FILE__+" was removed from chart";break;
caseREASON_TEMPLATE:
text="New template was applied to chart";break;
default:text="Another reason";
}
//--- return text;
}
改变时间框架时解决问题的选项
如果你刚刚改变了TF
1)可能没有必要删除图形对象。
2) 也许没有必要重新初始化一些变量
改变时间框架时解决问题的选项
如果你刚刚改变了TF
1)可能没有必要删除图形对象。
2) 也许没有必要重新初始化一些变量
。
改变时间框架时解决问题的选项
如果只是有一个时间框架的变化
1)也许你不应该删除图形对象。
2) 也许你不应该重新初始化任何变量
你的代码将无法工作。
再一次。
你不能控制Inite中Deinit的结果,因为Deinit可能会在Inite完成后发挥作用。
你的代码 将无法工作。
再一次。
你不能在Inite中控制Deinit的结果,因为Deinit可以在Inite运行后被触发。
你的意思是它在指标中不起作用? 在专家中它起作用。
如何在一个指标中处理这些取消初始化的代码,这些代码有什么作用?因为没有可能在指标中等待,所以睡眠不起作用。
你没有读过我写的东西几遍吗?
指标中没有办法。你不可能从一开始就用五个人做这件事。因为你下载的是一个完全新的指标副本,并带有所有后果。
专家是没有问题的。这个话题只是关于指标。仔细阅读。
我读了第一个帖子。
它说,我引用一下。
"书面指示人或共同评估人"
我读了第一个帖子。
它说,我引用一下。
"由指标或共同作者撰写"。
这就是专家顾问的结束。
说什么是合理的,什么是不合理的,这是不太正确的。
在写之前,我对这一主题做了一个小小的梳理。
我在主题中粘贴了一个代码样本,现在阅读主题的人可以看到,这种机制在指标中不起作用,在EA中起作用。
该话题的作者至少得到了一个问题的答案,而且是用一个例子。
嗯,说什么是合理的,什么是不合理的,其实并不准确。
在写作之前,我对这个问题做了一点研究。
现在读过该主题的人可以看到,这种机制在指标中不起作用,在EA中起作用。