如何获得MT5指定时间周期的开盘价、收盘价、最高价、最低价?(2011-02-04 16:45:33)
如何获得MT5指定时间周期的开盘价、收盘价、最高价、最低价?
这个问题要是在MT4里,简直是基础的不能再基础的东西了,但是到了MT5里,却是异常的复杂。 要分两种情况: 1 在编写指标里: 是作为OnCalculate的参数带来的如下代码: 复制代码 1. 2. int _disibledevent=SymbolInfoDouble(Symbol(),SYMBOL_ASK);//得到当前的ask价格 7. close=SymbolInfoDouble(Symbol(),SYMBOL_BID);//得到当前的bid价格 8. low=SymbolInfoDouble(Symbol(),SYMBOL_BIDLOW);//注意这里没有时间段参数,这里得到的是一天的最低价。 9. high=SymbolInfoDouble(Symbol(),SYMBOL_BIDHIGH);//注意这里没有时间段参数,这里得到的是一天的最高价。 10. } 找了半天SymbolInfoDouble这个函数根本不能实现得到指定时间周期的open close low high 价格。 后来我终于找到了解决方法,如下: 如果系统没有提供如何获得指定周期的开盘,最低价,最低价,那么我只能自己写一个函数来获得了。 iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)//此函数是我构造的,和MT4中系统自带的iOpen 一样用法。 iOpen(Symbol(),PERIOD_MN1,0);//表示获得最近一根月线的开盘价。 iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)//此函数是我构造的,和MT4中系统自带的iLow 一样用法。 iLow(Symbol(),PERIOD_MN1,0);//表示获得最近一根月线的最低价。 iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)//此函数是我构造的,和MT4中系统自带的iHigh 一样用法。 iHigh(Symbol(),PERIOD_MN1,0);//表示获得最近一根月线的最高价。 至于收盘价其实,和bid价格是一样的所以完全就可以用系统自带的SymbolInfoDouble(Symbol(),SYMBOL_BID)获得。 下面是完整的代码: 复制代码 1. 2. #property copyright "2009, MetaQuotes Software Corp." 3. #property link "http://www." 4. #property version "1.00" 5. double Open[],High[],Low[]; 6. int _disibledevent=iOpen(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的开盘价。 17. close=SymbolInfoDouble(Symbol(),SYMBOL_BID); //表示获得最近一根月线的收盘价。 18. low=iLow(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的最低价。 19. high=iHigh(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的最高价。 20. } 21. double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index) 22. { 23. double pen=0; 24. ArraySetAsSeries(Open,true); 25. int copied=CopyOpen(symbol,timeframe,0,Bars(symbol,timeframe),Open); //将指定时间周期的开盘价格复制到指定数组。 26. if(copied>0 && index<copied) pen=Open[index]; 27. return(open); 28. } 29. double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) 30. { 31. double low=0; 32. ArraySetAsSeries(Low,true); 33. int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low); 34. if(copied>0 && index<copied) low=Low[index]; 35. return(low); 36. } 37. double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) 38. { 39. double high=0; 40. ArraySetAsSeries(High,true); 41. int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); 42. if(copied>0 && index<copied) high=High[index]; 43. return(high); 44. } 45. //+------------------------------------------------------------------+ |
|
来自: visionary555 > 《证券》