有您的持续关注
我们会做得更好

一套简洁的智能交易EA模板



为满足有需求的EA新手检测各种策略的可行性,同时快速上手制作自己的智能交易EA,特整理了下面这套EA模板,可以实现按不同条件组合的策略开仓,可以现价开仓也可以执行挂单。除加码策略外,大部分功能都具备也可以自行按示范拓展。

//+——————————————————————+
//|                                                   2015JXHM.mq4 |
//|                                   Copyright @2015, QQ:125808047 |
//+——————————————————————+
#property copyright “Copyright 2012, QQ:125808047”
#property link      “www.125808047.com”//以上为头部信息。
/*以下参数按小数点后3||5位浮动报价设置的。其余情况请按MT实际报价设置,比如欧美小数点后面4位数的固定报价一律少一个0   */
extern int TakeProfit = 600;//盈利点数
extern int StopLoss = 300;//止损点数
extern int Jcds = 500; //减持点数,比如开仓2手到盈利500点会平仓1.9手或者设置平仓百分比。
extern int Slippage = 30;//滑点,正常设置30点-50点随意
extern int AB = 65;//允许开仓的最大点差,浮动报价意外波动点差会放大。
extern int MagicNo = 999;//订单识别码,随意大于0的整数。
extern double Lots = 0.01;//关闭下面自动计算仓位功能会执行此固定开仓手数。
extern double MinLots = 0.01;//平台最小开仓手数。
extern double MaxLots = 0.5;//限制EA最大交易手数。
extern bool AutoLot = True;//自动按资金计算仓位的开关。False为关闭
extern int AutoLotrk = 100;//自动计算仓位的比例,多少美金下0.01手这里就设置多少。
extern int LimitLeve = 300;//挂单距离
extern   int TMT = 86400;//挂单有效期,按秒计算
extern string Symbol = “GOLD”;//交易品种。

void deinit() {
Comment(“www.125808047.com”);
}//注释,忽略不计

int start() {
HideTestIndicators(true);//禁止闲人复盘显示策略
//————————————定义开平仓指标或所需组合条件———————-
double cci = iCCI(。。。。。。。。。。。。。。。。。。。。。。。。);
double l_iclose_0 = iClose(。。。。。。。。。。。。。。。。。。。。。);
double l_iopen_0 = iOpen(。。。。。。。。。。。。。。。。。。。;
double cci_1 = iCCI(。。。。。。。。。。。。。。。。。。。。。。。。。);
double cci_2 = iCCI(。。。。。。。。。。。。。。。。。。。。。);
double cci_3 = iCCI(。。。。。。。。。。。。。。。。。。。。。);
double cci_4 = iCCI(。。。。。。。。。。。。。。。。。。。。);
double  MacdCurrent=iMACD(。。。。。。。。。。。。。。。。。。。。。。。。。。。。。);
double  SignalCurrent=iMACD(。。。。。。。。。。。。。。。。。。。。。。。。。。);
//————————————-定义指标或条件结束————————————————-
//——————–减持强平设置——————————–
for (int li_36 = OrdersTotal() – 1; li_36 >= 0; li_36–){
bool chenggong = OrderSelect(li_36, SELECT_BY_POS, MODE_TRADES);
{
double lot = NormalizeDouble(OrderLots()- MinLots, 2);
if(OrderSymbol() == Symbol() && OrderType()==OP_SELL && OrderMagicNumber() == MagicNo)
if (OrderLots()>=MinLots * 2 && OrderProfit() >= lot*Jcds )
chenggong= OrderClose(OrderTicket(),lot,Ask,3,CLR_NONE);
if(OrderSymbol() == Symbol() && OrderType()==OP_BUY && OrderMagicNumber() == MagicNo)
if (OrderLots()>=MinLots * 2 && OrderProfit() >= lot*Jcds)
chenggong= OrderClose(OrderTicket(),lot,Bid,3,CLR_NONE);
}
}
//——–为订单循环检测移动止损,盈利到达坚持或其它定义点数会执行保护1点——————–
for (int li_37 = OrdersTotal() – 1; li_37 >= 0; li_37–){
chenggong = OrderSelect(li_37, SELECT_BY_POS, MODE_TRADES);
{
if(OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
if(OrderClosePrice()-OrderOpenPrice()>Jcds*Point)
if(OrderStopLoss()+Point<OrderOpenPrice()+1*Point)
{
chenggong=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+1*Point,OrderTakeProfit(),0);
}
if(OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
if(OrderOpenPrice()-OrderClosePrice()>Jcds*Point)
if(OrderStopLoss()-Point>OrderOpenPrice()-1*Point)
{
chenggong=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-1*Point,OrderTakeProfit(),0);
}
}
}
//————————为订单循环检测移动止损结束——————————–
//————-下面开始比较各种条件组合并执行想对应开仓函数—————————
if (!ExistPositions()) {
if (Symbol()==Symbol && MacdCurrent > 0 && SignalCurrent > 0 && MacdCurrent > SignalCurrent && 。。。。。。。。。。。。。。。) {
OpenBuyBuyLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
if (Symbol()==Symbol && MacdCurrent > 0 && SignalCurrent > 0 && MacdCurrent < SignalCurrent && 。。。。。。。。。。) {
OpenBuyLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
if (Symbol()==Symbol && MacdCurrent < 0 && SignalCurrent < 0 && MacdCurrent < SignalCurrent &&。。。。。。。。。。。。。) {
OpenSellSellLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
if (Symbol()==Symbol && MacdCurrent < 0 && SignalCurrent < 0 && MacdCurrent > SignalCurrent && 。。。。。。。。。。。。。) {
OpenSellLimit();//自定义开仓函数下面单独写执行内容.上面条件满足就会执行这个函数开仓交易
return (0);
}
}
//—–上面一共示范四种不同的策略,可以自由添加或删除——————————————
txt();//自定义描述账户盈亏情况的函数,内容下面单独写。
//—————————————————-
if ((MacdCurrent < 0 && SignalCurrent < 0) || 。。。。。。。。。。。。。。。) {
DelBuyLimit();//满足IF里条件删除挂单。或者写成平仓。
}
if ((MacdCurrent > 0 && SignalCurrent > 0) || 。。。。。。。。。。) {
DelSellLimit();//满足IF里条件删除挂单。或者写成平仓。
}
//——————————————————————-
return (0);
}
//————————-定义交易———————————-
bool ExistPositions() {
for (int l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) {
if (OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo) return (TRUE);
}
return (FALSE);
}

//—————————–下面是上面用到的各种开仓函数—————
void OpenBuyBuyLimit() {
。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_BUY,。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_BUYLIMIT, 。。。。。。。。。。。);
}//可以根据需要执行挂单或现价单。

void OpenBuyLimit() {
。。。。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_BUYLIMIT, 。。。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_BUYLIMIT, 。。。。。。。。。。。。。。);
}//按照设定的距离执行挂单

void OpenSellSellLimit() {
。。。。。。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_SELL,。。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_SELLLIMIT, 。。。。。。。。。。。。。。。);
}//执行一个现价单一个挂单

void OpenSellLimit() {
。。。。。。。。。。。。。。。。。。。。。。。。。。。
bool cg = OrderSend(Symbol(), OP_SELLLIMIT, 。。。。。。。。。。。。。。。);
cg = OrderSend(Symbol(), OP_SELLLIMIT,。。。。。。。。。。。。。。。);
}//执行两个挂单

//——————–删除挂单的函数—————————
void DelBuyLimit(){
for (int li_39 = OrdersTotal() – 1; li_39 >= 0; li_39–){
bool chenggong = OrderSelect(li_39, SELECT_BY_POS, MODE_TRADES);
{
if(OrderType()==OP_BUYLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
chenggong =  OrderDelete(OrderTicket());
}
}
}
//——————————
void DelSellLimit(){
for (int li_40 = OrdersTotal() – 1; li_40 >= 0; li_40–){
bool chenggong = OrderSelect(li_40, SELECT_BY_POS, MODE_TRADES);
{
if(OrderType()==OP_SELLLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNo)
chenggong =  OrderDelete(OrderTicket());
}
}
}
//————–删除挂单函数结束———————–

//—————描述账户盈亏状态的函数——————
void txt(){
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//———————-描述账户盈亏状态函数结束————————-
}
//————————定义订单注释函数———————————————-
string GetCommentForOrder() {
return (“QQ125808047”);
}
//————自动按账户资金计算仓位的函数
double GetSizeLot() {
。。。。。。。。。。。。;
}
return (Lots);
}

//———-结束,有需要的朋友直接联系我QQ。其它方面请尽量在MQL4编程或函数模块栏目下查找或借助百度搜索。—————————-

如您喜欢此文章请点下面分享按钮↴峰汇在线 » 一套简洁的智能交易EA模板
上一篇:
下一篇:
分享到:更多 ()