📅 财经日历 📊 实时波动 📈 大盘云图 📶 行情走势 🆚 投机情绪 🚀 今日热点

    售价5金币的FXCHAGE,下载后却是一个最简单的单均线策略

    2019-05-27 · 2567 阅读
    extern double MAPeriod=20; //指数均线周期
    extern double StopLossSpred = 20; //初始止损离均线的点数
    extern double CloseSpred = 15; //后半仓止损离均线的点数
    extern double Lots=0.2; //持仓,必须为偶数


    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int start()
      {
       double MacdCurrent, MacdPrevious, Ma;
       int cnt, ticket, total;

       if(Bars<100)
         {
          Print("K线少于100根!");
          return(0);  
         }

       MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
       MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
       Ma=iMA(NULL,0,MAPeriod,0,MODE_EMA,PRICE_CLOSE,0);

       total=OrdersTotal();

       //开单检查
       if(total<1) //在没有持仓的情况下才能开新仓
         {
          // 检查资金
          if(AccountFreeMargin()<(1000*Lots))
            {
             Print("资金不足: ", AccountFreeMargin());
             return(0);  
            }
          // 检查开多单的可能性
          if(MacdCurrent>0 && MacdPrevious<0 && Ask>Ma && Ask<=Ma+20*Point)  //MACD首红且汇价位于均线上20点内做多
            {
             ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ma-StopLossSpred*Point,0,"lbs-buy",197658,0,Red);
             if(ticket>0)
               {
                if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("开多单成功 : ",OrderOpenPrice());
               }
             else Print("开多单发生错误 : ",GetLastError());
             return(0);
            }
          // 检查开空单的可能性
          if(MacdCurrent<0 && MacdPrevious>0 && Bid<Ma && Bid>=Ma-20*Point) //MACD首绿且汇价位于均线下20点内做空
            {
             ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ma+StopLossSpred*Point,0,"lbs-sell",197658,0,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<total;cnt++)
         {
          OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
          if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())  // check for symbol
            {
             if(OrderType()==OP_BUY)   // 如果有做多单存在
               {
                //多单减仓检查
                if(Ask-OrderOpenPrice()>=OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() &&
    OrderLots()==Lots)
                  {
                    ticket=OrderClose(OrderTicket(),Lots/2,Ask,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()<=OrderStopLoss() && OrderLots()==Lots/2)
                  {
                    ticket=OrderModify(OrderTicket(),OrderOpenPrice(),Ma-CloseSpred*Point,OrderTakeProfit(),0,Red);
                    if(ticket>0)
                      {
                        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    Print("多单止损修改成功 : ",OrderOpenPrice());
                      }
                    else Print("多单止损修改发生错误 : ",GetLastError());
                    return(0);
                  }  
              }
             else // 如果有做空单存在
               {
                //空单减仓检查
                if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()<OrderStopLoss() &&
    OrderLots()==Lots)
                  {
                    ticket=OrderClose(OrderTicket(),Lots/2,Ask,3,Violet); // 平掉一半仓位
                    if(ticket>0)
                      {
                        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空单减仓成功 : ",OrderOpenPrice());
                      }
                    else Print("空单减仓发生错误 : ",GetLastError());
                    return(0);
                  }

                //修改后半仓位的止损价到盈亏平衡点
                if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()<OrderStopLoss() &&
    OrderLots()==Lots/2)
                  {
                    ticket=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
                    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()>=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.

    111.png
    回复

    举报

     

    回答|共 3 个

    鬼灵骑士 LV0

    发表于 2019-6-16 18:04:01 | 显示全部楼层

    呵呵呵不错单

    Jacquelinekxl LV3

    发表于 2019-10-24 11:34:54 | 显示全部楼层

    这么简单的一个功能写了那么多废话代码呵呵

    大小伙 LV2

    发表于 2024-2-16 08:33:40 | 显示全部楼层

    感谢分享,11
    您需要登录后才可以回帖 登录 | 注册

    提醒: 禁止引战、谩骂、灌水内容

    微信二维码

    有问题联系客服