19评论

1收藏

发一段能用的保本损代码,求10个金币

avatar 鸿运当归 | 4361 人阅读 | 19 人评论 | 2020-01-27

void BreakEven(string buyOrSell, double BreakEven)
    {
     bool succeed = false ;
     int  try
               = 0;
     RefreshRates();
     if(OrdersTotal() > 0)
         {
          if(BreakEven <= MarketInfo(Symbol(), MODE_STOPLEVEL) * Point)
              {
               Print("保本损设置小于StopLevel");
               return;
              }
          else
              {
               for(int i = OrdersTotal() - 1; i >= 0; i--) //顺序排列,最后开的单子最远,在0的位置,所以是从最早开的单子往最后的方向找
                   {
                    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
                        {
                         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICMA) //MAGIC时而统计时而不统计,高风险
                             {
                              if(buyOrSell == "buy")
                                  {
                                   if(OrderType() == OP_BUY)
                                       {
                                        if(NormalizeDouble((Bid - OrderOpenPrice()), Digits) >= NormalizeDouble(BreakEven/*2倍挂单间距*/ * Point, Digits))
                                            {
                                             if(OrderOpenPrice() - OrderStopLoss() > 0 || (OrderStopLoss() == 0))
                                                 {
                                                  if(NormalizeDouble(OrderStopLoss(), Digits) != NormalizeDouble(OrderOpenPrice(), Digits) + NormalizeDouble(MarketInfo(Symbol(), MODE_SPREAD), Digits) + NormalizeDouble(20 * Point, Digits))
                                                      {
                                                       //---价格从开盘价移动两个stoplevel=100点,则价格提高到开盘价+spread+20点=70点
                                                       succeed = OrderModify(OrderTicket(), NormalizeDouble(OrderOpenPrice(), Digits), NormalizeDouble(OrderOpenPrice(), Digits) + NormalizeDouble(MarketInfo(Symbol(), MODE_SPREAD), Digits) + NormalizeDouble(20 * Point, Digits), NormalizeDouble(OrderTakeProfit(), Digits), 0, Lime);
                                                       if(!succeed)
                                                           {
                                                            Print("多单保本损没有设置");
                                                            Sleep(200);
                                                            
                                                           }
                                                       else
                                                           {
                                                            Print("多单保本损设置成功");
                                                           }
                                                      }
                                                  RefreshRates();
                                                 }
                                            }
                                       }
                                  }
                              if(buyOrSell == "sell")
                                  {
                                   if(OrderType() == OP_SELL)
                                       {
                                        if(NormalizeDouble((OrderOpenPrice() - Ask), Digits) >= NormalizeDouble(BreakEven, Digits))
                                            {
                                             if((OrderOpenPrice() - OrderStopLoss() < 0) || (OrderStopLoss() == 0))
                                                 {
                                                  if(NormalizeDouble(OrderStopLoss(), Digits) != NormalizeDouble(OrderOpenPrice(), Digits) - NormalizeDouble(MarketInfo(Symbol(), MODE_SPREAD), Digits) - NormalizeDouble(20 * Point, Digits))
                                                      {
                                                       succeed = OrderModify(OrderTicket(), NormalizeDouble(OrderOpenPrice(), Digits), NormalizeDouble(OrderOpenPrice(), Digits) - NormalizeDouble(MarketInfo(Symbol(), MODE_SPREAD), Digits) - NormalizeDouble(20 * Point, Digits), NormalizeDouble(OrderTakeProfit(), Digits), 0, Lime);
                                                       if(!succeed)
                                                           {
                                                            Print("空单保本损没有设置");
                                                            Sleep(200);
                                                            
                                                           }
                                                       else
                                                           {
                                                            Print("空单保本损设置成功");
                                                           }
                                                      }
                                                  RefreshRates();
                                                 }
                                            }
                                       }
                                  }
                             }
                        }
                   }
              }
         }
    }

""
还没有人打赏,支持一下

评论|共 19 个

改变

发表于 2020-6-11 13:30:52 | 显示全部楼层

小手一抖,积分到手!

365

发表于 2020-6-21 19:53:01 | 显示全部楼层

相当不错,感谢无私分享精神!

ak47fx

发表于 2020-7-28 13:26:15 | 显示全部楼层

学习了,不错

ttofx

发表于 2020-11-18 20:42:38 | 显示全部楼层

支持下

yvtgd

发表于 2020-11-29 19:38:49 | 显示全部楼层

ivanlu

发表于 2020-12-3 16:37:24 | 显示全部楼层

支持下

好好好好哦

发表于 2020-12-12 12:30:01 | 显示全部楼层

ycjidnte

发表于 2020-12-16 12:19:43 | 显示全部楼层

mnl375

发表于 2020-12-23 14:49:37 | 显示全部楼层

12下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则