如何用MQL4语言 编写外汇趋势交易程序
1、新建EA程序:打开MQL4编辑器,新建一个EA,起名MyEA,点击下一步进入编程界面
2、界面上三个函数
OnInit()是初始化函数,当载入EA的时候执行一次;
OnDeinit(const int reason)是当关闭EA的时候执行一次;
void OnTick()函数,是当每个价格到达的时候执行;
3、在开头部分需要填写的外部可设置的参数(包括止盈,止损,交易手数,两个均线的周期 ,一个20日均线,一个5日均线)
extern double TakeProfit = 50; //止盈点数
extern double StopLoss = 20; //止损点数
extern double Lots = 0.1; //交易手数
extern double Poin; //平台最小报价单位
extern int MAPeriodSlow=20; //20日移动平均
extern int MAPeriodfast=5; //5日移动平均
4、在OnInit()函数中编写初始化函数,主要是为了统一不同币种最小报价单位
if (Point == 0.00001) Poin = 0.0001; //6 digits
else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)
else Poin = Point; //Normal
5、在OnDeinit()函数中填写逻辑和交易函数
double myMAslow,myMAfast,myMAslow1,myMAfast1;
int i=0;
myMAslow=iMA(Symbol(),0,MAPeriodSlow,0,MODE_SMA,PRICE_CLOSE,0);
myMAfast=iMA(Symbol(),0,MAPeriodFast,0,MODE_SMA,PRICE_CLOSE,0);
myMAslow1=iMA(Symbol(),0,MAPeriodSlow,0,MODE_SMA,PRICE_CLOSE,1);
myMAfast1=iMA(Symbol(),0,MAPeriodFast,0,MODE_SMA,PRICE_CLOSE,1);
//上穿买入 平掉趣吩卖单
if(myMAfast>myMAslow && myMAfast1<myMAslow1)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
if(OrdersTotal()==0)
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Poin,Ask+TakeProfit*Poin,"TF0_1",0,Green);
}
//下穿卖出 平掉番之劣买单
if(myMAfast<myMAslow && myMAfast1>myMAslow1)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(OrdersTotal()==0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Poin,Bid-TakeProfit*Poin,"TF0_1",0,Red);
}
6、最后回测一下效果,点击测量测试,或者显示中的EA测试选项(或者Ctrl+R键),
选择你的EA,选择测试货币对,点击复盘显示,选择时选诸间周期进行测试,最后点击测试进行复盘测试。