类似于iBarShift - 页 4 1234567891011...17 新评论 fxsaber 2018.03.05 09:24 #31 Nikolai Semko:在我看来,使用SeriesInfoInteger 函数是多余的,因为它不是免费的。 是。 成为了。 速度增益约为1.5倍。 2%的收益。请注意。 将不能与PERIOD_W1和PERIOD_MN1正常工作,因为它是从1970年1月1日开始计算的,而且是星期四而不是星期一。而每个月都有不同的秒数。这需要添加到PeriodSeconds文档 中。 Nikolai Semko 2018.03.05 09:34 #32 Aleksey Vyazmikin:我没有检查过--因为我需要确定代码在特定情况下是否能工作,因为如果你自己犯了错误,责备别人是不对的。我说的是这样的情况:假设我们一天有14个小时(或者更少,如果每小时没有报价的话),我有一个M1图表,我需要知道前一天M15上的一个柱子的位移。也就是说,如果我在一小时内有45分钟,或在一天内有14小时,或任何其他时间/开关的下降,一切都能正确工作吗?我个人认为使用这样的功能是合适的。 int iBarShift(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } 但应该注意的是,它不是MQL4iBarShift 函数的完全类似物,至少是由于它没有确切 的参数 否则,它是相同的。 我粘贴的是一个简单的MQL4脚本,它显示了标准函数与这个函数的完全相同。 如果来自标准iBarShift 函数和我的函数的值不相等,则打印。它没有为我打印任何东西。 //+------------------------------------------------------------------+ //| iBarShift.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime t=TimeCurrent()+1000; const ENUM_TIMEFRAMES tf[9]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1}; while(!IsStopped()) { for(int i=0; i<9;i++) { int i1=iBarShift(NULL,tf[i],t); int i2=iBarShift2(NULL,tf[i],t); if(i1!=i2) Print(EnumToString(tf[i])," ",TimeToString(t)," ",i1," ",i2); } t-=10; Comment(TimeToString(t)); } } //+------------------------------------------------------------------+ int iBarShift2(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } //+------------------------------------------------------------------+ Nikolai Semko 2018.03.05 09:39 #33 fxsaber: 2%的胜率。请注意。什么,真的? 我懒得放GetMicrosecondCount(),所以我信任剖析。 fxsaber 2018.03.05 09:50 #34 Nikolai Semko:真的吗? 我懒得去设置GetMicrosecondCount(),所以我相信剖析。剖析是关于别的东西。2%是你能得到的最大收益。 在我的机器上的测试器中,2.5亿次调用可以节省1秒钟。 绝对是你的选择是最好的!但我甚至无法想象,为什么在MT5中你需要用条形来工作。 Nikolai Semko 2018.03.05 10:04 #35 fxsaber:但我不知道为什么在MT5中我需要用条形来工作。我在控制鼠标时使用它。例如这里。 fxsaber 2018.03.05 10:17 #36 Nikolai Semko:我在控制鼠标的时候使用这个。在这里,举例来说。是的,这就是我不明白的地方。 Nikolai Semko 2018.03.05 10:28 #37 fxsaber:是的,这就是我不明白的地方。我也不理解这种误解 )) 例如,我有一个通道,其特征之一是开始时间(左边缘)。而且我需要在不同的TF上建立这个渠道。那么,除了在一个新的TF中找到酒吧号码,我还有什么其他选择? 我有很多其他的事情。 例如,当我把所有的TFs合并成一个具有对数刻度的TFs。这是一个非常酷的话题。这里也不能没有iBarShift 的模拟功能 Nikolai Semko 2018.03.05 10:33 #38 Nikolai Semko:我个人认为,使用这样的功能是合理的。 但应该注意的是,它不是标准的MQL4iBarShift 函数的完全模拟,至少因为它没有Exact 参数 否则,它是相同的。 我粘贴的是一个简单的MQL4脚本,它显示了标准函数与这个函数的完全相同。 如果来自标准iBarShift 函数和我的函数的值不相等,则打印。我没有打印任何东西。 不,它没有,因为有Comment()。 如果你去掉它,就会出现1的不匹配,但我不认为这是一个错误,因为事实上,新的条形图 是在两个算法中定义的,有半个条形图的移动。在我看来,我的新栏检测版本比标准版本更符合逻辑。 fxsaber 2018.03.05 11:04 #39 Nikolai Semko:我也不理解这种误解 ))我不明白使用酒吧的意义。CopyRates 等。 Aleksey Vyazmikin 2018.03.30 08:26 #40 为什么脚本这么慢? 2018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=15 Stop=3 Day_Shift=0 index=02018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=02018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=15 Stop=3 Day_Shift=0 index=02018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=0 2018.03.30 09:20:49.300 Scripts script BS (Si Splice,H4) loaded successfully 2018.03.30 09:21:20.209 Scripts script BS (Si Splice,H4) removed //+------------------------------------------------------------------+ //| iBarShift.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs input ENUM_TIMEFRAMES TF=PERIOD_D1; input int Bar=3; input int calcN=1; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { for(int index=0;index<calcN;index++) { int Day_Shift=iBarShift(_Symbol,TF,iTime(_Symbol,PERIOD_CURRENT,index),false); int Start=iBarShift(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Bar+Day_Shift),false); int Stop=iBarShift(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Day_Shift),false); if(index<3)Print("1 Start=",Start," Stop=",Stop," Day_Shift=",Day_Shift," index=",index); if(index<3)Print("1 Start=",TimeToString(iTime(_Symbol,TF,Bar+Day_Shift),TIME_DATE|TIME_MINUTES), " Stop=",TimeToString(iTime(_Symbol,TF,Day_Shift),TIME_DATE|TIME_MINUTES), " Day_Shift=",TimeToString(iTime(_Symbol,PERIOD_CURRENT,index),TIME_DATE|TIME_MINUTES)," index=",index); } for(int index=0;index<calcN;index++) { int Day_Shift=iBarShift2(_Symbol,TF,iTime(_Symbol,PERIOD_CURRENT,index),false); int Start=iBarShift2(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Bar+Day_Shift),false); int Stop=iBarShift2(_Symbol,PERIOD_CURRENT,iTime(_Symbol,TF,Day_Shift),false); if(index<3)Print("2 Start=",Start," Stop=",Stop," Day_Shift=",Day_Shift," index=",index); if(index<3)Print("2 Start=",TimeToString(iTime(_Symbol,TF,Bar+Day_Shift),TIME_DATE|TIME_MINUTES), " Stop=",TimeToString(iTime(_Symbol,TF,Day_Shift),TIME_DATE|TIME_MINUTES), " Day_Shift=",TimeToString(iTime(_Symbol,PERIOD_CURRENT,index),TIME_DATE|TIME_MINUTES)," index=",index); } return; } //+------------------------------------------------------------------+ //| Получим iBarShift для заданного номера бара | //+------------------------------------------------------------------+ int iBarShift2(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } //+------------------------------------------------------------------+ //| Получим iBarShift для заданного номера бара | //+------------------------------------------------------------------+ int iBarShift(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { static int Res=-1; static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame)) { Res=::Bars(Symb,TimeFrame,time,UINT_MAX)-1; if(Res<0) Res=0; LastTime = time; LastSymb = Symb; LastTimeFrame=TimeFrame; } return(Res); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ datetime iTime(string symbol,ENUM_TIMEFRAMES tf,int index) { if(index < 0) return(-1); datetime Arr[]; if(CopyTime(symbol,tf,index,1,Arr)>0) return(Arr[0]); else return(-1); } //+------------------------------------------------------------------+ Analogue to iBarShift Errors, bugs, questions Question on Hedging 1234567891011...17 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在我看来,使用SeriesInfoInteger 函数是多余的,因为它不是免费的。
是。
成为了。
速度增益约为1.5倍。
2%的收益。请注意。
将不能与PERIOD_W1和PERIOD_MN1正常工作,因为它是从1970年1月1日开始计算的,而且是星期四而不是星期一。而每个月都有不同的秒数。
这需要添加到PeriodSeconds文档 中。
我没有检查过--因为我需要确定代码在特定情况下是否能工作,因为如果你自己犯了错误,责备别人是不对的。
我说的是这样的情况:假设我们一天有14个小时(或者更少,如果每小时没有报价的话),我有一个M1图表,我需要知道前一天M15上的一个柱子的位移。也就是说,如果我在一小时内有45分钟,或在一天内有14小时,或任何其他时间/开关的下降,一切都能正确工作吗?
我个人认为使用这样的功能是合适的。
但应该注意的是,它不是MQL4iBarShift 函数的完全类似物,至少是由于它没有确切 的参数
否则,它是相同的。
我粘贴的是一个简单的MQL4脚本,它显示了标准函数与这个函数的完全相同。
如果来自标准iBarShift 函数和我的函数的值不相等,则打印。它没有为我打印任何东西。
2%的胜率。请注意。
什么,真的?
我懒得放GetMicrosecondCount(),所以我信任剖析。
真的吗?
我懒得去设置GetMicrosecondCount(),所以我相信剖析。
剖析是关于别的东西。2%是你能得到的最大收益。
在我的机器上的测试器中,2.5亿次调用可以节省1秒钟。
绝对是你的选择是最好的!但我甚至无法想象,为什么在MT5中你需要用条形来工作。
但我不知道为什么在MT5中我需要用条形来工作。
我在控制鼠标时使用它。例如这里。
我在控制鼠标的时候使用这个。在这里,举例来说。
是的,这就是我不明白的地方。
是的,这就是我不明白的地方。
我也不理解这种误解 ))
例如,我有一个通道,其特征之一是开始时间(左边缘)。而且我需要在不同的TF上建立这个渠道。那么,除了在一个新的TF中找到酒吧号码,我还有什么其他选择?
我有很多其他的事情。
例如,当我把所有的TFs合并成一个具有对数刻度的TFs。这是一个非常酷的话题。这里也不能没有iBarShift 的模拟功能
我个人认为,使用这样的功能是合理的。
但应该注意的是,它不是标准的MQL4iBarShift 函数的完全模拟,至少因为它没有Exact 参数
否则,它是相同的。
我粘贴的是一个简单的MQL4脚本,它显示了标准函数与这个函数的完全相同。
如果来自标准iBarShift 函数和我的函数的值不相等,则打印。我没有打印任何东西。
不,它没有,因为有Comment()。
如果你去掉它,就会出现1的不匹配,但我不认为这是一个错误,因为事实上,新的条形图 是在两个算法中定义的,有半个条形图的移动。在我看来,我的新栏检测版本比标准版本更符合逻辑。
我也不理解这种误解 ))
我不明白使用酒吧的意义。CopyRates 等。
为什么脚本这么慢?
2018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=15 Stop=3 Day_Shift=0 index=0
2018.03.30 09:21:05.208 BS (Si Splice,H4) 1 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=0
2018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=15 Stop=3 Day_Shift=0 index=0
2018.03.30 09:21:20.209 BS (Si Splice,H4) 2 Start=2018.03.26 00:00 Stop=2018.03.29 00:00 Day_Shift=2018.03.29 20:00 index=0
2018.03.30 09:20:49.300 Scripts script BS (Si Splice,H4) loaded successfully
2018.03.30 09:21:20.209 Scripts script BS (Si Splice,H4) removed