L'EA non funziona su più coppie, ho bisogno di aiuto - pagina 3

 
for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
              
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
              
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Il mio Ea non smette di aprire e chiudere ordini, sembra che ignori qualcosa nel mio codice, c'è qualcosa di sbagliato nella mia funzione di chiusura dell'ordine?
 
Matt_Townsend: c'è qualcosa che non va nella mia funzione di chiusura degli ordini?

Sì - devi fare il conto alla rovescia quando chiudi gli ordini:

for(int i=OrdersTotal()-1; i>=0; i--)
Puoi leggere il perché qui
 
honest_knave:

Sì - devi fare il conto alla rovescia quando chiudi gli ordini:

for(int i=OrdersTotal()-1; i>=0; i--)
Puoi leggere il perché qui
Sta ancora aprendo e chiudendo compravendite quasi immediatamente, c'è qualcos'altro che non va nel codice?
 
Matt_Townsend c'è qualcos'altro che non va nel codice?
Stampate le vostre variabili e scoprite perché.
 
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Perché dovresti continuare?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


avrebbe più senso
 
Keith Watford:
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Perché continuare?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


avrebbe più senso
Non chiude gli ordini se il codice ha |||, ma funziona meglio con il != dentro
 
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


    double fastma, slowma;
    int    ticket, total;
    //---define Ma's
    
    fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
    slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
    
    total = OrdersTotal();
    //---Start operations
    
    if(total < 1)
    {
       if(fastma > slowma)
        {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Buy order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       if(fastma < slowma)
       {
         ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Sell order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       return(0);
    }
  
      
    for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Ecco il mio codice così com'è ora, può aprire operazioni su qualsiasi coppia su cui l'ho impostato, ma casualmente ne ha alcune con operazioni aperte. Ho cercato di far funzionare il codice in modo indipendente su qualsiasi coppia su cui lo metto, ma sfortunatamente il codice non apre nessuna compravendita finché tutte le altre non sono chiuse, e poi non apre le compravendite su tutte le coppie su cui è impostato. C'è un modo per far sì che il programma lo faccia, ma compra e vende come voglio io.
 
Il tuo codice
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
semplificato
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)
 
whroeder1:
Tu codifichi
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Semplificato
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)

Ogni grafico non funziona ancora in modo indipendente, c'è qualcos'altro che posso fare?

E nel modo in cui è codificato, non chiude più i trade.

 
Keith Watford 2016.12.14 03:10| 122.155.43.228ban IT

    total = OrdersTotal();
    //---Start operations
    
    if(total <= 1)
fare un loop attraverso gli ordini aperti e contare solo i trade che hanno il numero magico dell'EA e il simbolo del grafico
Motivazione: