看看这个选项
#define DEFINE_TIMESERIE(NAME,FUNC,T) \ class CLASS##NAME \ { \ public: \ static T Get(const string Symb,const int TimeFrame,const int iShift) \ { \ T tValue[]; \ \ return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \ } \ \ T operator[](const int iPos) const \ { \ return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \ } \ }; \ \ CLASS##NAME NAME; \ \ T i##NAME(const string Symb,const int TimeFrame,const int iShift) \ { \ return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \ } DEFINE_TIMESERIE(Volume,TickVolume,long) DEFINE_TIMESERIE(Time,Time,datetime) DEFINE_TIMESERIE(Open,Open,double) DEFINE_TIMESERIE(High,High,double) DEFINE_TIMESERIE(Low,Low,double) DEFINE_TIMESERIE(Close,Close,double)
与 MT4 一样,您可以调用 Open[bar]、High[bar]、Time[bar]、Volume[bar] 等。还可以调用 iHigh(...)、iClose(...) 等。
Dmitry Fedoseev:
与 MT4 不同,在 MT4 中,访问 Open[]、High[]、Low[]、Close[] 保证返回值,而在 MT5 中,CopyClose() 等函数可能返回-1,即必须检查返回值。也就是说,无法将代码从 MT4 直接转换到 MT5。
如何重现 MT5 无法重复 MT4 行为的情况?
与 MT4 不同,在 MT4 中,访问 Open[]、High[]、Low[]、Close[] 保证返回值,而在 MT5 中,CopyClose() 等函数可能返回-1,即必须检查返回值。也就是说,无法将代码从 MT4 直接转换到 MT5。
CPrice:
作者: Dmitry Melnichenko