CreateLines(); // Function that creates time lines
//--- load open times M5=iTime(Symbol(),PERIOD_M5,0);
//--- set timelines
ObjectMove(0,"Time-M5",0,M5,0);
//--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ voidOnTimer() { if(M5!=iTime(Symbol(),PERIOD_M5,0)) { M5=iTime(Symbol(),PERIOD_M5,0); // overwrite old value with new value //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS)); // do something... //ObjectMove(0,"Time-M5",0,M5,0); } } //+------------------------------------------------------------------+
建国前600年(2014年 2月3日),只有start()。 现在有OnTick (EA)、OnCalculate (指标)和OnStart (脚本)。我忘了你说的是一个指标。
开始使用新的事件处理函数 - 函数 - 语言基础知识 - MQL4参考。请看如何正确地做你的回看。
是的!现在我对你的理解清楚多 了,谢谢 你了。
而你的第20 条评论给了我另一个想法。(你曾经和我分享过,现在我把它记在心里)
我也试图为我的指标写出更好的代码,现在我试图学习第18 条评论 -@Marco vd Heijden
那么我将广泛 研究你的评论。
再次感谢!
请把它放在专家中,而不是指标中,这样在将来你想添加你的交易策略时可以更容易使用。
对于条形图的问题,将条形图的开盘时间 存储在一个日期时间变量中,并简单地将记录的时间与实际时间进行比较,那么每当有新的条形图出现时,就会触发。
下面是一个例子。
首先,非常感谢您 的明确评论。
我仍然停留在指标 上。我尝试了一些方法,对我来说效果不错 ,但我面临一个问题,我不能在 "策略测试器 "上测试它--它给我带来致命的错误。MT4 "无响应"。
#1 - 马可,请告诉我它来自哪里?
#2 - 下面的代码是正确的吗?
以下是我试过的代码。
string _vlineName_M5 ;
int _prd = PERIOD_M5 ;
int _prd_add = PeriodSeconds( _prd ) ;
datetime _dt_Prd_M5 ;
int _time_M5 ;
datetime _prdCvrt_M5 ;
datetime _timeCvrt_M5 ;
//---init
EventSetMillisecondTimer( 10 );
_CreateLines();
//---timer
if ( _dt_Prd_M5 != iTime( Symbol(), _prd, 0 ) )
{
_dt_Prd_M5 = iTime( Symbol(), _prd, 0 );
_CreateLines();
}
//---_CreateLines()
//---
int _dayCnt_M5 = 0;
int _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_M15, _dayCnt_M5 ) );
for ( int i = 0; i < _cnt_M5; i++ )
{
//---time convert
_time_M5 = Time[i];
_prdCvrt_M5 = PeriodSeconds( _prd );
_timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;
//---name
_vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );
//---
if ( _Period < PERIOD_M30 )
{
{
ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
}
}
}
ObjectMove ( 0, _vlineName_M5, 0, _dt_Prd_M5, 0 );
我已经停止了工作,在你的评论之后,我将继续。(事实上,我担心上述代码在我使用它的时候会压垮我的其他指标)。
非常感谢。
MT4回测器的图表事件(Migel) - MQL4论坛
计时器功能在MT4策略测试器 中不起作用,所以你必须把它放在tick函数中。
MT4回测器的图表事件 (Migel) - MQL4论坛
非常感谢!
我可以肯定 的是,这个问题不是来自代码。
Marco vd Heijden:
下面是一个例子。
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(250);
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M5=iTime(Symbol(),PERIOD_M5,0);
//--- set timelines
ObjectMove(0,"Time-M5",0,M5,0);//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
M5=iTime(Symbol(),PERIOD_M5,0); // overwrite old value with new value
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
}
//+------------------------------------------------------------------+
非常感谢你。
这条评论教会了 我很多东西。
看起来这段代码对我很有用,我在之前的评论中提到了这段代码。
但我需要那段代码(对Period_M5有效) 在时钟12:00时不工作 (可能是13:00,14:00......),下面的代码忽略了'OBJ_VLINE'的过去时间 (这对我很好),但当目前时钟12:00时,下面的代码显示我另外的当前时间 VLINE,但我不希望它。
{
ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
} //---if Close
我尝试了 一些方法来解决我的问题,但它没有正确工作。
我还添加了屏幕截图。
请帮助我,我真的需要解决这个问题。
衷心感谢。
你怎么知道的?
因为连接中断了,我试着在断开连接 的时候使用'策略测试器',它对我来说非常有效。
在我看了你 和威廉先生 的评论后,我才确定了 这一点。
这还不够吗,抱歉?
{
ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
} //---if Close
在这个例子中,除了12:00以外,你在每个小时都得到一行,因为你用!=不同然后12的语句排除了,所以当它==等于12的时候没有一行。
聪明的 人,谢谢:)
这很简单,但我并不介意。只是简单的,而且是令人惊叹的。
(其实我在这个指标中使用了'==',但我真正关注的是'OnTimer')
//-----第二次编辑...
这对我来说很好,但当时间到了00:00时--附加的当前时间 VLINE又显示出来。
TimeHour( _timeCvrt_M5 ) == 1 ||
TimeHour( _timeCvrt_M5 ) == 2 ||
TimeHour( _timeCvrt_M5 ) == 3 ||
TimeHour( _timeCvrt_M5 ) == 5 ||
TimeHour( _timeCvrt_M5 ) == 6 ||
TimeHour( _timeCvrt_M5 ) == 7 ||
TimeHour( _timeCvrt_M5 ) == 9 ||
TimeHour( _timeCvrt_M5 ) == 10 ||
TimeHour( _timeCvrt_M5 ) == 11 ||
TimeHour( _timeCvrt_M5 ) == 13 ||
TimeHour( _timeCvrt_M5 ) == 14 ||
TimeHour( _timeCvrt_M5 ) == 15 ||
TimeHour( _timeCvrt_M5 ) == 17 ||
TimeHour( _timeCvrt_M5 ) == 18 ||
TimeHour( _timeCvrt_M5 ) == 19 ||
TimeHour( _timeCvrt_M5 ) == 21 ||
TimeHour( _timeCvrt_M5 ) == 22 ||
TimeHour( _timeCvrt_M5 ) == 23
)
(我几次更新这个评论是因为我在研究)
请帮助我。