2赞

1评论

3收藏

[回测盈利EA] 海龟交易系统

avatar 何峻名 | 694 人阅读 | 1 人评论 | 2024-07-10

海龟交易系统源码直接奉上了。帮大家节约下载的B:
//+------------------------------------------------------------------+
//|                    Ninja Tutle - System2 - (fixed lots) Beta.mq4 |
//|                             Copyright ?2006, Mikhail Veneracion |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2006, Mikhail Veneracion"
#property link      ""
extern double
         Lots                 = 0.1;   // Assign Fixed Lot Size to be traded,AutoLotSize must be false
extern int
         MaxUnits             = 3,     //Maximum units to trade per Currency Pair
         MagicNumber          = 11282,
         EntryLookBack        = 55,    //Bars to lookback in calculating breakout prices
         ExitLookBack         = 20,    //Bars to lookback in calculating exit points
         ATRPeriod            = 20;
extern double         
         SLMultiple           = 2.5,   //Multiply ATR by this to calculate StopLoss
         ReEntryMultiple      = 0.5;   //Multiple ATR by this to calculate Re Entry Point
extern bool
         ATRBreakEven         = false;  //if set to true SL will be moved to break even level
extern double         
         BreakEvenMultiple    = 2.5;
extern bool
         LockProfit           = true;
extern double
         PipLockinStart       = 50,   //$ amount to start lock in
         LockinPercent        = 30;
//-------------------GLOBAL VARS
bool
         Revenge              = false;
double
         RevengeSL            = 3;              
static int
         TimeFrame;
double   LastEMAX,
         LastEMIN,
         LastXMAX,
         LastXMIN,
         LastOpen,
         PTLocked,
         PTPercent,
         spread,
         tickvalue,
         LastSL;
double
         EMAX,
         EMIN,
         trueEMAX,
         trueEMIN,
         XMAX,
         N,
         XMIN;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
         
int init()
  {
//----------------------- GENERATE MAGIC NUMBER AND TICKET COMMENT
//----------------------- SOURCE : PENGIE
   MagicNumber    = subGenerateMagicNumber(MagicNumber, Symbol(), Period());
   tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE);
   subPrintDetails();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----------------------- PREVENT RE-COUNTING WHILE USER CHANGING TIME FRAME
//----------------------- SOURCE : CODERSGURU
   TimeFrame=Period();
   return(0);
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//-----------------SET VARIABLE VALUES
   int Ehighest_bar=Highest(NULL, 0, MODE_HIGH, EntryLookBack, 1);
   EMAX=NormalizeDouble (iHigh(NULL, 0, Ehighest_bar),Digits);
   int Elowest_bar=Lowest(NULL, 0, MODE_LOW, EntryLookBack, 1);
   EMIN=NormalizeDouble (iLow(NULL, 0, Elowest_bar),Digits);
   int Xhighest_bar=Highest(NULL, 0, MODE_HIGH, ExitLookBack, 1);
   XMAX=NormalizeDouble (iHigh(NULL, 0, Xhighest_bar),Digits);
   int Xlowest_bar=Lowest(NULL, 0, MODE_LOW, ExitLookBack, 1);
   XMIN=NormalizeDouble (iLow(NULL, 0, Xlowest_bar),Digits);
   
   N = NormalizeDouble ((iATR(NULL,0,20,1)),Digits);
   LastOpen = subLastOpenPrice();
   LastSL = subLastSLPrice();
   tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE);
   subPrintDetails();
   spread = MarketInfo(Symbol(),MODE_SPREAD);
   
  // Unit=(AccountBalance()/100/N/Point*MarketInfo(Symbol(),MODE_TICKVALUE));
   double BStopLossLevel, SStopLossLevel;
        int BuyStopOrder = 0, SellStopOrder = 0, BuyOrder = 0, SellOrder = 0;
        int _GetLastError = 0, _OrdersTotal = OrdersTotal();
   double NSL = NormalizeDouble( N*RevengeSL, Digits );
       
//-----------------TRAILING TOTAL PROFITS WITH REVENGE
if(LockProfit)
   {
     
      PTPercent = NormalizeDouble(subPipProfitTotal()*(LockinPercent/100),0);
      
      if(subPipProfitTotal()>PipLockinStart)
      {
         if(PTPercent>PTLocked)
         {
            PTLocked = PTPercent;
         }
      }
      if(!Revenge)
      {  
         if(PTLocked>0)
         {
            if(PTLocked>=subPipProfitTotal())
            {
               subCloseOrder();
               PTLocked = 0;
            }
         }
      }
      if(Revenge)
      {
         if(subOrderType()==OP_SELL){
            if(PTLocked>0){
             if(PTLocked>=subPipProfitTotal())
               {
                  subCloseOrder();
                  PTLocked = 0;
                  if(OrderSend(Symbol(),OP_BUY,Lots,Ask,3,OrderOpenPrice()-NSL,0,"DocSniper EA",MagicNumber,0,Green)<0)
                        {
                            Print( "OrderOpen Error #", GetLastError() );
                                                                    return(-1);
                        }
               }
            }   
         }
         if(subOrderType()==OP_BUY){
            if(PTLocked>0){
             if(PTLocked>=subPipProfitTotal())
               {
                  subCloseOrder();
                  PTLocked = 0;
                 if(OrderSend(Symbol(),OP_SELL,Lots,Bid,3,OrderOpenPrice()+NSL,0,"DocSniper EA",MagicNumber,0,Green)<0)
                        {
                            Print( "OrderOpen Error #", GetLastError() );
                                                                    return(-1);
                        }
               }
            }   
         }
      }   
   }
   double Unit = Lots;
   
   
   
       
   for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
                if ( !OrderSelect( z, SELECT_BY_POS ) )
                {
                        _GetLastError = GetLastError();
                        Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
                        continue;
                }
                if ( OrderSymbol() != Symbol() ) continue;
                if ( OrderMagicNumber() != MagicNumber ) continue;
                switch ( OrderType() )
                {
                        case OP_BUY:                BuyOrder                        = OrderTicket(); break;
                        case OP_SELL:                SellOrder                = OrderTicket(); break;
                        case OP_BUYSTOP:        BuyStopOrder        = OrderTicket(); break;
                        case OP_SELLSTOP:        SellStopOrder        = OrderTicket(); break;
                }
        }
       
//-----------------------PENDING ORDERS PROCESS-----------------+
        if(subTotalOpenTrade()<1)
        {  PTLocked = 0;
           LastXMIN = 0;
           LastXMAX = 9999999;
      BStopLossLevel = NormalizeDouble( EMAX - N*SLMultiple, Digits );
                  SStopLossLevel = NormalizeDouble( EMIN + N*SLMultiple, Digits );
                  double Spread = NormalizeDouble(spread*Point,Digits);
                  string Modify1 = "none";
                  string Modify2 = "none";         
      trueEMAX = EMAX + Spread;
      trueEMIN = EMIN - Spread;
                 
                    if((LastEMAX != trueEMAX)||(BuyStopOrder<1))
                    {
            if (BuyStopOrder>0)
            {
               int cnt;
               int total = subTotalBuyStopTrade();
               for(cnt=0;cnt<total;cnt++)
               {     
                  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                  if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
                  {
                        
                        BuyStopOrder = OrderTicket();
                  }
                  OrderDelete(BuyStopOrder);
               }
               BuyStopOrder = 0;
            }
           
               
               
            if(subTotalBuyStopTrade()<1)
            {
               if (OrderSend(Symbol(),OP_BUYSTOP,Unit,trueEMAX,6,BStopLossLevel,0,"TURTLE POWER",MagicNumber,0,Green)<0)
               {
                               Print( "OrderSend Error #", GetLastError() );
                             return(-1);
                    }
               LastEMAX = trueEMAX;
               double BuyPrice = LastEMAX;            
            }
        }  
        if((LastEMIN != trueEMIN)||(SellStopOrder<1))
        {
            if (SellStopOrder>0)
            {
               total = subTotalSellStopTrade();
               for(cnt=0;cnt<total;cnt++)
               {     
                  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                  if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
                  {
                        
                        SellStopOrder = OrderTicket();
                  }
                  OrderDelete(SellStopOrder);
               }
               SellStopOrder = 0;
            }
            if(subTotalSellStopTrade()<1)
            {
               if (OrderSend(Symbol(),OP_SELLSTOP,Unit,trueEMIN,6,SStopLossLevel,0,"TURTLE POWER",MagicNumber,0,Green)<0)
               {
                            Alert( "OrderSend Error #", GetLastError() );
                          return(-1);
                    }
               LastEMIN = trueEMIN;
               double SellPrice = LastEMIN;
            }
        }
    }
   
//-----------------------------------------------------+   
//$$$$$$$$$$$$$$$$(OPEN BUY PROCESS)$$$$$$$$$$$$$$$$$$$+
//-----------------------------------------------------+
   if(BuyOrder>0)
   {  
      if (SellStopOrder>0)
      {
                                        if ( !OrderDelete( SellStopOrder ) )
                                        {
                                                Alert( "OrderDelete Error #", GetLastError() );
                                                return(-1);
                                        }
      }
      LastOpen = subLastOpenPrice();
      //-------------PENDING REENTRY PROCESS
      total = subTotalOpenTrade();
      if(total<MaxUnits)
      {
         double PendingTotal = subTotalBuyStopTrade();
         if(PendingTotal<1)
         {  
            BuyPrice = NormalizeDouble((LastOpen+N*ReEntryMultiple),Digits);
            double SL = NormalizeDouble(BuyPrice - N*SLMultiple, Digits );
            if(BuyPrice>Bid){
               if (OrderSend(Symbol(),OP_BUYSTOP,Unit,BuyPrice,6,SL,0,"TURTLE POWER",MagicNumber,0,Green)<0)
               {
                                 Print( BuyPrice+"OrderSend Error #", GetLastError() );
                                return(-1);
                     }
            LastOpen = subLastOpenPrice();
            }         
         }
      }
      //-----------MODIFY STOPS AFTER REENTRY
      LastOpen = subLastOpenPrice();
      if((total>1)&&(XMIN<LastOpen))
      {   LastOpen = subLastOpenPrice();
          BStopLossLevel = NormalizeDouble(LastOpen - N*SLMultiple, Digits );
          total = OrdersTotal();
          for(cnt=0;cnt<total;cnt++)
          {     
              OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
              if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
              {       
                  if ( BStopLossLevel > OrderStopLoss()|| OrderStopLoss() <= 0.0 )
                  {
                      if ( !OrderModify( OrderTicket(), OrderOpenPrice(), BStopLossLevel,OrderTakeProfit(), OrderExpiration() ) )
                                               {
                                                                Print( "OrderModify Error #", GetLastError() );
                                                                return(-1);
                                               }
                                               return(0);
                                           }
               }
           }         
      }
      LastOpen = subLastOpenPrice();
      //-----------BREAK EVEN AFTER PIPS PROCESS
      if((ATRBreakEven)&&(XMIN<LastOpen))
      {
         double BreakEvenPrice = NormalizeDouble(LastOpen + N*BreakEvenMultiple,Digits);
         if(Bid > BreakEvenPrice){
           for(cnt=0;cnt<total;cnt++)
          {     
              OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
              if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
              {   
                  if ( LastOpen > OrderStopLoss()|| OrderStopLoss() <= 0.0 )
                  {
                     if ( !OrderModify( OrderTicket(), OrderOpenPrice(), LastOpen,OrderTakeProfit(), OrderExpiration() ) )
                                              {
                                                                     Print( "OrderModify Error #", GetLastError() );
                                                                     return(-1);
                                              }
                                           }
               }
           }
           Modify2="done";   
         }
      }
      //-----------TRAILING STOP PROCESS
      LastSL = subLastSLPrice();
      total = subTotalOpenTrade();
      if(total>1)
      {
          if(LastSL < XMIN)
          {
               total = OrdersTotal();
               for(cnt=0;cnt<total;cnt++)
               {     
                  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                  if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
                  {
                     if ( !OrderModify( OrderTicket(), OrderOpenPrice(), XMIN,OrderTakeProfit(), OrderExpiration() ) )
                                                        {
                                                                Print( "OrderModify Error #", GetLastError() );
                                                                return(-1);
                                                        }
                  }
               }   
                                LastSL = subLastSLPrice();
                                               
          }  
      }
      //+----------END OF TRAILING STOP PROCESS
   }
//-----------------------------------------------------+   
//$$$$$$$$$$$$$$$(OPEN SELL PROCESS)$$$$$$$$$$$$$$$$$$$+
//-----------------------------------------------------+
   if(SellOrder>0)
   {
     if (BuyStopOrder>0)
     {
                                        if ( !OrderDelete( BuyStopOrder ) )
                                        {
                                                Alert( "OrderDelete Error #", GetLastError() );
                                                return(-1);
                                        }
      }
       LastOpen = subLastOpenPrice();
      //-------------PENDING REENTRY PROCESS
      total = subTotalOpenTrade();
      if(total<MaxUnits)
      {
         PendingTotal = subTotalSellStopTrade();
         if(PendingTotal<1)
         {  
            SellPrice = NormalizeDouble((LastOpen-N*ReEntryMultiple),Digits);
            SL = NormalizeDouble(SellPrice + N*SLMultiple, Digits );
            
            if(SellPrice<Bid){
               if (OrderSend(Symbol(),OP_SELLSTOP,Unit,SellPrice,6,SL,0,"TURTLE POWER",MagicNumber,0,Green)<0)
               {
                                 Print( BuyPrice+"OrderSend Error #", GetLastError() );
                                return(-1);
                    }
            LastOpen = subLastOpenPrice();
            }        
         }
      }
      //-----------MODIFY STOPS AFTER REENTRY
      LastOpen = subLastOpenPrice();
      if((total>1)&&(XMAX>LastOpen))
      {   
         SStopLossLevel = NormalizeDouble(LastOpen + N*SLMultiple, Digits );
          total = OrdersTotal();
          for(cnt=0;cnt<total;cnt++)
          {     
              OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
              if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
              {       
                  if ( SStopLossLevel < OrderStopLoss()|| OrderStopLoss() <= 0.0 )
                  {
                      if ( !OrderModify( OrderTicket(), OrderOpenPrice(), SStopLossLevel,OrderTakeProfit(), OrderExpiration() ) )
                                               {
                                                                Print( "OrderModify Error #", GetLastError() );
                                                                return(-1);
                                               }
                                               return(0);
                                           }
               }
           }         
      }
      //-----------BREAK EVEN AFTER PIPS PROCESS
      LastOpen = subLastOpenPrice();
      if((ATRBreakEven)&&(XMAX>LastOpen)&&(total==MaxUnits))
      {  total = OrdersTotal();
         BreakEvenPrice = NormalizeDouble(LastOpen - N*BreakEvenMultiple,Digits);
         if(Bid < BreakEvenPrice){
           for(cnt=0;cnt<total;cnt++)
          {     
              OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
              if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
              {   
                  if ( LastOpen < OrderStopLoss()|| OrderStopLoss() <= 0.0 )
                  {
                     if ( !OrderModify( OrderTicket(), OrderOpenPrice(), LastOpen,OrderTakeProfit(), OrderExpiration() ) )
                                              {
                                                                     Print( "OrderModify Error #", GetLastError() );
                                                                     return(-1);
                                              }
                                           }
               }
           }
         }
      }
      //-----------TRAILING STOP PROCESS
      LastSL = subLastSLPrice();
      if(XMAX<=LastOpen)
      {
          if(LastSL > XMAX)
          {
               total = OrdersTotal();
               for(cnt=0;cnt<total;cnt++)
               {     
                  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                  if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
                  {
                     if ( !OrderModify( OrderTicket(), OrderOpenPrice(), XMAX,OrderTakeProfit(), OrderExpiration() ) )
                                                        {
                                                                Print( "OrderModify Error #", GetLastError() );
                                                                return(-1);
                                                        }
                  }
               }   
                                LastSL = subLastSLPrice();
                                               
          }  
      }
      //+----------END OF TRAILING STOP PROCESS
   }
  
     
//----
   return(0);
}
//+--------------------------END OF PROGRAM--------------------------+
//----------------------- GENERATE MAGIC NUMBER BASE ON SYMBOL AND TIME FRAME FUNCTION
//----------------------- SOURCE   : PENGIE
int subGenerateMagicNumber(int MagicNumber, string symbol, int timeFrame)
{
   int isymbol = 0;
   if (symbol == "EURUSD")       isymbol = 1;
   else if (symbol == "GBPUSD")  isymbol = 2;
   else if (symbol == "USDJPY")  isymbol = 3;
   else if (symbol == "USDCHF")  isymbol = 4;
   else if (symbol == "AUDUSD")  isymbol = 5;
   else if (symbol == "USDCAD")  isymbol = 6;
   else if (symbol == "EURGBP")  isymbol = 7;
   else if (symbol == "EURJPY")  isymbol = 8;
   else if (symbol == "EURCHF")  isymbol = 9;
   else if (symbol == "EURAUD")  isymbol = 10;
   else if (symbol == "EURCAD")  isymbol = 11;
   else if (symbol == "GBPUSD")  isymbol = 12;
   else if (symbol == "GBPJPY")  isymbol = 13;
   else if (symbol == "GBPCHF")  isymbol = 14;
   else if (symbol == "GBPAUD")  isymbol = 15;
   else if (symbol == "GBPCAD")  isymbol = 16;
   else                          isymbol = 17;
   if(isymbol<10) MagicNumber = MagicNumber * 10;
   return (StrToInteger(StringConcatenate(MagicNumber, isymbol, timeFrame)));
   
}
//----------------------- PRINT COMMENT FUNCTION
//----------------------- SOURCE : CODERSGURU
void subPrintDetails()
{
   string sComment   = "";
   string sp         = "-------------------------------------------------------------\n";
   string NL         = "\n";
   sComment = sp;
   sComment = sComment + sp;
   sComment = sComment + "BULL ENTRY= " + DoubleToStr(EMAX,4) + " | ";
   sComment = sComment + "BULL EXIT= " + DoubleToStr(XMIN,4) + " | ";
   sComment = sComment + NL;
   sComment = sComment + sp;
   sComment = sComment + "BEAR ENTRY= " + DoubleToStr(EMIN,4) + " | ";
   sComment = sComment + "BEAR EXIT= " + DoubleToStr(XMAX,4) + " | ";
   sComment = sComment + NL;
   sComment = sComment + sp;
   sComment = sComment + "ATR =" + DoubleToStr(N,4) + " | ";
   sComment = sComment + "Spread =" + DoubleToStr(spread,4) + " | ";
   sComment = sComment + "tickvalue =" + DoubleToStr(tickvalue,4) + " | ";
   sComment = sComment + NL;
   sComment = sComment + sp;
   sComment = sComment + "Total Pips= " +DoubleToStr(subPipProfitTotal(),0) + " | ";
   sComment = sComment + "Pips Locked in= " + DoubleToStr(PTLocked,0) + " | ";
   sComment = sComment + "T.P.Percent =" + DoubleToStr(PTPercent,4) + " | ";
   sComment = sComment + NL;
   sComment = sComment + sp;
   Comment(sComment);
}
//----------COUNT OPEN TRADES------------------+
int subTotalOpenTrade()
{
   int
      cnt,
      total = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if((OrderType()==OP_SELL||OrderType()==OP_BUY) &&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber) total++;
   }
   return(total);
}
//----------GET LASt OPENED PRICE------------------+
double subLastOpenPrice()
{
   int
      cnt,
      total = 0;
   double OpenPrice;
   
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if((OrderType()==OP_SELL||OrderType()==OP_BUY) &&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber)
         
         OpenPrice = OrderOpenPrice();
         
   }
   return(OpenPrice);
}
//----------GET LASt SL PRICE------------------+
double subLastSLPrice()
{
   int
      cnt,
      total = 0;
   double SLPrice;
   
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if((OrderType()==OP_SELL||OrderType()==OP_BUY) &&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber)
         
         SLPrice = OrderStopLoss();
         
   }
   return(SLPrice);
}
//----------COUNT BUYSTOP ORDERS---------------+
int subTotalBuyStopTrade()
{
   int
      cnt,
      total = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==OP_BUYSTOP&&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber) total++;
   }
   return(total);
}
//-----------COUNT SELLSTOP ORDERS-------------+
int subTotalSellStopTrade()
{
   int
      cnt,
      total = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==OP_SELLSTOP&&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber) total++;
   }
   return(total);
}
//----------COUNT OPEN TRADES------------------+
double subPipProfitTotal()
{
   int
      cnt,
      total = 0;
   tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE);
   double TotalProfit = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if((OrderType()==OP_SELL||OrderType()==OP_BUY) &&
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber)
         {
         double PipProfit = (OrderProfit()/OrderLots()/tickvalue);
         TotalProfit = TotalProfit+PipProfit;
         }
   }
   return(TotalProfit);
}
//----------------------- CLOSE ORDER FUNCTION
//----------------------- SOURCE: FIREDAVE
void subCloseOrder()
{
   int
         cnt,
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;
   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber)
      {
         switch(OrderType())
         {
            case OP_BUY      :
               for(c=0;c<10;c++)
               {
                  ticket=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                  err=GetLastError();
                  if(err==0)
                  {
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_SELL     :
               for(c=0;c<10;c++)
               {
                  ticket=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
                  err=GetLastError();
                  if(err==0)
                  {
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_BUYLIMIT :
            case OP_BUYSTOP  :
            case OP_SELLLIMIT:
            case OP_SELLSTOP :
               OrderDelete(OrderTicket());
         }
      }
   }      
}
//----------GET ORDER TYPE
int subOrderType()
{
   int
      cnt,
      total = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      total = OrderType();
   }
   return(total);
}

""
还没有人打赏,支持一下

评论|共 1 个

联系微:yy01xp  看回测 及 策略讲解
4.jpg

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则