文章 "从 MQL4 迁移到 MQL5" - 页 4 1234567891011...13 新评论 Sergey Pavlov 2010.05.23 16:31 #31 Interesting : 我开始对这个设计的功能产生了很大的怀疑。无论我如何努力去理解这个区块的逻辑,我都无法理解(我也很努力)....。怀疑什么?它算对了。//+------------------------------------------------------------------+ //|测试。mq5 //+------------------------------------------------------------------+ #include <InitMQL4.mqh> double close[]; int total,count; datetime time[]; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnStart() { count=Bars(_Symbol,_Period); total=CopyClose(_Symbol,_Period,0,count,close); total=CopyTime(_Symbol,_Period,0,count,time); ArraySetAsSeries(time,true); ArraySetAsSeries(close,true); int N=7; int shift=iBarShiftMQL4(_Symbol,_Period,time[N]); Print("TIME",time[N],"BAR=",shift," CLOSE=",close[shift]); } //+------------------------------------------------------------------+ int iBarShiftMQL4(string symbol, int tf, datetime time, bool exact=false) { if(time<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[],time1; CopyTime(symbol,timeframe,0,1,Arr); time1=Arr[0]; if(CopyTime(symbol,timeframe,time,time1,Arr)>0) return(ArraySize(Arr)-1); else return(-1); } //+------------------------------------------------------------------+ [删除] 2010.05.23 20:18 #32 DC2008 :有什么问题吗?他算得没错。现在开始耍花招1.在 MT4 中,我们写下这一行并在 H4 上执行代码Print(iBarShift(Symbol(),Period(),1274356800,false)); //日期 20.05.2010 12:00 pm然后在 MT5 和字符串中做同样的操作。int shift=iBarShiftMQL4(_Symbol,_Period,StringToTime("20.05.2010 12:00"),false);结果得到 8。2.然后,我们在 D1 上执行完全相同的操作。结果 MT4 返回 -1,MT5 返回 0。现在谁能告诉我iBarShiftMQL4 的实现与必要的...int iBarShiftMQL4(string symbol, int tf, datetime time, bool exact=false) { if(time<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[],time1; CopyTime(symbol,timeframe,0,1,Arr); time1=Arr[0]; if(CopyTime(symbol,timeframe,time,time1,Arr)>0) return(ArraySize(Arr)-1); else return(-1); } Sergey Pavlov 2010.05.23 22:56 #33 试试这个:int iBarShiftMQL4(string symbol, int tf, datetime time, bool exact=false) { if(time<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[],time1; CopyTime(symbol,timeframe,0,1,Arr); time1=Arr[0]; if(CopyTime(symbol,timeframe,time,time1,Arr)>0) { if(ArraySize(Arr)>2) return(ArraySize(Arr)-1); if(time<time1) return(1); else return(0); } else return(-1); } Vasily 2010.05.31 18:56 #34 再说一遍,你读过你所写的功能吗?在 mcl4 上写得很清楚double iClose( string symbol, int timeframe, int shift) 从shift 参数指定的相应图表(符号、时间框架)中返回条形图的收盘价。如果出现错误,函数返回 0。要获取更多错误信息,请调用 GetLastError() 函数。 对于当前图表,收盘价信息在预定义的Close[] 数组中。 您有....return(-1); 版主在看什么? Sergey Pavlov 2010.06.01 14:07 #35 感谢 CoreWinTT。修正了以下函数:iClose、iLow、iHigh、iOpen、iTime、iVolume。如果出现错误,它们将返回 0 而不是 -1。 Vasily 2010.06.01 15:20 #36 它们什么时候会出现在图书馆?这样他们至少因为如果你打开它,问题就出现了,而上述书面???? 的含义。并至少收集所有问题都已解决的函数,并着手研究其余函数中的错误。 Vasily 2010.06.01 15:30 #37 bool SetIndexBuffer( int index, // 缓冲区索引 double buffer[], // 数组 ENUM_INDEXBUFFER_TYPE data_type // 我们要存储的内容 ); 前几天,有人提出了一种创建 μl4 环境的巧妙方法数组。int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[])的数组来创建一个 μl4 环境,但由于这些数组具有常量状态,因此很难使用它们。您无法创建全局缓冲区因为它们必须借助SetIndexBuffer 使用全局 声明的double 类型一维动态数组关联指定的指示器缓冲区。 但只有 double 类型的数组和卷无法通过。剩下的唯一办法就是在 mql4 模块中启动这些数组。这实际上等同于重写 indicator.... Sergey Pavlov 2010.06.01 15:37 #38 CoreWinTT:它们什么时候会出现在图书馆里? 已经有了。 Vasily 2010.06.01 15:41 #39 它是空的,也曾是空的,只有一堆定义,再无其他.... [删除] 2010.06.02 20:00 #40 CoreWinTT:它们什么时候会出现在图书馆?这样他们至少因为如果你打开它,问题就出现了,而上述书面???? 的含义。并至少收集所有问题都已解决的函数,并着手研究其余函数中的错误。长期以来,在私人图书馆中有很多关于这一主题的解决方案。 例如,我从一开始就使用 IsTesting() 和类似的东西,而且很长时间以来,所有问题都是用日期和时间解决的(当然,还有其他解决方案)....。 另外,MT5 本身也存在此类 "过时解决方案"... 1234567891011...13 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我开始对这个设计的功能产生了很大的怀疑。无论我如何努力去理解这个区块的逻辑,我都无法理解(我也很努力)....。
怀疑什么?它算对了。
有什么问题吗?他算得没错。
现在开始耍花招
1.在 MT4 中,我们写下这一行并在 H4 上执行代码
然后在 MT5 和字符串中做同样的操作。
结果得到 8。
2.然后,我们在 D1 上执行完全相同的操作。
结果 MT4 返回 -1,MT5 返回 0。
现在谁能告诉我iBarShiftMQL4 的实现与必要的...
试试这个:
再说一遍,你读过你所写的功能吗?
在 mcl4 上写得很清楚
对于当前图表,收盘价信息在预定义的Close[] 数组中。
您有....
版主在看什么?
感谢 CoreWinTT。
修正了以下函数:iClose、iLow、iHigh、iOpen、iTime、iVolume。如果出现错误,它们将返回 0 而不是 -1。
它们什么时候会出现在图书馆?
这样他们至少
因为如果你打开它,问题就出现了,而上述书面???? 的含义。
并至少收集所有问题都已解决的函数,并着手研究其余函数中的错误。
前几天,有人提出了一种创建 μl4 环境的巧妙方法
数组。
的数组来创建一个 μl4 环境,但由于这些数组具有常量状态,因此很难使用它们。
您无法创建全局缓冲区
因为它们必须借助
SetIndexBuffer
使用全局 声明的double 类型一维动态数组关联指定的指示器缓冲区。
但只有 double 类型的数组和卷无法通过。
剩下的唯一办法就是在 mql4 模块中启动这些数组。
这实际上等同于重写 indicator....
它们什么时候会出现在图书馆里?
它们什么时候会出现在图书馆?
这样他们至少
因为如果你打开它,问题就出现了,而上述书面???? 的含义。
并至少收集所有问题都已解决的函数,并着手研究其余函数中的错误。
长期以来,在私人图书馆中有很多关于这一主题的解决方案。
例如,我从一开始就使用 IsTesting() 和类似的东西,而且很长时间以来,所有问题都是用日期和时间解决的(当然,还有其他解决方案)....。
另外,MT5 本身也存在此类 "过时解决方案"...