请教几个MT5(MQL5)的编写问题,谢谢 比如有下面一些获得high low open close的函数,如果想获得本周期和上一周期的值,调用下面函数时其中的int index参数应该为什么值? 本周期的high low open close的值,int index参数应该为0还是1?或者为其他什么值? 下一周期high low open close的值,int index参数应该是多少? 谢谢 double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; ArraySetAsSeries(Low,true); int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low); if(copied>0 && index<copied) low=Low[index]; return(low); } //+------------------------------------------------------------------+ //| Get the High for specified bar index | //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; ArraySetAsSeries(High,true); int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); if(copied>0 && index<copied) high=High[index]; return(high); } //+------------------------------------------------------------------+ //| Get Open for specified bar index | //+------------------------------------------------------------------+ double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double open=0; ArraySetAsSeries(Open,true); int copied=CopyOpen(symbol,timeframe,0,Bars(symbol,timeframe),Open); if(copied>0 && index<copied) open=Open[index]; return(open); } //+------------------------------------------------------------------+ //| Get Close for specified bar index | //+------------------------------------------------------------------+ double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double close=0; ArraySetAsSeries(Close,true); int copied=CopyClose(symbol,timeframe,0,Bars(symbol,timeframe),Close); if(copied>0 && index<copied) close=Close[index]; return(close); }
MT4的BAR柱排序是從右往左計算,當前為0,逆時增加。 MT5則相反,從左往右計算,圖表上的左邊第一個柱為0,順時增加,rates_total為BAR總數,當前為rates_total-1。 http://www.mt5.net.cn/read.php?tid=323 你要的index值應該是rates_total-1和rates_total-2。
// Function of a new bar bool isNewBar() { static datetime BarTime; bool res = false; if(BarTime != Time[0]) { BarTime = Time[0]; res = true; } return(res); } 这个判断是否为新一格,可能对你有用
谢谢,我试试看,反正这次mt5是给搞的头大了。 另外好像vista的系统有个“怪现象”,过去也发现过,就是vista下编译的同名文件,系统调用的时候还是用的以前编译后的文件,没有采用新文件,就算就手工删除后重新编译后还是调用过去的(指的是同名文件)。以前复制一些更改后的同名文件时也发现有类似的现象。
谢谢,这次看来时间来不及了,随便搞搞了。 http://www.mql5.com/en/articles/81 MT4的代码: int h=TimeHour(TimeLocal()); if((h>=21) || (h<=2)) { OrderSend } 好像MT5的代码要转换成这样: int TimeHourMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.hour); } int h=TimeHourMQL4((TimeLocal()); if((h>=21) || (h<=2)) { OrderSend }
嘿嘿,时间太紧了,这次胡乱搞搞了。 自己写的一个day跑8万多,但看了下测试的交易记录好像不少交易和预想的不同,估计是编写问题,后来找到一个现成的修改了参数m5跑了10万多,就是最大持仓数只有5手,看看今天有没有时间修改下,没时间就不动了,只是这样初始手数就是5手风险比较大些,而且后面的利润扩展不足。已经准备放弃自己写的那个不可靠的了,就用那个找来的现成的玩玩。
得到当前和上一周期的开盘,最高,最低,收盘数据是不是可以按照下面这些代码得到? 谢谢 #define BAR_COUNT 2 double Open[BAR_COUNT],High[BAR_COUNT],Low[BAR_COUNT],Close[BAR_COUNT]; if(CopyOpen(_Symbol,PERIOD_CURRENT,0,BAR_COUNT,Open)!=BAR_COUNT || CopyHigh(_Symbol,PERIOD_CURRENT,0,BAR_COUNT,High)!=BAR_COUNT || CopyLow(_Symbol,PERIOD_CURRENT,0,BAR_COUNT,Low)!=BAR_COUNT || CopyClose(_Symbol,PERIOD_CURRENT,0,BAR_COUNT,Close)!=BAR_COUNT) { Print("CopyData failed, no data"); }