类似于iBarShift - 页 14 1...7891011121314151617 新评论 Nikolai Semko 2018.04.09 15:14 #131 fxsaber:那么我就不明白为什么巴斯认为18:00:01属于M1-bar 18:01而不是18:00。而这里的逻辑和我的女儿现在已经是第二个生日了,尽管她一周前才满一岁,但这也是一个事实。或者说今天是2018年4月9日,虽然00年1月1日是2017年3个月零8天。 顺便说一下,TimeCurrent需要用SYMBOL_TIME代替。 谢谢!我真的不知道有这样一个标识符。 Nikolai Semko 2018.04.09 16:08 #132 顺便说一下,当我通过与MQL4中的Bars基准进行比较来测试iBars 算法的正确性,随机尝试不同的变体时,我发现Bars中有一个错误。 Print(Bars(_Symbol,PERIOD_MN1,D'2005.08.31 00:00:00',D'2005.08.31 23:00:00')); // 1 должен быть 0, т.к. временной диапазон находиться внутри одного бара. Print(Bars(_Symbol,PERIOD_MN1,D'2006.08.31 00:00:00',D'2006.08.31 23:00:00')); // 0 在MQL5中没有这样的错误。 当然,这并不重要,因为它只出现在时间框架=MN1,日期30和31,stop_time=23,而且只出现在2005年之前:)) 这里是MQL4的脚本,可以捕捉到它,而iBars原来比本地Bars更有参考价值。 附加的文件: TestiBars.mq4 10 kb Nikolai Semko 2018.04.09 17:51 #133 fxsaber:顺便说一下,TimeCurrent应该由SYMBOL_TIME代替。不,你不需要。 它不会增加正确性,因为TimeCurrent()对所有符号都是通用的,因为它返回所有符号的最后到达报价时间,而不是当前的时间。 同时,与TimeCurrent()相比,SymbolInfoInteger(symbol_name,SYMBOL_TIME)非常慢,每次调用iBars 都需要这个时间。 Nikolai Semko 2018.04.10 00:11 #134 对于那些有兴趣的人。 iBars的编辑版本(类似于内置的Bars,只是没有小毛病,速度更快)。 修正了一些错误。 如果你注意到你的MQL5代码突然挂起10-20秒,并且有Bars函数,可能会返回0,那么我强烈建议用这个版本替换它。 它的工作速度会更快,而且没有挂起。 int iBars(string symbol_name,ENUM_TIMEFRAMES timeframe,datetime start_time,datetime stop_time) { static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; static datetime LastTime0=0; static int PerSec=0; static int PreBars=0; static datetime LastBAR=0; static datetime LastTimeCur=0; datetime TimeCur; if(stop_time<start_time) {TimeCur=stop_time; stop_time=start_time; start_time=TimeCur; } TimeCur=TimeCurrent(); if(LastTimeFrame!=timeframe) if(timeframe==PERIOD_MN1) PerSec=2419200; else PerSec=::PeriodSeconds(timeframe); if(timeframe<PERIOD_W1) TimeCur-=TimeCur%PerSec; if(start_time>TimeCur) {LastSymb=NULL; return(0);} if(LastTimeFrame!=timeframe || LastSymb!=symbol_name || ((TimeCur-LastBAR)>0 && TimeCur!=LastTimeCur)) LastBAR=(datetime)SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE); LastTimeCur=TimeCur; if(PerSec==0) return(0); if(start_time>LastBAR) {LastTimeFrame=timeframe; LastSymb=symbol_name; return(0);} datetime tS,tF=0; bool check=true; if(timeframe<PERIOD_W1) tS=start_time-(start_time-1)%PerSec-1; else if(timeframe==PERIOD_W1) tS=start_time-(start_time-259201)%PerSec-1; else { PerSec=2678400; MqlDateTime dt; TimeToStruct(start_time-1,dt); tS=dt.year*12+dt.mon; } if(stop_time<=LastBAR) { if(timeframe<PERIOD_W1) tF=stop_time-(stop_time)%PerSec; else if(timeframe==PERIOD_W1) tF=stop_time-(stop_time-259200)%PerSec; else { MqlDateTime dt0; TimeToStruct(stop_time,dt0); tF=dt0.year*12+dt0.mon; } if(tS==tF) {PreBars=0; check=false;} } if((LastTimeFrame!=timeframe || LastSymb!=symbol_name || tS!=LastTime || tF!=LastTime0) && check) PreBars=Bars(symbol_name,timeframe,start_time,stop_time); LastTime=tS; LastTime0=(datetime)tF; LastTimeFrame=timeframe; LastSymb=symbol_name; return(PreBars); } Artyom Trishkin 2018.04.10 00:18 #135 Nikolai Semko:iBars的编辑版(类似于内置的Bars,只是没有小毛病,速度更快)。 修正了一些错误。 内置的Bars()被重载。 1. int Bars(const string symbol_name,ENUM_TIMEFRAMES timeframe) 2. int Bars(const string symbol_name,ENUM_TIMEFRAMES timeframe,datetime start_time,datetime stop_time) 你只有一个通话表格。 Nikolai Semko 2018.04.10 00:24 #136 Artyom Trishkin:内置的Bars()被重载。 你只有一个表格可以调用。如果你需要一个简短的表格,使用内置的就可以了。那里几乎没有任何故障。 fxsaber 2018.04.10 06:21 #137 Nikolai Semko:不,这是没有必要的。 它不会增加正确性,因为TimeCurrent()对所有符号都是通用的,因为它返回所有符号的最后到达报价时间,而不是当前时间。 与TimeCurrent()相比,SymbolInfoInteger(symbol_name,SYMBOL_TIME)非常慢,每次调用iBars都需要这个时间。除了感兴趣的那个人之外,所有的角色都可以去做Cotypes。 好的,看了新的来源。看到讨论过的编辑,还没有进行。我不干了。 חולםטרנסצנדר ᨖ 2018.04.10 09:11 #138 为什么开发商不自己做呢? חולםטרנסצנדר ᨖ 2018.04.10 09:12 #139 对于用户来说,调用一个函数并获得几个仪器的同步(时间对齐)的行数会更方便。 [删除] 2018.04.10 10:48 #140 顺便说一下,关于Bars()函数。这可能是导致成交的原因。 1...7891011121314151617 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么我就不明白为什么巴斯认为18:00:01属于M1-bar 18:01而不是18:00。
而这里的逻辑和我的女儿现在已经是第二个生日了,尽管她一周前才满一岁,但这也是一个事实。或者说今天是2018年4月9日,虽然00年1月1日是2017年3个月零8天。
顺便说一下,TimeCurrent需要用SYMBOL_TIME代替。
谢谢!我真的不知道有这样一个标识符。
顺便说一下,当我通过与MQL4中的Bars基准进行比较来测试iBars 算法的正确性,随机尝试不同的变体时,我发现Bars中有一个错误。
在MQL5中没有这样的错误。
当然,这并不重要,因为它只出现在时间框架=MN1,日期30和31,stop_time=23,而且只出现在2005年之前:))
这里是MQL4的脚本,可以捕捉到它,而iBars原来比本地Bars更有参考价值。
顺便说一下,TimeCurrent应该由SYMBOL_TIME代替。
不,你不需要。
它不会增加正确性,因为TimeCurrent()对所有符号都是通用的,因为它返回所有符号的最后到达报价时间,而不是当前的时间。
同时,与TimeCurrent()相比,SymbolInfoInteger(symbol_name,SYMBOL_TIME)非常慢,每次调用iBars 都需要这个时间。
对于那些有兴趣的人。
iBars的编辑版本(类似于内置的Bars,只是没有小毛病,速度更快)。
修正了一些错误。
如果你注意到你的MQL5代码突然挂起10-20秒,并且有Bars函数,可能会返回0,那么我强烈建议用这个版本替换它。
它的工作速度会更快,而且没有挂起。
iBars的编辑版(类似于内置的Bars,只是没有小毛病,速度更快)。
修正了一些错误。
内置的Bars()被重载。
你只有一个通话表格。
内置的Bars()被重载。
你只有一个表格可以调用。
如果你需要一个简短的表格,使用内置的就可以了。那里几乎没有任何故障。
不,这是没有必要的。
它不会增加正确性,因为TimeCurrent()对所有符号都是通用的,因为它返回所有符号的最后到达报价时间,而不是当前时间。
与TimeCurrent()相比,SymbolInfoInteger(symbol_name,SYMBOL_TIME)非常慢,每次调用iBars都需要这个时间。
除了感兴趣的那个人之外,所有的角色都可以去做Cotypes。
好的,看了新的来源。看到讨论过的编辑,还没有进行。我不干了。