客服热线:18391752892

MT5指定时间周期的开盘价、收盘价、最高价、最低价

   日期:2019-01-12     浏览:25    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 这个问题要是在MT4里,简直是基础的不能再基础的东西了,但是到了MT5里,却是异常的复杂。
要分两种情况:
1 在编写指标里:
是作为OnCalculate的参数带来的如下代码:
复制代码int onCalculate (const int rates_total,const int prev_calculated,const datetime time[], // Timeconst double open[], // Openconst double high[], // Highconst double low[], // Lowconst double close[], // Closeconst long tick_volume[], // Tick Volumeconst long volume[], // Real Volumeconst int spread[] // Spread);
2 在EA里确实异常的复杂:
首先我做了如下测试:
复制代码void onTick(){double open,close,low,high;int Spread;open=SymbolInfoDouble(Symbol(),SYMBOL_ASK);//得到当前的ask价格close=SymbolInfoDouble(Symbol(),SYMBOL_BID);//得到当前的bid价格low=SymbolInfoDouble(Symbol(),SYMBOL_BIDLOW);//注意这里没有时间段参数,这里得到的是一天的最低价。high=SymbolInfoDouble(Symbol(),SYMBOL_BIDHIGH);//注意这里没有时间段参数,这里得到的是一天的最高价。}
找了半天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)获得。
下面是完整的代码:
复制代码#property copyright 2009, metaQuotes Software Corp. #property link http://www.mt5.net.cn #property version 1.00 double Open[],High[],Low[];int onInit(){return(0);}void onDeinit(const int reason){}void onTick(){double open,close,low,high;open=iOpen(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的开盘价。close=SymbolInfoDouble(Symbol(),SYMBOL_BID); //表示获得最近一根月线的收盘价。low=iLow(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的最低价。high=iHigh(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的最高价。}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);}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);}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);}//+------------------------------------------------------------------+

外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行