论坛风格切换切换到宽版
  • 3539阅读
  • 4回复

MT5指标编写实例课程--两均线"金叉“”死叉“报警 [复制链接]

上一主题 下一主题
 
发帖
7
金钱
5
威望
35
贡献
50
交易币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-10-29
本帖最后由 瞬间的光辉 于 2009-10-30 07:37 编辑 {FvFah  
#[=kQ&  
今天我给大家讲解下,我们最常用的两均线"金叉“”死叉“报警指标该怎么编写: S3%2T  
首先我们打开MQL5编辑器: ?3BcjD0  
w~6UOA8}  
新建一个指标文件: 8C3oi&av/{  
~7ZZb*].(  
nDraX_sm=  
上图中: aU(.LC  
我们确定指标的名字是macross, ly` A,dh  
给指标定义两个外部参数,也就是均线的周期参数 eB#I-eD  
longma表示长周期均线的周期参数。 I;'{X_9$a  
smallma表示短周期均线的周期参数。 D{JjSky  
将来指标完成后 可以如果想改均线的周期可以在指标加载的时候修改很方便。 zF`a:dD$d  
hYzP6?K"  
上图中:我们定义了要在指标上画四样东西: ."ZG0Zg  
long表示画一条长周期均线,颜色是红色。 J*rYw5QB  
small表示画一条短周期均线,颜色是黄色。 k( 0;>)<i  
up表示画向上箭头,颜色是白色。 PoaCnoNS  
donw表示画向下箭头,颜色是青色。 "yQBHYP  
做好以上工作后,我们点"完成"。 129\H< m  
D'!JV1Q  
下面我们展示下,完成后的效果: < +*  
&V*MNi,4Z  
接下来我们来看代码: j.]]VA  
下面代码为讲解只用,不能直接复制到mql5文件里,会运行出错,后面我会附件附上源代码文件: w? _8OJ  
//+------------------------------------------------------------------+ IoOOS5a  
//| MAcross.mq5 | GAY?F  
//|Copyright 2009, MetaQuotes Software Corp. | b|AjB:G  
//| http://www.mql5.com | 1P"7.{  
//+------------------------------------------------------------------+ 424iFc[  
#property copyright "2009, MetaQuotes Software Corp." ~"%'(j_4  
#property link "http://www.mql5.com" <b"^\]l  
#property version "1.00" Fq~Zr;A  
#property indicator_chart_window 画在主图上 Pteti  
#property indicator_buffers 4 定义4个画线位置 k'%yvlv  
#property indicator_plots 4 画4条线 @$kO7k0{g  
//---- plot long 5yt=~  
#property indicator_label1 "long" 这条线的名称 GmNCw5F  
#property indicator_type1 DRAW_LINE 这条线的类型是线性 \y271}'  
#property indicator_color1 Red 这条线的颜色 AVLY|79#  
#property indicator_style1 STYLE_SOLID 这条线是实线 ,k_ b-/  
#property indicator_width1 1 这条线的宽度是1 xKBi".wA  
//---- plot small yz0#0YG7  
#property indicator_label2 "small" .s"Og;g  
#property indicator_type2 DRAW_LINE cg^~P-i@*  
#property indicator_color2 Yellow %h0BA.r  
#property indicator_style2 STYLE_SOLID !W,LG$=/  
#property indicator_width2 1   +fM8  
//---- plot up +MHIZI  
#property indicator_label3 "up" eu)""l  
#property indicator_type3 DRAW_ARROW 这里我们要画箭头 j0oto6z~b  
#property indicator_color3 White A`~?2LH,~F  
#property indicator_style3 STYLE_SOLID W\0u[IV.x  
#property indicator_width3 1 4gEw }WiP  
//---- plot down ~x4]p|)</  
#property indicator_label4 "down" IDF0nx]  
#property indicator_type4 DRAW_ARROW ^h=gaNL  
#property indicator_color4 MediumBlue }jce5E  
#property indicator_style4 STYLE_SOLID w AdaP9h  
#property indicator_width4 1 -;8a* F  
//--- input parameters VR_/Vh ]@  
input int longma=50; 长均线周期(也就是上面图中我们输入的) I5[@C<b  
input int smallma=10; 短均线周期(也就是上面图中我们输入的) gyy}-^`F  
//--- indicator buffers `B8`<3k/(  
double longBuffer[]; (也就是上面图中我们输入的画线是long的时候,这里就会产生一个longBuffer[]数组) h<'tQGC  
double smallBuffer[]; 同上 ?qHQ#0 @y]  
double upBuffer[]; 同上 ^I6Vz?0Jl  
double downBuffer[]; 同上 =SW<Vhtb  
int longma_handle; 这里定义长周期均线的句柄,有了句柄,以后就可以做相关的操作。 HpeU'0u0VK  
int smallma_handle; 这里定义短周期均线的句柄,有了句柄,以后就可以做相关的操作。 }a UQ#x  
XMI5j7C L  
//+------------------------------------------------------------------+ NYxL7:9  
//| Custom indicator initialization function | 0Nk!.gY  
//+------------------------------------------------------------------+ vkYiO]y  
int OnInit() ?c_:S]^  
{ FKf2Q&2I  
//--- indicator buffers mapping G_k_qP^:  
SetIndexBuffer(0,longBuffer,INDICATOR_DATA); w&hCt c  
SetIndexBuffer(1,smallBuffer,INDICATOR_DATA); HB<>x  
SetIndexBuffer(2,upBuffer,INDICATOR_DATA); Cnu])R  
SetIndexBuffer(3,downBuffer,INDICATOR_DATA); t="nmjQs  
cxPOO#  
PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ARROW); %bG\  
PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ARROW); NUtKT~V  
PlotIndexSetInteger(2,PLOT_ARROW,1001); 箭头类型是1001号箭头 XZTH[#MqeI  
PlotIndexSetInteger(3,PLOT_ARROW,1002); 箭头类型是1002号箭头 9D?JzTsyg  
longma_handle=iMA(Symbol(),0,longma,0,MODE_SMA,PRICE_CLOSE); 初始化长周期均线函数 -2C^M> HZ  
smallma_handle=iMA(Symbol(),0,smallma,0,MODE_SMA,PRICE_CLOSE); 初始化短周期均线函数 cw_B^f8^  
//--- =""5 c  
return(0); h54\ \Ci  
} I;{Ua *  
//+------------------------------------------------------------------+ dL1{i,M  
//| Custom indicator iteration function | wjKc!iB  
//+------------------------------------------------------------------+ !|J2o8g  
int OnCalculate(const int rates_total, K线总数,会随着K线的增加而增加 t<^7s9r;I  
const int prev_calculated, 本根K线前一根K线的序号,通常来说prev_calculated=rates_total-1 P;IM -]  
const datetime time[], 存储所有K线的时间数组 2H~E~6G  
const double open[], 存储所有K线的开盘价数组 EgOiJH  
const double high[], 存储所有K线的最高价数组 }C JK9*Z  
const double low[], 存储所有K线的最低价数组 WjvgDNk  
const double close[], 存储所有K线的收盘价数组 }AS3]Lub@  
const long tick_volume[], <II>io ;  
const long volume[], }e>OmfxDBt  
const int spread[]) tYhNr  
{ byk9"QeY\  
int malong=CopyBuffer(longma_handle,0,0,rates_total,longBuffer); 使用longma_handle长周期均线数组句柄,把均线的值复制到longBuffer数组中 q9nQ/]rkHF  
int masmall=CopyBuffer(smallma_handle,0,0,rates_total,smallBuffer); 使用smallma_handle长周期均线数组句柄,把均线的值复制到smallBuffer数组中 'lgS;ItpKu  
2KNs,4X@  
for(int i=10;i W: 3fLXk+  
{ #\6k_toZ  
if((longBuffer[i-1]>smallBuffer[i-1])&(longBuffer 0BP=SCi  
{ b Kr73S9  
upBuffer=longBuffer;在金叉处画上白色箭头 + ;B K|([#  
if(i==prev_calculated)只针对当前K线报警历史K线就不用报警了 4`:Eiik&p  
{Alert("up");}弹出窗口报警 q=26($  
} >oyZD^gj  
if((longBuffer[i-1]smallBuffer)) 判断两均线产生了死叉 H  `_{n<  
{ S\6.vw!'  
downBuffer=longBuffer;在死叉处画上青色箭头 F2',3  
if(i==prev_calculated)只针对当前K线报警历史K线就不用报警了 K^c%$n:}+  
{Alert("down");}弹出窗口报警 DhiIKd9W  
} *YP;HL  
} W9jxw4)  
//--- KOhIk*AC '  
//--- return value of prev_calculated for next call +\25ynM  
return(rates_total); n fMU4(:  
} {A{sRT=%  
//+------------------------------------------------------------------+ }} zY]A  
以上解释我尽量做到详细,但是也难免有遗漏之处,如果还有问题,请再提问吧! vm8ER,IW)  
原文来自:第一MT5编程论坛:http://www.mt5.net.cn原文地址:http://www.mt5.net.cn/read.php?tid=287 x\K,@  
MAcross.rar (5 K) 下载次数:60
 
离线yangxiao51
发帖
50
金钱
8
威望
36
贡献
62
交易币
0
只看该作者 沙发  发表于: 2009-11-01
回复 1# 瞬间的光辉
 
发帖
7
金钱
5
威望
35
贡献
50
交易币
0
只看该作者 板凳  发表于: 2009-11-02
谢谢 兄弟帮顶!
离线商海弄潮

发帖
35
金钱
72
威望
26
贡献
93
交易币
3
只看该作者 地板  发表于: 2009-11-02
好东西为什么没人顶啊。顶顶
离线小力本
发帖
3
金钱
20
威望
1
贡献
35
交易币
0
只看该作者 地下室  发表于: 2011-09-12

  • 在线咨询
  • 400-881-0680