2015年1月8日 星期四

MT4 自動交易 掃除所有倉位 Script

掃除目前所有倉位, 提供大家學習, 若有更好的方法及想法也歡迎批評指教
//+------------------------------------------------------------------+
//|                                                sweeper_order.mq4 |
//|                                                             Hugo |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Hugo"
#property link      "http://hugo-mt4.blogspot.tw/"
#property version   "1.00"


int slippage = 0; //設定滑價價格
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+


void OnStart(){
    
    // 當倉位不為0時反覆的做清倉
    while(OrdersTotal()!=0){
                    
       for(int i=0;i < OrdersTotal();i++){
                
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ // 選中的訂單
            
            int ticket=OrderTicket(); // 獲選中的訂單編號
            string symbol=OrderSymbol();  //獲選中的貨幣稅
            double lots=OrderLots(); //獲選中的手數
            bool status = false;  // 是否平倉或刪單成功
            
            // 賣掉 BUY 單
            if(OrderType()==OP_BUY){
               status = OrderClose(ticket,lots,MarketInfo(symbol,MODE_BID),slippage,CLR_NONE);
            }
            
            // 買回 SELL 單
            if(OrderType()==OP_SELL){   
               status = OrderClose(ticket,lots,MarketInfo(symbol,MODE_ASK),slippage,CLR_NONE);
            }
 
            // 刪除預掛單
            if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP ||
               OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP){
               status = OrderDelete(ticket);
            }
            
            // 檢查失敗原因,若為 4109 則停止 script
            if(!status){
               int code = GetLastError();
               
               Print("*******************");
               Print("error code ", code);

               if (code==4109){   // 自動交易未打開
                  Print("EA not enable");
                  return 0;
               }               
            }
         }            
       }             
    }
    return;   
}
//+------------------------------------------------------------------+