论坛风格切换切换到宽版
  • 3238阅读
  • 5回复

在MT5中如何获得开盘价.收盘价,最低价,最高价 [复制链接]

上一主题 下一主题
 
发帖
7
金钱
5
威望
35
贡献
50
交易币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-11-04
本帖最后由 瞬间的光辉 于 2009-11-4 21:35 编辑 UuGv= yC^6  
.@'Vz;&mQ  
这个问题要是在MT4里,简直是基础的不能再基础的东西了,但是到了MT5里,却是异常的复杂。 ]CjODa  
要分两种情况: DVd/OU  
1 在编写指标里: ZfU_4Pl->  
是作为OnCalculate的参数带来的如下代码: .JE7vPv%!  
int OnCalculate (const int rates_total, Z5Cv$bUc  
const int prev_calculated, 6x0>E^~  
const datetime& time[], // Time })B)-8  
const double& open[], // Open (ZYOm  
const double& high[], // High dx^3(#B  
const double& low[],// Low pmC@ fB  
const double& close[], // Close IX}l)t[:(  
const long& tick_volume[], // Tick Volume L>B0%TP^  
const long& volume[], // Real Volume sb1/4u/W  
const int& spread[] // Spread &7 ,wdG  
); MIgIt"M jz  
2 在EA里确实异常的复杂: .+y#7-#6  
首先我做了如下测试: |^ qW   
wdg[pt />  
void OnTick() KksbhN{AB  
{ _u>+H#  
double open,close,low,high; o` e~1  
int Spread; 6c2fqAF>i  
open=SymbolInfoDouble(Symbol(),SYMBOL_ASK);//得到当前的ask价格 r )T`?y  
close=SymbolInfoDouble(Symbol(),SYMBOL_BID);//得到当前的bid价格 /fX]Yu  
low=SymbolInfoDouble(Symbol(),SYMBOL_BIDLOW);//注意这里没有时间段参数,这里得到的是一天的最低价。 .8"o&%$`V  
high=SymbolInfoDouble(Symbol(),SYMBOL_BIDHIGH);//注意这里没有时间段参数,这里得到的是一天的最高价。 2]@U$E='s  
} ^#G>P0mG%  
&?~> I[^~  
找了半天SymbolInfoDouble这个函数根本不能实现得到指定时间周期的open close low high 价格。 CSs3l  
后来我终于找到了解决方法,如下: +Y .As  
如果系统没有提供如何获得指定周期的开盘,最低价,最低价,那么我只能自己写函数来获得了。 "MyYu}AD  
iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)//此函数是我构造的,和MT4中系统自带的iOpen 一样用法。 `aCcTs7~]p  
iOpen(Symbol(),PERIOD_MN1,0);//表示获得最近一根月线的开盘价。 #oHHKl=M  
Wjj'yqBO^  
iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)//此函数是我构造的,和MT4中系统自带的iLow 一样用法。 sUg7  
iLow(Symbol(),PERIOD_MN1,0);//表示获得最近一根月线的最低价。 uz%rWN`{  
U7{, *  
iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)//此函数是我构造的,和MT4中系统自带的iHigh 一样用法。 " I:j a7  
iHigh(Symbol(),PERIOD_MN1,0);//表示获得最近一根月线的最高价。  HSTtDTo  
Z{%h6""  
至于收盘价其实,和bid价格是一样的所以完全就可以用系统自带的SymbolInfoDouble(Symbol(),SYMBOL_BID)获得。 P,,@&* :  
下面是完整的代码: XrYz[h*)!  
3Y>!e#  
#property copyright \"2009, MetaQuotes Software Corp.\" ,KZ_#9[>  
#property link \"http://www.mt5.net.cn\" v\Q${6kEtx  
#property version \"1.00\" ~~>D=~B0'  
double Open[],High[],Low[]; e5MX5 T^  
int OnInit() ,b2Cl[  
{ 9^ )=N=wV  
return(0); Fz-Bd*uS  
} fAYm3+.l3  
void OnDeinit(const int reason) kAU[lPt*R  
{ gaVWfG  
} }VdohX-  
void OnTick() LY/K ,6^a  
{ h8Kri}z;M  
double open,close,low,high; G,%R`Xns  
open=iOpen(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的开盘价。 5^*I]5t8  
close=SymbolInfoDouble(Symbol(),SYMBOL_BID); //表示获得最近一根月线的收盘价。 <t&0[l  
low=iLow(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的最低价。 *JUP~/Nr  
high=iHigh(Symbol(),PERIOD_MN1,0); //表示获得最近一根月线的最高价。 3 `$-  
} NO8)XJ3s  
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index) _|`S9Nms  
{ w>J|416  
double open=0; .e~17}Ka}  
ArraySetAsSeries(Open,true); :[?hU}9  
int copied=CopyOpen(symbol,timeframe,0,Bars(symbol,timeframe),Open); //将指定时间周期的开盘价格复制到指定数组。 9])dLL0  
if(copied>0 && index<copied) open=Open[index]; l`4hWs\I  
return(open); V*"-@  
} U@ Y0 z.Y  
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) 4f:B2x{  
{ uzr(gFd  
double low=0; |VQ17*4ff1  
ArraySetAsSeries(Low,true); wsYvbI!  
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low); >|'u:`A  
if(copied>0 && index<copied) low=Low[index]; Bf1,(^3XH  
return(low); bz<f u  
} -|YG**i/  
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) @8{-B;   
{ F9IrbLS9c  
double high=0; wVX]"o  
ArraySetAsSeries(High,true); I7,5ID4pn  
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); GCm(3%{V%(  
if(copied>0 && index<copied) high=High[index]; .5*5S[  
return(high); Is57)(^.-  
} A:! _ &  
open,close,low,high.rar (1 K) 下载次数:11 7vZtEwC)n  
原文来自:第一MT5编程论坛:http://www.mt5.net.cn原文地址:http://www.mt5.net.cn/read.php?tid=324
 
发帖
7
金钱
5
威望
35
贡献
50
交易币
0
只看该作者 沙发  发表于: 2009-11-05
这里太排外了,技术无国界更无论坛之分。 t?1 b(oJ  
气氛实在不对,版主发布的技术文章,千万人追捧。别的网站转来的技术文章无人问津。
 
离线shawnyau

发帖
49
金钱
41
威望
1173
贡献
151
交易币
6
只看该作者 板凳  发表于: 2009-11-05
建议多点文字说明,少点代码,呵呵。 T/FZn{I  
毕竟单纯列举代码的话,能看懂的基本就是本来已经懂的人,不懂了看了还是不懂,对初学者来说,多文字少代码,能消除高门槛的感觉。
离线小辉
发帖
11
金钱
78
威望
137
贡献
53
交易币
1
只看该作者 地板  发表于: 2009-11-05
我也在想这个问题,非得这么复杂吗?
离线ray_donglei
发帖
59
金钱
276
威望
2932
贡献
130
交易币
0
只看该作者 地下室  发表于: 2009-11-05
支持下LZ.
发帖
8
金钱
197
威望
0
贡献
86
交易币
61
只看该作者 下水道  发表于: 2010-10-20
有点过分的复杂

  • 在线咨询
  • 400-881-0680