EA生成器非常好,能不能再加上“加仓条件设定”和“平仓保护条件设定”

加仓条件:

当上一单亏损平仓后,下一单加仓系数(可调)

平仓保护条件:

当单子盈利“某点后”自动把止损价放到开仓价或开仓价上方“某点位”进行盈利保护

移动止损这种条件本人认为可有可无;

谢谢大神,可以做的话您就费心了

  • 92

你说的两个条件都需要添加自定义变量的功能,还是手写吧,用生成器实现代码量太大了,我时间不够。

douys@139.com(本人邮箱,QQ418801182,有时间的话给整整谢谢)

本人代码小白一枚,各种的生成软件和网页搜索数周,翻阅搜索出的网页数百页,偶然在一个论坛里看到你回复别人的一个贴里带了一个网页进来看了看,就收藏了,感觉高大上呀,而且还是中文的;

extern double  手数=0.1;
extern double  止损=100;
extern double  止盈=300;
extern bool    移动止损=false;
extern int     多单提损=400;
extern int     空单提损=400;
extern int     提损递增幅度=200;//比如多单提损设置40点,那么价格超过开仓价40点则止损上移20点。
extern int     滑点=30;
extern double  倍投系数=1.5;
extern int     手数精度=1;//平台支持0.01的可以设置为2,这个会影响加倍后的手数大小。
extern double  最大倍投手数=20;//根据倍投次数来设置以便控制好风险
extern int     EMA1=15;//入场信号的快线
extern int     SMA2=50;//入场信号的慢线
extern int     EMA3=144;//判断方向的快线
extern int     EMA4=169;//判断方向的慢线
int buyfuwei=多单提损;
int sellfuwei=空单提损;

int start()
  {
//定义均线值-------------------------------------------------------------------
   double ema15=iMA(Symbol(),0,EMA1,0,MODE_EMA,PRICE_CLOSE,0);
   double ema50=iMA(Symbol(),0,SMA2,0,MODE_SMA,PRICE_CLOSE,0);
   double ema144=iMA(Symbol(),0,EMA3,0,MODE_EMA,PRICE_CLOSE,0);
   double ema169=iMA(Symbol(),0,EMA4,0,MODE_EMA,PRICE_CLOSE,0);

//buy条件:没到止盈出现反向信号平仓-------------------------------------------------------------------
   if((ema144>ema169)&&(ema15>ema50))
     {
       /* for(int i=0;i<OrdersTotal();i++) //扫描订单总数
            {
                if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //选定当前持单
                  {
                     if((OrderComment()==(Symbol()+"sell"))) //如果持有空单注释一样
                       {
                           OrderClose(OrderTicket(),OrderLots(),Ask,滑点); //空仓平仓
                       }
                  }
            }  */  //这段代码是持仓单没止盈的情况下出现反向信号平仓
         if((buy(getlots(),止损,止盈,Symbol()+"buy",0)>0)&&(移动止损==true)) //下多单
           {
              多单提损=buyfuwei;
           }
      }

//sell条件:没到止盈出现反向信号平仓-------------------------------------------------------------------
   if((ema144<ema169)&&(ema15<ema50))
     {
       /* for(int i1=0;i1<OrdersTotal();i1++)
            {
                if(OrderSelect(i1,SELECT_BY_POS,MODE_TRADES))
                  {
                     if((OrderComment()==(Symbol()+"buy")))
                       {
                          OrderClose(OrderTicket(),OrderLots(),Bid,滑点);
                       }
                  }
            } */
         if((sell(getlots(),止损,止盈,Symbol()+"sell",0)>0)&&(移动止损==true))
           {
              空单提损=sellfuwei;
           }
      }

//追踪止损设置-------------------------------------------------------------------
  if(移动止损==true)
      {
          for(int i=0;i<OrdersTotal();i++) //扫描订单总数
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //选定当前持单
                     {
                       if((OrderComment()==(Symbol()+"buy"))) //如果持单编号一致
                         {
                              if(((Bid-OrderOpenPrice())/Point)>=多单提损) //如果买价-开仓价/点数>=移动止损
                                {
                                   double buysl=OrderStopLoss(); //获取订单止损价格
                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),buysl+提损递增幅度*Point,OrderTakeProfit(),0)==true)
                                   //修改止损:止损价+提损递增幅度
                                     {
                                        多单提损=多单提损+提损递增幅度; //从新赋值移动止损
                                     }
                                }
                         }
                       if((OrderComment()==(Symbol()+"sell")))
                         {
                              if(((OrderOpenPrice()-Ask)/Point)>=空单提损)
                                {
                                   double sellsl=OrderStopLoss();
                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),sellsl-提损递增幅度*Point,OrderTakeProfit(),0)==true)
                                     {
                                        空单提损=空单提损+提损递增幅度;
                                     }
                                }
                         }
                      }
                 }
           return(0);
      }
   return(0);
   }

//亏损加仓设置---------------------------------------------------------------------------
   double getlots()
     {
        double lotsok=手数;
        if(OrdersHistoryTotal()>0)
           {
              for(int i=OrdersHistoryTotal()-1;i>0;i--)
                {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
                     {
                         if(OrderSymbol()==Symbol())
                           {
                              if(OrderMagicNumber()==0)
                                {
                                   if(OrderProfit()>0)
                                     {
                                        lotsok=手数;
                                     }
                                   else
                                     {
                                       lotsok=DoubleToStr(NormalizeDouble(OrderLots()*倍投系数,手数精度),手数精度);
                                       Print("lotsok: "+lotsok);
                                       if(lotsok>最大倍投手数)
                                          {
                                             lotsok=最大倍投手数;
                                          }
                                        break;
                                     }
                                   break;
                                }
                          }
                    }
               }
           }
    else
      {
        return(手数);
      }
    return(lotsok);
      }


//buy函数----------------------------------------------------------------
int buy(double Lots,double sun,double ying,string comment,int magic)
    {
          int kaiguan=0; //初始化开关为打开
            for(int i=0;i<OrdersTotal();i++) //扫描订单总数
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //选定当前持单
                     {
                       if((OrderComment()==comment)&&(OrderMagicNumber()==magic)) //如果当前持单注释和编号和设定的一致,则开关关闭不下单。
                         {
                           kaiguan=1;
                         }
                      }
               }
            if(kaiguan==0) //如果开关打开
              {
                   int ticket=OrderSend(Symbol( ) ,OP_BUY,Lots,Ask,滑点,0,0,comment,magic,0,White); //开仓买入多单,不设止盈止损(下单成功返回编号,失败返回-1)
                   if(ticket>0) //下单成功
                   {
                    if(OrderSelect(ticket, SELECT_BY_TICKET)==true) //选定订单如果编号一致
                      {
                       if((sun!=0)&&(ying!=0)) //不设止损止盈的情况
                        {
                          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                          //修改止盈止损
                        }
                       if((sun==0)&&(ying!=0)) //不设止损,设置止盈的情况
                        {
                          OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                          //修改止盈
                        }
                       if((sun!=0)&&(ying==0)) //设置止损,不设止盈的情况
                        {
                          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),0,0,Red);
                          //修改止损
                        }
                      }
                   }
              return(ticket);
              }
             else
              {
               return(0);
              }
     }

//sell函数----------------------------------------------------------------
int sell(double Lots,double sun,double ying,string comment,int magic)
    {
               int kaiguan=0;
                 for(int i=0;i<OrdersTotal();i++)
                    {
                        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                          {
                            if((OrderComment()==comment)&&(OrderMagicNumber()==magic))
                              {
                                kaiguan=1;
                              }
                           }
                    }
                 if(kaiguan==0)
                   {
                        int ticket=OrderSend(Symbol( ) ,OP_SELL,Lots,Bid,滑点,0,0,comment,magic,0,Red);
                        if(ticket>0)
                        {
                          if(OrderSelect(ticket, SELECT_BY_TICKET)==true)
                           {
                             if((sun!=0)&&(ying!=0))
                              {
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                              }
                             if((sun==0)&&(ying!=0))
                              {
                               OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                              }
                             if((sun!=0)&&(ying==0))
                              {
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),0,0,Red);
                              }
                           }
                        }
                        return(ticket);
                   }
                  else
                   {
                    return(0);
                   }
    }

这个EA您给帮忙看一下,能不能把移动止损给改成平保(就让它达到200点时,把止损移到开仓点位5个点位置);还有就是这个EA总是不按开仓方向设定开仓单向仓(这是金叉开后,死叉后平仓后又开空,没有您这个程序那么干脆;

想要的是一个这样的EA;

  1. 开仓手数设定;
  2. 开仓方向判断条件:当,100均线上穿150均线默认为多头行情,只开多不开空、反之只开空不开多;
  3. 开、平仓条件:当,5均线20均线金叉开仓死叉平仓;(均线可调,确认交叉后开、平仓)
  4. 加仓条件:当上一单亏损平仓后,下一单加仓系数(可调)
  5. 止损点数设定
  6. 平保条件设定

自己在您的这个生成器里也生成了一个EA(但是4和6的功能没有)还得让大神有空的时候给帮忙吧!万分感谢;

下面这个是生成的代码

#property copyright "Copyright 2015 - 2018, Bary.com"
#property link "http://www.bary.com/"
#property strict
#property description "本程序由 Bary EA 生成器自动生成。"
#property description " "
#property description "生成日期:2018-01-04"
#property description "详细说明、Bug 反馈及下载作者其他项目请访问:www.bary.com"
input double mrxxkytmmvpGlpOKEwQzlzujrptjlmKZ=0.1;/*开单手数*/input int nPxhixHPqwsGlhPCjvKGlpFlEGFlGX=5;/*入场MA快线*/input int nPxhixHPqwsGlhPCjvKGnLnMEGFlGX=20;/*入场MA慢线*/input int nPxhixHQsCEGlOOrEwOkjzuwvvQuNznHvptDvpyZ=120;/*方向判断MA快线*/input int nPxhixHQsCEGlOOrEwOkjzuwvvQuNzuPultDvpyZ=144;/*方向判断MA慢线*/input int nPxhixHQvwronNmHEGLltzuvwKU=220;/*止损点数*/input int nPxhixHQvwropQEiEGLltzuvwKU=1000;/*止盈点数*/input int nPxhixHQxoiGpKvz=20;/*滑点*/int OnInit(){return(INIT_SUCCEEDED);}void send_order(string s,int t,double v,double p,int sp,double sl,double tp,string cmt=NULL,int mn=0){for(int i=0; i<OrdersTotal(); i++){if(OrderSelect(i,SELECT_BY_POS)&&OrderMagicNumber()==mn&&OrderSymbol()==s){return;}}bool r=OrderSend(s,t,v,p,sp,sl,tp,cmt,mn);}void close_order(int t,int mn){for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i,SELECT_BY_POS)&&OrderMagicNumber()==mn&&OrderType()==t){bool r;if(0==t){r=OrderClose(OrderTicket(),OrderLots(),Bid,99999);}else{r=OrderClose(OrderTicket(),OrderLots(),Ask,99999);}}}}void OnTick(){if(((iMA(NULL,0,nPxhixHPqwsGlhPCjvKGlpFlEGFlGX,0,0,0,1)>iMA(NULL,0,nPxhixHPqwsGlhPCjvKGnLnMEGFlGX,0,0,0,1))&&(iMA(NULL,0,nPxhixHQsCEGlOOrEwOkjzuwvvQuNznHvptDvpyZ,0,0,0,1)>iMA(NULL,0,nPxhixHQsCEGlOOrEwOkjzuwvvQuNzuPultDvpyZ,0,0,0,1)))){send_order(_Symbol,0,mrxxkytmmvpGlpOKEwQzlzujrptjlmKZ,Bid,nPxhixHQxoiGpKvz,(Ask-(nPxhixHQvwronNmHEGLltzuvwKU*SymbolInfoDouble(_Symbol,SYMBOL_POINT))),(Ask+(nPxhixHQvwropQEiEGLltzuvwKU*SymbolInfoDouble(_Symbol,SYMBOL_POINT))),NULL,678910);}if((iMA(NULL,0,nPxhixHPqwsGlhPCjvKGlpFlEGFlGX,0,0,0,1)<iMA(NULL,0,nPxhixHPqwsGlhPCjvKGnLnMEGFlGX,0,0,0,1))){close_order(0,678910);}if(((iMA(NULL,0,nPxhixHPqwsGlhPCjvKGlpFlEGFlGX,0,0,0,1)<iMA(NULL,0,nPxhixHPqwsGlhPCjvKGnLnMEGFlGX,0,0,0,1))&&(iMA(NULL,0,nPxhixHQsCEGlOOrEwOkjzuwvvQuNznHvptDvpyZ,0,0,0,1)<iMA(NULL,0,nPxhixHQsCEGlOOrEwOkjzuwvvQuNzuPultDvpyZ,0,0,0,1)))){send_order(_Symbol,1,mrxxkytmmvpGlpOKEwQzlzujrptjlmKZ,Bid,nPxhixHQxoiGpKvz,(Bid+(nPxhixHQvwronNmHEGLltzuvwKU*SymbolInfoDouble(_Symbol,SYMBOL_POINT))),(Bid-(nPxhixHQvwropQEiEGLltzuvwKU*SymbolInfoDouble(_Symbol,SYMBOL_POINT))),NULL,109876);}if((iMA(NULL,0,nPxhixHPqwsGlhPCjvKGlpFlEGFlGX,0,0,0,1)>iMA(NULL,0,nPxhixHPqwsGlhPCjvKGnLnMEGFlGX,0,0,0,1))){close_order(1,109876);}}

douys@139.com(本人邮箱,QQ418801182,有时间的话给整整谢谢)

白杉 回复 #2

盈利保护

同时满足下列条件:

  1. 有持仓单。
  2. 持仓单止损价 < 建仓价 + 5 点。
  3. 市价 >= 建仓价 200 点。

则修改止损价为建仓价 + 5 点。

上述逻辑放在 OnCalculate() 里。

建仓方向

建议你把条件二直接加到 buy()sell() 函数中,像这样:

int buy(){
    if(iMA(100) > iMA(150)){
        你的代码...
    }
}

这样就保证了只要通过这两个函数来建仓就不会建错方向,避免你说的死叉立刻反向建仓。

该帖仅注册用户可评论
回到
顶部