ea官方的编制自动交易系统的基本知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ea官方的编制自动交易系统的基本知识

Introduction介绍

鉴于许多中国的交易者对交易系统了解不多,本文解释使用MQ4语言编制自动交易系统的基本知识.

Title 编制自动交易系统的基本知识

一个交易系统大致包括以下几个方面:

1 开仓策略,即什么条件满足时开仓, 如某条线和某条线上交叉或下交叉,

2 平仓策略,即什么条件满足时平仓, 包括止赢设置,止损设置,和跟踪止赢设置三个方面.

3 资金管理, 其中一个方面就是下单的大小

4 时间管理, 如持仓时间,开平仓时间间隔等

5 账户状态分析,如交易历史,当前资金/仓位/各仓为盈亏状态等.

当然一个交易系统不必包括全部内容,本文做为入门知识也仅通过实例介绍交易系统程序的基本构成.

//+------------------------------------------------------------------+

//| Designed by OKwh, China |

//| Copyright 2007, OKwh Dxdcn |

//| /FXTrade |

//+------------------------------------------------------------------+

#property copyright "Copyright 2007 , Dxd, China."

#property link "/FXTrade , /users/DxdC n"

#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

return (-1); // 卖

return (0); //不交易

}

int nowbuyorsell = 0;

相关文档
最新文档