R-Breaker策略交易代码,适用MT4,MT5平台

根据R-Breaker原理琢磨出来的代码,实测效果不太理想,收益率偏小。有需求的小伙伴可以拷贝优化。

void OpenOrder(){
      double a =0.2 ;
      double b =0.5 ;
      double c= 0.04;
      double d= 0.3;
      double Highs = High[iHighest(NULL,PERIOD_D1,MODE_HIGH,0,0)];//获取当天的最高价
      double Lows = Low[iHighest(NULL,PERIOD_D1,MODE_LOW,0,0)];//获取当天的最低价
      double Closes = Low[iHighest(NULL,PERIOD_D1,MODE_CLOSE,0,0)]; //前一级别的收盘价
      double SellSetup = Highs + a*(Closes - Lows);//观察卖出价
      double BuySetup = Lows - a*(Highs - Closes);//观察买入价
      double SellEnter = b*(Highs+Lows)+c*(Highs-Lows);//反转卖出价
      double BuyEnter = b*(Highs+Lows)+c*(Highs-Lows);//反转买入价
      double SellBreak = BuySetup - d * (SellSetup - BuySetup);//突破卖出价*/
      double BuyBreak = SellSetup + d * (SellSetup - BuySetup);//突破买入价
       
      Print("突破买入价:"+BuyBreak);
      Print("突破卖出价:"+SellBreak);
      //统计订单
      int buys=0,sells=0,signal=0;
      bool result;
      
      for(i=0; i<=OrdersTotal()-1; i++)
      {
         result=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
            if(OrderType()==OP_BUY)
            {
               buys++;
           }
            if(OrderType()==OP_SELL)
            {
               sells++; 
            }
         }
      }
      
      int position_long = buys;
      int position_short = sells; 
     
      double THigh = High[iHighest(NULL,PERIOD_D1,MODE_HIGH,0,0)];//获取当天的最高价
      double TLow = Low[iHighest(NULL,PERIOD_D1,MODE_LOW,0,0)];//获取当天的最低价
      
      //突破策略
      if(position_long == 0 && position_short ==0){
         //在空仓的情况下,如果盘中价格超过突破买入价,则采取趋势策略,即在该点位开仓做多
         if(Close[0] > BuyBreak){
            o_rs = OrderSend(Symbol(),OP_BUY,lots,Ask,3,0,0,"RBreaker",Magic,0,clrGreen);
            Print("空仓,盘中价格超过突破买入价: 开仓做多");
            if(o_rs == false)Print("盘中价格超过突破买入价,开仓失败,错误:"+DoubleToString(GetLastError()));
           
         //在空仓的情况下,如果盘中价格跌破突破卖出价,则采取趋势策略,即在该点位开仓做空
         }else if(Close[0] < SellBreak){
            o_rs = OrderSend(Symbol(),OP_SELL,lots,Bid,3,0,0,"RBreaker",Magic,0,clrRed);
            Print("空仓,盘中价格跌破突破卖出价: 开仓做空");
         }
      //设置止损条件
      }else{
         //有持仓时,反转策略:
         //多仓条件下
         if(position_long && OrdersTotal()<2){
      
         if(THigh > SellSetup && Close[0]<SellEnter){
            /*多头持仓,当日内最高价超过观察卖出价后,
              盘中价格出现回落,且进一步跌破反转卖出价构成的支撑线时,
              采取反转策略,即在该点位反手做空*/
             CloseOrder(1);
            o_rs = OrderSend(Symbol(),OP_SELL,lots,Bid,3,0,0,"RBreaker",Magic,0,clrRed);
            Print("空多头持仓,当日内最高价超过观察卖出价后跌破反转卖出价: 反手做空");
            if(o_rs == false)Print("盘中价格超过破卖出价,开仓失败,错误:"+DoubleToString(GetLastError()));

         }
       }else if(position_short && OrdersTotal()<2){
         if(TLow <BuySetup && Close[0]>BuyEnter){
            /* 空头持仓,当日内最低价低于观察买入价后,
               盘中价格出现反弹,且进一步超过反转买入价构成的阻力线时,
               采取反转策略,即在该点位反手做多
            */
             CloseOrder(0);
            o_rs = OrderSend(Symbol(),OP_BUY,lots,Ask,3,0,0,"RBreaker",Magic,0,clrGreen);
            Print("空头持仓,当日最低价低于观察买入价后超过反转买入价: 反手做多");
            if(o_rs == false)Print("当日最低价低于观察买入价后超过反转买入价,反手做多开仓失败,错误:"+DoubleToString(GetLastError()));
           }
         }
      }
      if(Hour()==23 && Minute()==54){
         CloseOrder(0);
         CloseOrder(1);
      }   
}
void CloseOrder(int type){
   for(i=0; i<=OrdersTotal()-1; i++)
   {
      o_rs=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderType() == OP_BUY && type==1){
         orderclosebuy(i,OrderLots());
      }else{
         orderclosebuy(i,OrderLots());
      }
   }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值