电竞比分网-中国电竞赛事及体育赛事平台

分享

五分鐘動量交易系統(tǒng)(EA,不是指標)

 王道591 2017-02-20
小弟根據《五分鐘動量交易系統(tǒng)》編的,請大家多多指教!
  1. //+------------------------------------------------------------------+
  2. //|                                           五分鐘動量交易系統(tǒng).mq4 |
  3. //+------------------------------------------------------------------+

  4. extern double MAPeriod=20; //指數(shù)均線周期
  5. extern double StopLossSpred = 20; //初始止損離均線的點數(shù)
  6. extern double CloseSpred = 15; //后半倉止損離均線的點數(shù)
  7. extern double Lots=0.2; //持倉,必須為偶數(shù)


  8. //+------------------------------------------------------------------+
  9. //|                                                                  |
  10. //+------------------------------------------------------------------+
  11. int start()
  12.   {
  13.    double MacdCurrent, MacdPrevious, Ma;
  14.    int cnt, ticket, total;

  15.    if(Bars<100)
  16.      {
  17.       Print("K線少于100根!");
  18.       return(0);  
  19.      }

  20.    MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
  21.    MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
  22.    Ma=iMA(NULL,0,MAPeriod,0,MODE_EMA,PRICE_CLOSE,0);
  23.    
  24.    total=OrdersTotal();
  25.    
  26.    //開單檢查
  27.    if(total<1) //在沒有持倉的情況下才能開新倉
  28.      {
  29.       // 檢查資金
  30.       if(AccountFreeMargin()<(1000*Lots))
  31.         {
  32.          Print("資金不足: ", AccountFreeMargin());
  33.          return(0);  
  34.         }
  35.       // 檢查開多單的可能性
  36.       if(MacdCurrent>0 && MacdPrevious<0 && Ask>Ma && Ask<=Ma+20*Point)  //MACD首紅且匯價位于均線上20點內做多
  37.         {
  38.          ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ma-StopLossSpred*Point,0,"lbs-buy",197658,0,Red);
  39.          if(ticket>0)
  40.            {
  41.             if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("開多單成功 : ",OrderOpenPrice());
  42.            }
  43.          else Print("開多單發(fā)生錯誤 : ",GetLastError());
  44.          return(0);
  45.         }
  46.       // 檢查開空單的可能性
  47.       if(MacdCurrent<0 && MacdPrevious>0 && Bid<Ma && Bid>=Ma-20*Point) //MACD首綠且匯價位于均線下20點內做空
  48.         {
  49.          ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ma+StopLossSpred*Point,0,"lbs-sell",197658,0,Green);
  50.          if(ticket>0)
  51.            {
  52.             if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("開空單成功 : ",OrderOpenPrice());
  53.            }
  54.          else Print("開空單發(fā)生錯誤 : ",GetLastError());
  55.          return(0);
  56.         }
  57.       return(0);
  58.      }
  59.      
  60.    //減倉及平倉檢查   
  61.    for(cnt=0;cnt<total;cnt++)
  62.      {
  63.       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  64.       if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())  // check for symbol
  65.         {
  66.          if(OrderType()==OP_BUY)   // 如果有做多單存在
  67.            {
  68.             //多單減倉檢查
  69.             if(Ask-OrderOpenPrice()>=OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() && OrderLots()==Lots)
  70.               {
  71.                 ticket=OrderClose(OrderTicket(),Lots/2,Ask,3,Violet); // 平掉一半倉位
  72.                 if(ticket>0)
  73.                   {
  74.                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多單減倉成功 : ",OrderOpenPrice());
  75.                   }
  76.                 else Print("多單減倉發(fā)生錯誤 : ",GetLastError());
  77.                 return(0);
  78.               }
  79.             
  80.             //修改后半倉位的止損價到盈虧平衡點
  81.             if(Ask-OrderOpenPrice()>OrderOpenPrice()-OrderStopLoss() && OrderOpenPrice()>OrderStopLoss() && OrderLots()==Lots/2)
  82.               {
  83.                 ticket=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
  84.                 if(ticket>0)
  85.                   {
  86.                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多單盈虧平衡點修改成功 : ",OrderOpenPrice());
  87.                   }
  88.                 else Print("多單盈虧平衡點修改發(fā)生錯誤 : ",GetLastError());
  89.                 return(0);
  90.               }
  91.             
  92.             //根據行情發(fā)展修改剩余倉位的止損價到均線下15點
  93.             if(Ma-CloseSpred*Point>OrderStopLoss() && OrderOpenPrice()<=OrderStopLoss() && OrderLots()==Lots/2)
  94.               {
  95.                 ticket=OrderModify(OrderTicket(),OrderOpenPrice(),Ma-CloseSpred*Point,OrderTakeProfit(),0,Red);
  96.                 if(ticket>0)
  97.                   {
  98.                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("多單止損修改成功 : ",OrderOpenPrice());
  99.                   }
  100.                 else Print("多單止損修改發(fā)生錯誤 : ",GetLastError());
  101.                 return(0);
  102.               }  
  103.           }
  104.          else // 如果有做空單存在
  105.            {
  106.             //空單減倉檢查
  107.             if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()<OrderStopLoss() && OrderLots()==Lots)
  108.               {
  109.                 ticket=OrderClose(OrderTicket(),Lots/2,Ask,3,Violet); // 平掉一半倉位
  110.                 if(ticket>0)
  111.                   {
  112.                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空單減倉成功 : ",OrderOpenPrice());
  113.                   }
  114.                 else Print("空單減倉發(fā)生錯誤 : ",GetLastError());
  115.                 return(0);
  116.               }
  117.             
  118.             //修改后半倉位的止損價到盈虧平衡點
  119.             if(OrderOpenPrice()-Bid>OrderStopLoss()-OrderOpenPrice() && OrderOpenPrice()<OrderStopLoss() && OrderLots()==Lots/2)
  120.               {
  121.                 ticket=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
  122.                 if(ticket>0)
  123.                   {
  124.                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空單盈虧平衡點修改成功 : ",OrderOpenPrice());
  125.                   }
  126.                 else Print("空單盈虧平衡點修改發(fā)生錯誤 : ",GetLastError());
  127.                 return(0);
  128.               }
  129.             
  130.             //根據行情發(fā)展修改剩余倉位的止損價到均線下15點
  131.             if(Ma+CloseSpred*Point<OrderStopLoss() && OrderOpenPrice()>=OrderStopLoss() && OrderLots()==Lots/2)
  132.               {
  133.                 ticket=OrderModify(OrderTicket(),OrderOpenPrice(),Ma+CloseSpred*Point,OrderTakeProfit(),0,Green);
  134.                 if(ticket>0)
  135.                   {
  136.                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("空單止損修改成功 : ",OrderOpenPrice());
  137.                   }
  138.                 else Print("空單止損修改發(fā)生錯誤 : ",GetLastError());
  139.                 return(0);
  140.               }
  141.            }
  142.         }
  143.      }

  144.    return(0);
  145.   }
  146. // the end.
復制代碼

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多