【EA学习】怎样编制外汇EA自动交易系统
小明学外汇EA入门 2019-09-08 15:47:24 交流微信号:FX263cn
以下是一些简单的源码,供参考学习。
//+------------------------------------------------------------------+ //| Designed by OKwh, China | //| Copyright 2007, OKwh Dxdcn | //| | //+------------------------------------------------------------------+
#property copyright “Copyright 2007 , Dxd, China.” #property link ““ #define MAGICMA 200610011231 //+------------------------------------------------------------------+
//| 注意没有指标文件那些property | //+------------------------------------------------------------------+ extern int whichmethod = 1; //1~4 种下单方式 1 仅开仓, 2 有止损无止赢, 3 有止赢无止损, 4 有止赢也有止损 extern double TakeProfit = 100; //止赢点数 extern double StopLoss = 20; //止损点数 extern double MaximumRisk = 0.3; //资金控制,控制下单量 extern double TrailingStop =25;
//跟踪止赢点数设置 extern int maxOpen = 3; //最多开仓次数限制 extern int maxLots = 5; //最多单仓持仓量限制 extern int bb = 0; //非零就允许跟踪止赢 extern double MATrendPeriod=26;
//使用26均线 开仓条件参数 本例子 int i, p2, xxx,p1, res; double Lots; datetime lasttime; //时间控制, 仅当一个时间周期完成才检查条件 int init() //初始化 { Lots = 1; lasttime = NULL; return(0); } int deinit() { return(0); }
//反初始化 //主程序 int start() { CheckForOpen(); //开仓 平仓 条件检查 和操作 if (bb>0) CTP(); //跟踪止赢 return(0); }
//+------下面是各子程序--------------------------------------------+ double LotsOptimized() //确定下单量,开仓调用 资金控制 { double lot=Lots; int orders=HistoryTotal();
// history orders total int losses=0; // number of losses orders without a break //MarketInfo(Symbol(),MODE_MINLOT); 相关信息 //MarketInfo(Symbol(),MODE_MAXLOT);
//MarketInfo(Symbol(),MODE_LOTSTEP); lot=NormalizeDouble(MaximumRisk * AccountBalance()/AccountLeverage(),1); //开仓量计算 if(lot<0.1) lot=0.1; if(lot>maxLots) lot=maxLots; return(lot); }
//平仓持有的买单 void CloseBuy() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,3,White); Sleep(5000); } } } } //平仓持有的卖单 void CloseSell() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--)
{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,3,White); Sleep(5000); } } } }
//判断是否买或卖或平仓 int buyorsell() //在这个函数计算设置你的交易信号 这里使用MACD 和MA 做例子
{ double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPreviousMaPrevious) return (1);
// 买 Ma在上升,Macd在0线上,并且两线上交叉 if(MacdCurrent>0 && MacdCurrentSignalPrevious && MaCurrent
【全球外汇中文网Fx263.com ,阅读更多请登录www.Fx263.com】
//+------------------------------------------------------------------+ //| Designed by OKwh, China | //| Copyright 2007, OKwh Dxdcn | //| | //+------------------------------------------------------------------+
#property copyright “Copyright 2007 , Dxd, China.” #property link ““ #define MAGICMA 200610011231 //+------------------------------------------------------------------+
//| 注意没有指标文件那些property | //+------------------------------------------------------------------+ extern int whichmethod = 1; //1~4 种下单方式 1 仅开仓, 2 有止损无止赢, 3 有止赢无止损, 4 有止赢也有止损 extern double TakeProfit = 100; //止赢点数 extern double StopLoss = 20; //止损点数 extern double MaximumRisk = 0.3; //资金控制,控制下单量 extern double TrailingStop =25;
//跟踪止赢点数设置 extern int maxOpen = 3; //最多开仓次数限制 extern int maxLots = 5; //最多单仓持仓量限制 extern int bb = 0; //非零就允许跟踪止赢 extern double MATrendPeriod=26;
//使用26均线 开仓条件参数 本例子 int i, p2, xxx,p1, res; double Lots; datetime lasttime; //时间控制, 仅当一个时间周期完成才检查条件 int init() //初始化 { Lots = 1; lasttime = NULL; return(0); } int deinit() { return(0); }
//反初始化 //主程序 int start() { CheckForOpen(); //开仓 平仓 条件检查 和操作 if (bb>0) CTP(); //跟踪止赢 return(0); }
//+------下面是各子程序--------------------------------------------+ double LotsOptimized() //确定下单量,开仓调用 资金控制 { double lot=Lots; int orders=HistoryTotal();
// history orders total int losses=0; // number of losses orders without a break //MarketInfo(Symbol(),MODE_MINLOT); 相关信息 //MarketInfo(Symbol(),MODE_MAXLOT);
//MarketInfo(Symbol(),MODE_LOTSTEP); lot=NormalizeDouble(MaximumRisk * AccountBalance()/AccountLeverage(),1); //开仓量计算 if(lot<0.1) lot=0.1; if(lot>maxLots) lot=maxLots; return(lot); }
//平仓持有的买单 void CloseBuy() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,3,White); Sleep(5000); } } } } //平仓持有的卖单 void CloseSell() { if (OrdersTotal( ) > 0 ) { for(i=OrdersTotal()-1;i>=0;i--)
{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,3,White); Sleep(5000); } } } }
//判断是否买或卖或平仓 int buyorsell() //在这个函数计算设置你的交易信号 这里使用MACD 和MA 做例子
{ double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPreviousMaPrevious) return (1);
// 买 Ma在上升,Macd在0线上,并且两线上交叉 if(MacdCurrent>0 && MacdCurrentSignalPrevious && MaCurrent
【全球外汇中文网Fx263.com ,阅读更多请登录www.Fx263.com】
【版权声明】
本文仅代表作者观点,不代表本站立场。Fx263.com对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证,且不构成任何投资建议,请读者仅作参考,并自行承担全部风险与责任。Fx263.com作为信息内容发布平台,页面展示内容的目的在于传播更多信息,不代表Fx263.com立场;本站会员及自媒体人所发的稿件所载明的信息与本网无关,如文章涉及版权,请联系本站处理。
【风险提示】
请通过正规渠道参与外汇保证金交易。目前通过网络平台提供、参与外汇保证金交易均属非法。请提高意识,谨防损失!外汇、贵金属和差价合约(OTC场外交易)是杠杆产品,存在较高的风险,可能会导致亏损您的投资本金,请理性投资。