智能交易网,程序化交易,自动交易,量化交易

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

参加MT4智能交易编程培训,7课免费在线试听MT4指标,EA代写,或EA指标加密账户远程验证服务 最完善商业MT4跟单系统(0.1秒极速响应不漏单)
为论坛做贡献有奖学金,奖学金可直接换真钱 扫本站微信公 众号部分视频课程指标EA免费得智能交易网MT4操盘神器,扫公众号免费得
查看: 777|回复: 6

老师,各位大神,请教移动止损问题

[复制链接]
发表于 2018-6-29 21:39:48 | 显示全部楼层 |阅读模式
  老师的顺势加仓EA,是否可以实现移动止损功能,比如说第一张单固定止损,当加仓条件满足,每加一次仓,将统一止损价格移至上一个开仓价做保本止损?求教
回复

使用道具 举报

 楼主| 发表于 2018-6-29 21:43:12 | 显示全部楼层
     double buyop,buylots;
     int buydanshu=buydanshu(buyop,buylots);
     if(buydanshu==0)
      {
        if(xiao0>da0 && xiao1<da1)
          {
           if(buytime!=Time[0])
            {
              if(buy(初始下单量,0,0,Symbol()+"buy",magic)>0)
               {
                 buytime=Time[0];
               }
            }
          }
      }
     else
      {
        if(xiao0>da0 && buydanshu<盈利加仓次 && (Ask-buyop)>=盈利加仓间隔点数*Point)
         {
           buy(flots(buylots*盈利加仓下倍数),0,0,Symbol()+"buy"+buydanshu,magic);
         }
      }
     double sellop,selllots;
     int selldanshu=selldanshu(sellop,selllots);
     if(selldanshu==0)
      {
        if(xiao0<da0 && xiao1>da1)
          {
            if(selltime!=Time[0])
            {
              if(sell(初始下单量,0,0,Symbol()+"sell",magic)>0)
                {
                  selltime=Time[0];
                }
            }
          }
      }
     else
      {
        if(xiao0<da0 && selldanshu<盈利加仓次 && (sellop-Bid)>=盈利加仓间隔点数*Point)
         {
           
           sell(flots(selllots*盈利加仓下倍数),0,0,Symbol()+"sell"+selldanshu,magic);
         }
      }
     if(xiao0<da0 && xiao1>da1)//死叉,把多单全部平掉
      {
        closebuy();
      }
     if(xiao0>da0 && xiao1<da1)//金叉,把空单全部平掉
      {
        closesell();
      }
     if(buyprofit()>总获利大于几美金全部平仓)
      {
       closebuy();
      }
     if(sellprofit()>总获利大于几美金全部平仓)
      {
       closesell();
      }
  }
  void buyxiugaitp(double tp)
  {
     for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
              {
                if(NormalizeDouble(OrderTakeProfit(),Digits)!=NormalizeDouble(tp,Digits))
                 {
                   OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp,0,Green);
                 }
              }
          }
      }
  }
void sellxiugaitp(double tp)
  {
     for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
              {
                if(NormalizeDouble(OrderTakeProfit(),Digits)!=NormalizeDouble(tp,Digits))
                 {
                   OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp,0,Green);
                 }
              }
          }
      }
  }
double avgbuyprice()
  {
    double a=0;
    int shuliang=0;
    double pricehe=0;
    for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
              {
               pricehe=pricehe+OrderOpenPrice();
               shuliang++;
              }
          }
      }
    if(shuliang>0)
     {
      a=pricehe/shuliang;
     }
    return(a);
  }
double avgsellprice()
  {
    double a=0;
    int shuliang=0;
    double pricehe=0;
    for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
              {
               pricehe=pricehe+OrderOpenPrice();
               shuliang++;
              }
          }
      }
    if(shuliang>0)
     {
      a=pricehe/shuliang;
     }
    return(a);
  }
回复 支持 反对

使用道具 举报

发表于 2018-6-30 09:32:39 | 显示全部楼层
  1. #property copyright "Copyright 2014, MetaQuotes Software Corp."
  2. #property link      "http://www.mql5.com"
  3. #property version   "1.00"
  4. #property strict
  5. extern double 初始下单量=0.1;
  6. extern int 盈利加仓间隔点数=100;
  7. extern double 盈利加仓下倍数=2;
  8. extern int 盈利加仓次=5;
  9. extern int 大周期均线=20;
  10. extern int 小周期均线=10;
  11. extern double 总获利大于几美金全部平仓=100;
  12. extern int magic=1213;
  13. datetime buytime=0;
  14. datetime selltime=0;
  15. int OnInit()
  16.   {

  17.    return(INIT_SUCCEEDED);
  18.   }
  19. void OnDeinit(const int reason)
  20.   {
  21.    
  22.   }
  23. void OnTick()
  24.   {
  25.      double da0=iMA(NULL,0,大周期均线,0,MODE_SMA,PRICE_CLOSE,0);
  26.      double da1=iMA(NULL,0,大周期均线,0,MODE_SMA,PRICE_CLOSE,1);
  27.      double da2=iMA(NULL,0,大周期均线,0,MODE_SMA,PRICE_CLOSE,2);
  28.      double xiao0=iMA(NULL,0,小周期均线,0,MODE_SMA,PRICE_CLOSE,0);
  29.      double xiao1=iMA(NULL,0,小周期均线,0,MODE_SMA,PRICE_CLOSE,1);
  30.      double xiao2=iMA(NULL,0,小周期均线,0,MODE_SMA,PRICE_CLOSE,2);
  31.      double buyop,buylots;
  32.      int buydanshu=buydanshu(buyop,buylots);
  33.      if(buydanshu==0)
  34.       {
  35.         if(xiao0>da0 && xiao1<da1)
  36.           {
  37.            if(buytime!=Time[0])
  38.             {
  39.               if(buy(初始下单量,0,0,Symbol()+"buy",magic)>0)
  40.                {
  41.                  buytime=Time[0];
  42.                }
  43.             }
  44.           }
  45.       }
  46.      else
  47.       {
  48.         if(buydanshu>=2)
  49.          {
  50.            buyxiugaisl(buy2price());
  51.          }
  52.         if(xiao0>da0 && buydanshu<盈利加仓次 && (Ask-buyop)>=盈利加仓间隔点数*Point)
  53.          {
  54.            buy(flots(buylots*盈利加仓下倍数),0,0,Symbol()+"buy"+buydanshu,magic);
  55.          }
  56.       }
  57.      double sellop,selllots;
  58.      int selldanshu=selldanshu(sellop,selllots);
  59.      if(selldanshu==0)
  60.       {
  61.         if(xiao0<da0 && xiao1>da1)
  62.           {
  63.             if(selltime!=Time[0])
  64.             {
  65.               if(sell(初始下单量,0,0,Symbol()+"sell",magic)>0)
  66.                 {
  67.                   selltime=Time[0];
  68.                 }
  69.             }
  70.           }
  71.       }
  72.      else
  73.       {
  74.         if(selldanshu>=2)
  75.          {
  76.            sellxiugaisl(sell2price());
  77.          }
  78.         if(xiao0<da0 && selldanshu<盈利加仓次 && (sellop-Bid)>=盈利加仓间隔点数*Point)
  79.          {
  80.            sell(flots(selllots*盈利加仓下倍数),0,0,Symbol()+"sell"+selldanshu,magic);
  81.          }
  82.       }
  83.      if(xiao0<da0 && xiao1>da1)//死叉,把多单全部平掉
  84.       {
  85.         closebuy();
  86.       }
  87.      if(xiao0>da0 && xiao1<da1)//金叉,把空单全部平掉
  88.       {
  89.         closesell();
  90.       }
  91.      if(buyprofit()>总获利大于几美金全部平仓)
  92.       {
  93.        closebuy();
  94.       }
  95.      if(sellprofit()>总获利大于几美金全部平仓)
  96.       {
  97.        closesell();
  98.       }
  99.   }
  100. double buyprofit()
  101.   {
  102.      double a=0;
  103.      int t=OrdersTotal();
  104.      for(int i=t-1;i>=0;i--)
  105.          {
  106.            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  107.              {
  108.                if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  109.                  {
  110.                    a=a+OrderProfit()+OrderCommission()+OrderSwap();
  111.                  }
  112.              }
  113.          }  
  114.     return(a);
  115.   }
  116. double sellprofit()
  117.   {
  118.      double a=0;
  119.      int t=OrdersTotal();
  120.      for(int i=t-1;i>=0;i--)
  121.          {
  122.            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  123.              {
  124.                if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
  125.                  {
  126.                    a=a+OrderProfit()+OrderCommission()+OrderSwap();
  127.                  }
  128.              }
  129.          }  
  130.     return(a);
  131.   }
  132. void closebuy()
  133.   {
  134.     double buyop,buylots;
  135.     while(buydanshu(buyop,buylots)>0)
  136.      {
  137.         int t=OrdersTotal();
  138.         for(int i=t-1;i>=0;i--)
  139.          {
  140.            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  141.              {
  142.                if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  143.                  {
  144.                    OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);
  145.                  }
  146.              }
  147.          }
  148.         Sleep(800);
  149.      }
  150.   }
  151. void closesell()
  152.   {
  153.     double sellop,selllots;
  154.     while(selldanshu(sellop,selllots)>0)
  155.      {
  156.         int t=OrdersTotal();
  157.         for(int i=t-1;i>=0;i--)
  158.          {
  159.            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  160.              {
  161.                if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
  162.                  {
  163.                    OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),300,Green);
  164.                  }
  165.              }
  166.          }
  167.         Sleep(800);
  168.      }
  169.   }
  170. double buy2price()
  171.   {
  172.      double a;
  173.      int jishu=0;
  174.      for(int i=0;i<OrdersTotal();i++)
  175.       {
  176.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  177.           {
  178.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  179.               {
  180.                jishu++;
  181.                if(jishu==2)
  182.                 {
  183.                   a=OrderOpenPrice();
  184.                   break;
  185.                 }
  186.               }
  187.           }
  188.       }
  189.     return(a);
  190.   }
  191. double sell2price()
  192.   {
  193.      double a;
  194.      int jishu=0;
  195.      for(int i=0;i<OrdersTotal();i++)
  196.       {
  197.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  198.           {
  199.             if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
  200.               {
  201.                jishu++;
  202.                if(jishu==2)
  203.                 {
  204.                   a=OrderOpenPrice();
  205.                   break;
  206.                 }
  207.               }
  208.           }
  209.       }
  210.     return(a);
  211.   }
  212. void buyxiugaisl(double sl)
  213.   {
  214.      for(int i=0;i<OrdersTotal();i++)
  215.       {
  216.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  217.           {
  218.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  219.               {
  220.                 if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits))
  221.                  {
  222.                    OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green);
  223.                  }
  224.               }
  225.           }
  226.       }
  227.   }
  228. void sellxiugaisl(double sl)
  229.   {
  230.      for(int i=0;i<OrdersTotal();i++)
  231.       {
  232.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  233.           {
  234.             if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
  235.               {
  236.                 if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(sl,Digits))
  237.                  {
  238.                    OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Green);
  239.                  }
  240.               }
  241.           }
  242.       }
  243.   }
  244. double avgbuyprice()
  245.   {
  246.     double a=0;
  247.     int shuliang=0;
  248.     double pricehe=0;
  249.     for(int i=0;i<OrdersTotal();i++)
  250.       {
  251.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  252.           {
  253.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  254.               {
  255.                pricehe=pricehe+OrderOpenPrice();
  256.                shuliang++;
  257.               }
  258.           }
  259.       }
  260.     if(shuliang>0)
  261.      {
  262.       a=pricehe/shuliang;
  263.      }
  264.     return(a);
  265.   }
  266. double avgsellprice()
  267.   {
  268.     double a=0;
  269.     int shuliang=0;
  270.     double pricehe=0;
  271.     for(int i=0;i<OrdersTotal();i++)
  272.       {
  273.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  274.           {
  275.             if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
  276.               {
  277.                pricehe=pricehe+OrderOpenPrice();
  278.                shuliang++;
  279.               }
  280.           }
  281.       }
  282.     if(shuliang>0)
  283.      {
  284.       a=pricehe/shuliang;
  285.      }
  286.     return(a);
  287.   }
  288. double flots(double dlots)
  289.   {
  290.     double fb=NormalizeDouble(dlots/MarketInfo(Symbol(),MODE_MINLOT),0);
  291.     return(MarketInfo(Symbol(),MODE_MINLOT)*fb);
  292.   }
  293. int buydanshu(double &op,double &lots)
  294.   {
  295.      int a=0;
  296.      op=0;
  297.      lots=0;
  298.      for(int i=0;i<OrdersTotal();i++)
  299.       {
  300.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  301.           {
  302.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
  303.               {
  304.                 a++;
  305.                 op=OrderOpenPrice();
  306.                 lots=OrderLots();
  307.               }
  308.           }
  309.       }
  310.     return(a);
  311.   }
  312. int selldanshu(double &op,double &lots)
  313.   {
  314.      int a=0;
  315.      op=0;
  316.      lots=0;
  317.      for(int i=0;i<OrdersTotal();i++)
  318.       {
  319.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  320.           {
  321.             if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
  322.               {
  323.                 a++;
  324.                 op=OrderOpenPrice();
  325.                 lots=OrderLots();
  326.               }
  327.           }
  328.       }
  329.     return(a);
  330.   }
  331. int buy(double lots,double sl,double tp,string com,int buymagic)
  332.   {
  333.     int a=0;
  334.     bool zhaodan=false;
  335.      for(int i=0;i<OrdersTotal();i++)
  336.       {
  337.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  338.           {
  339.             string zhushi=OrderComment();
  340.             int ma=OrderMagicNumber();
  341.             if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && zhushi==com && ma==buymagic)
  342.               {
  343.                 zhaodan=true;
  344.                 break;
  345.               }
  346.           }
  347.       }
  348.     if(zhaodan==false)
  349.       {
  350.         if(sl!=0 && tp==0)
  351.          {
  352.           a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-sl*Point,0,com,buymagic,0,White);
  353.          }
  354.         if(sl==0 && tp!=0)
  355.          {
  356.           a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,Ask+tp*Point,com,buymagic,0,White);
  357.          }
  358.         if(sl==0 && tp==0)
  359.          {
  360.           a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,0,0,com,buymagic,0,White);
  361.          }
  362.         if(sl!=0 && tp!=0)
  363.          {
  364.           a=OrderSend(Symbol(),OP_BUY,lots,Ask,50,Ask-sl*Point,Ask+tp*Point,com,buymagic,0,White);
  365.          }
  366.       }
  367.     return(a);
  368.   }
  369. int sell(double lots,double sl,double tp,string com,int sellmagic)
  370.   {
  371.     int a=0;
  372.     bool zhaodan=false;
  373.      for(int i=0;i<OrdersTotal();i++)
  374.       {
  375.         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  376.           {
  377.             string zhushi=OrderComment();
  378.             int ma=OrderMagicNumber();
  379.             if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && zhushi==com && ma==sellmagic)
  380.               {
  381.                 zhaodan=true;
  382.                 break;
  383.               }
  384.           }
  385.       }
  386.     if(zhaodan==false)
  387.       {
  388.         if(sl==0 && tp!=0)
  389.          {
  390.            a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,Bid-tp*Point,com,sellmagic,0,Red);
  391.          }
  392.         if(sl!=0 && tp==0)
  393.          {
  394.            a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+sl*Point,0,com,sellmagic,0,Red);
  395.          }
  396.         if(sl==0 && tp==0)
  397.          {
  398.            a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,0,0,com,sellmagic,0,Red);
  399.          }
  400.         if(sl!=0 && tp!=0)
  401.          {
  402.            a=OrderSend(Symbol(),OP_SELL,lots,Bid,50,Bid+sl*Point,Bid-tp*Point,com,sellmagic,0,Red);
  403.          }
  404.       }
  405.     return(a);
  406.   }
复制代码

19EA顺势加仓.mq4 (21.61 KB, 下载次数: 183)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-30 09:34:20 | 显示全部楼层

谢谢老师o(^o^)o
回复 支持 反对

使用道具 举报

发表于 2019-2-19 15:25:29 | 显示全部楼层
无私的老师。
回复 支持 反对

使用道具 举报

发表于 2019-2-26 16:44:22 | 显示全部楼层
谢谢老师的指导
回复 支持 反对

使用道具 举报

发表于 2019-7-29 14:51:06 | 显示全部楼层
老师真牛佩服佩服
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|sitemap|智能交易网,程序化交易,自动交易,量化交易 ( 苏ICP备08108698号,苏州智德金网络科技股份有限公司版权所有 )

GMT+8, 2019-9-21 09:28 , Processed in 0.064039 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表