比特币通信协议 - 币圈消息

比特币通信协议篇11、二、TURN简介。在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到 详细

求各位懂编程的朋友帮修改下这个EA,实战中不会移动止损

  [复制链接]
179 4
68393464 发表于 2017-5-4 22:57:09 | 只看该作者 |阅读模式 打印 上一主题 下一主题
如题,我把原5分钟动量系统做了些修改。做EA测试的时候是没有问题的(如下图),但这两天实战发现EA只会平半仓,另外半仓不会移动到盈亏平衡点或移动止损,求各位朋友 帮帮修改下。
    EA测试结果
EA源代码
[C++] 纯文本查看 复制代码//+------------------------------------------------------------------+
//|                                          1234567890.mq4 |
//+------------------------------------------------------------------+
extern int    _MagicNumber = 1123;
extern double MAPeriod=20; //指数均线周期
extern double StopLossSpred = 100; //初始止损离均线的点数
extern double CloseSpred = 150; //后半仓止损离均线的点数
extern double Lots=0.2; //持仓,必须为偶数
extern bool 是否开启多单交易=true;
extern bool 是否开启空单交易=true;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, Ma;
   int cnt, ticket, total;
   if(Bars0)
       {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
             if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
               {
                  if(OrderSymbol()==Symbol() && OrderMagicNumber()==_MagicNumber)
                    {
                      total++;
                    }
               }
           }
       }
   //开单检查
   if(total0 && MacdPreviousMa && Ask0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("开多单成功 : ",OrderOpenPrice());
           }
         else Print("开多单发生错误 : ",GetLastError());
         return(0);
        }
      // 检查开空单的可能性
      if(MacdCurrent0 && Bid=Ma-200*Point && 是否开启空单交易==true) //MACD首绿且汇价位于均线下20点内做空
        {
         ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Ma-100*Point,3,Ma+StopLossSpred*Point,0,"lbs-sell", _MagicNumber,TimeCurrent()+Period()*1440,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("开空单成功 : ",OrderOpenPrice());
           }
         else Print("开空单发生错误 : ",GetLastError());
         return(0);
        }
      return(0);
     }
     
   //减仓及平仓检查   
   for(cnt=0;cnt=OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() && OrderLots()==Lots)
              {
                ticket=OrderClose(OrderTicket(),Lots/2,Bid,3,Violet); // 平掉一半仓位
                if(ticket>0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多单减仓成功 : ",OrderOpenPrice());
                  }
                else Print("多单减仓发生错误 : ",GetLastError());
                return(0);
              }
            
            //修改后半仓位的止损价到盈亏平衡点
            if(Ask-OrderOpenPrice()>OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() && OrderLots()==Lots/2)
              {
                ticket=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
                if(ticket>0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多单盈亏平衡点修改成功 : ",OrderOpenPrice());
                  }
                else Print("多单盈亏平衡点修改发生错误 : ",GetLastError());
                return(0);
              }
            
            //根据行情发展修改剩余仓位的止损价到均线下15点
            if(Ma-CloseSpred*Point>OrderStopLoss() && OrderOpenPrice()0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多单止损修改成功 : ",OrderOpenPrice());
                  }
                else Print("多单止损修改发生错误 : ",GetLastError());
                return(0);
              }  
          }
         else // 如果有做空单存在
           {
            //空单减仓检查
            if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单减仓成功 : ",OrderOpenPrice());
                  }
                else Print("空单减仓发生错误 : ",GetLastError());
                return(0);
              }
            
            //修改后半仓位的止损价到盈亏平衡点
            if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单盈亏平衡点修改成功 : ",OrderOpenPrice());
                  }
                else Print("空单盈亏平衡点修改发生错误 : ",GetLastError());
                return(0);
              }
            
            //根据行情发展修改剩余仓位的止损价到均线下15点
            if(Ma+CloseSpred*Point=OrderStopLoss() && OrderLots()==Lots/2)
              {
                ticket=OrderModify(OrderTicket(),OrderOpenPrice(),Ma+CloseSpred*Point,OrderTakeProfit(),0,Green);
                if(ticket>0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单止损修改成功 : ",OrderOpenPrice());
                  }
                else Print("空单止损修改发生错误 : ",GetLastError());
                return(0);
              }
           }
        }
     }
   return(0);
  }
// the end.
附上EA
收藏
收藏0
转播
转播
分享
分享
分享
淘帖0

精彩评论4

跳转到指定楼层
沙发
 楼主| 68393464 发表于 2017-5-6 22:59:08 | 只看该作者
修改前的EA。因资金只有1000,10个货币兑只开一张单,所以做了些修改
[C++] 纯文本查看 复制代码//+------------------------------------------------------------------+
//|                                           五分钟动量交易系统.mq4 |
//+------------------------------------------------------------------+
extern int    _MagicNumber = 1123;
extern double MAPeriod=20; //指数均线周期
extern double StopLossSpred = 100; //初始止损离均线的点数
extern double CloseSpred = 150; //后半仓止损离均线的点数
extern double Lots=0.2; //持仓,必须为偶数
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, Ma;
   int cnt, ticket, total;
   if(Bars0 && MacdPreviousMa && Ask0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("开多单成功 : ",OrderOpenPrice());
           }
         else Print("开多单发生错误 : ",GetLastError());
         return(0);
        }
      // 检查开空单的可能性
      if(MacdCurrent0 && Bid=Ma-200*Point) //MACD首绿且汇价位于均线下20点内做空
        {
         ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Ma-100*Point,3,Ma+StopLossSpred*Point,0,"lbs-sell", _MagicNumber,TimeCurrent()+Period()*1440,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("开空单成功 : ",OrderOpenPrice());
           }
         else Print("开空单发生错误 : ",GetLastError());
         return(0);
        }
      return(0);
     }
     
   //减仓及平仓检查   
   for(cnt=0;cnt=OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() && OrderLots()==Lots)
              {
                ticket=OrderClose(OrderTicket(),Lots/2,Bid,3,Violet); // 平掉一半仓位
                if(ticket>0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多单减仓成功 : ",OrderOpenPrice());
                  }
                else Print("多单减仓发生错误 : ",GetLastError());
                return(0);
              }
            
            //修改后半仓位的止损价到盈亏平衡点
            if(Ask-OrderOpenPrice()>OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() && OrderLots()==Lots/2)
              {
                ticket=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
                if(ticket>0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多单盈亏平衡点修改成功 : ",OrderOpenPrice());
                  }
                else Print("多单盈亏平衡点修改发生错误 : ",GetLastError());
                return(0);
              }
            
            //根据行情发展修改剩余仓位的止损价到均线下15点
            if(Ma-CloseSpred*Point>OrderStopLoss() && OrderOpenPrice()0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多单止损修改成功 : ",OrderOpenPrice());
                  }
                else Print("多单止损修改发生错误 : ",GetLastError());
                return(0);
              }  
          }
         else // 如果有做空单存在
           {
            //空单减仓检查
            if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单减仓成功 : ",OrderOpenPrice());
                  }
                else Print("空单减仓发生错误 : ",GetLastError());
                return(0);
              }
            
            //修改后半仓位的止损价到盈亏平衡点
            if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单盈亏平衡点修改成功 : ",OrderOpenPrice());
                  }
                else Print("空单盈亏平衡点修改发生错误 : ",GetLastError());
                return(0);
              }
            
            //根据行情发展修改剩余仓位的止损价到均线下15点
            if(Ma+CloseSpred*Point=OrderStopLoss() && OrderLots()==Lots/2)
              {
                ticket=OrderModify(OrderTicket(),OrderOpenPrice(),Ma+CloseSpred*Point,OrderTakeProfit(),0,Green);
                if(ticket>0)
                  {
                    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单止损修改成功 : ",OrderOpenPrice());
                  }
                else Print("空单止损修改发生错误 : ",GetLastError());
                return(0);
              }
           }
        }
     }
   return(0);
  }
// the end.
板凳
xuexi001 发表于 2017-5-8 23:00:52 | 只看该作者
加我Q603586080
地板
zcb9009 发表于 2017-5-8 23:02:57 | 只看该作者
过来看看。
5#
zcb9009 发表于 2017-5-9 00:06:33 | 只看该作者
过来看看。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by 顺水鱼MT4外汇EA网! X3.2© 2001-2017 顺水MT4外汇EA公司.( 陕ICP备17014341号-1