Campionato di trading automatizzato 2007: errori comuni negli esperti - pagina 6

 
Il messaggio d'errore "OrderModify error 1" significa che OrderModify è stato chiamato con parametri non modificati, il che è dovuto a una programmazione imprecisa.

Prima di chiamare OrderModify, controllate se state chiamando l'aggiornamento con i nuovi dati o se state cercando di impostare valori esistenti.
 
Il test del tuo esperto è stato completato. Rapporto di prova dell'esperto:
-----------------------
2007.09.08 17:47
su EURUSD:60
17:38:34 2007.01.04 00:01 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:02 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:03 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:08 stalker_2 EURUSD,H4: OrderModify error 1
0 min 49 secondi
Errori: 20


-----------------------

Per favore, correggi il tuo codice Expert Advisor e carica una nuova versione nella pagina del tuo profilo:

Penso che il tuo robot sia impazzito, sembra che abbia un sacco di partecipanti :-) Ha già mescolato gli Expert Advisors. Non ho un Expert Advisor con stalker_2 nei commenti e funziona sul grafico orario. E il comando OrderModify non lo usa affatto.
 
Renat:
Il messaggio d'errore "OrderModify error 1" significa chiamare OrderModify con parametri invariati, il che è dovuto a una programmazione imprecisa.

Prima di chiamare OrderModify, controlla se stai chiamando l'aggiornamento con nuovi dati o se stai cercando di impostare valori già esistenti.

forse intendi la costruzione?

se ( RefreshRates() == true )

{

....

OrderModify(Ticket,...

}

nel mio strascico

Resresh() dopo ogni modifica dell'ordine nel ciclo

Breakeven dopo 35 pips di profitto

variabili esterne, valore più piccolo

FirstTralStopSell = 35;

trall successivo dopo aver raggiunto 50 pips

Non capisco bene come questo errore possa verificarsi - non ho nessun errore del genere nei test

è possibile che dopo aver emesso il comando OrderModify, il sistema di test emetta delle requote in modo tale che il prezzo abbia il tempo di ritornare di più di 50 pips

ma allora come evitare una tale situazione?

Inoltre i miei LOGS non appaiono nel file di log fornito dal sistema di test!

if (err != 0 )
{
if ( ECHOerror == 1 )
Print("Error("+err+") Open="+OrderOpenPrice()+""+OrderStopLoss()+" modificando SL: "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+""+msgErrors(err));
}

void TralYZ(int lLockTralSell, int lLockTralBuy)
{
   int err;
   int cnt=OrdersTotal();
   int LocalDinamicTrallSELL;
   int LocalDinamicTrallBUY;
   int FirstTralStopSell;
   int FirstTralStopBuy;
   LocalDinamicTrallSELL = oDinamicTrallSELL ; // значения по умолчанию 
   LocalDinamicTrallBUY =  oDinamicTrallBUY  ;
   FirstTralStopSell = oFirstTralStopSell;             // первый безуюыток 
   FirstTralStopBuy = oFirstTralStopBuy;
 
 
   while(cnt>=0)
   {
      RefreshRates();
      
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      Sleep(10000);
      int Ticket=OrderTicket();
      int IDorder;
      IDorder = FindID(Ticket);
      if (OrderSymbol() == Symbol() )
      {
         if (OrderType()==OP_SELL && lLockTralSell == 0 ) 
         {         
            if ( OrderMagicNumber() == MAGIC3 )
               FirstTralStopSell = d3FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC2 )
               FirstTralStopSell = d2FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC1 )
               FirstTralStopSell = d1FirstTralStopBuy;
            if ( OrderMagicNumber() == cMAGIC3 )
               FirstTralStopSell = c3FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC2 )
               FirstTralStopSell = c2FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC1 )
               FirstTralStopSell = c1FirstTralStopSell;
            if ( 
               ( OrderStopLoss() == 0  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) ||
               ( OrderStopLoss() > OrderOpenPrice()  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) 
               )
            {                  
               if ( DEBUG == 1 )
                  Print( "1 SL="+OrderStopLoss()+" > OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+FirstTralStopSell+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
               lotlib_PrevLots = OrderLots();  
               lotlib_PrevProfit = OrderProfit();
               OrderModify(Ticket,OrderOpenPrice(),Ask+(Point*FirstTralStopSell) , 0 ,0,Purple);
               Sleep( 10000 );
               err=GetLastError();
               if (err != 0 )
               {
                  if ( ECHOerror == 1 )
                     Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+" "+msgErrors(err));
               }
            }
 
Ho controllato lo stesso codice Expert tre volte. le prime due volte non c'erano errori e la terza volta c'era improvvisamente un errore e ora devo cambiare il codice Expert. non è chiaro perché lo stesso codice Expert deve essere controllato più volte?
 
Renat:
Il messaggio d'errore "OrderModify error 1" significa che OrderModify è stato chiamato con parametri non modificati, il che è dovuto a una programmazione imprecisa.

Prima di chiamare OrderModify, controllate se state chiamando l'aggiornamento con nuovi dati o se state cercando di impostare valori esistenti.


Dopo aver introdotto il costrutto

                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

la versione 208 del terminale non funziona affatto nei test

RefreshRates() == true ?

LocalDinamicTrallBUY = 50;

ingresso a trall

              if ( OrderStopLoss() > OrderOpenPrice() && ( Bid - OrderStopLoss() )  >= (LocalDinamicTrallBUY*Point) + Ask-Bid )
                  {
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

ci devono essere delle sottigliezze... Non so nulla di

 
YuraZ:
Renat:
Il messaggio d'errore "OrderModify error 1" significa che OrderModify viene chiamato con parametri non modificati, il che è dovuto a una programmazione imprecisa.

Prima di chiamare OrderModify, controlla se stai chiamando l'aggiornamento con nuovi dati o se stai cercando di impostare valori esistenti.

forse intendi la costruzione?


Questo significa che stai cercando di impostare lo stesso valore StopLoss in OrderModify che era già presente. Per esempio, se lo StopLoss è 1,3020 e si cerca di impostare nuovamente lo stop a 1,3020, OrderModify restituirà il codice 1. Questo è esplicitamente dichiarato nella documentazione di OrderModify:

bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Cambia i parametri delle posizioni precedentemente aperte o degli ordini in sospeso. Restituisce TRUE se la funzione si completa con successo. Restituisce FALSE se la funzione fallisce. Bisogna chiamare GetLastError() per ottenere le informazioni sull'errore.

Nota: il prezzo aperto e il tempo di scadenza possono essere cambiati solo per gli ordini in sospeso.
Se vengono passati valori invariati come parametri alla funzione, verrà generato un errore 1 (ERR_NO_RESULT).
Su alcuni server commerciali, può essere impostato un divieto di scadenza degli ordini pendenti. In questo caso un errore 147 (ERR_TRADE_EXPIRATION_DENIED) sarà generato quando si cerca di impostare un valore diverso da zero nel parametro di scadenza.
 
Renat:
YuraZ:
Renat:
Il messaggio d'errore "OrderModify error 1" significa una chiamata OrderModify con parametri invariati, che è dovuta a una programmazione imprecisa.

Prima di chiamare OrderModify, controllate se state chiamando l'aggiornamento con nuovi dati o se state cercando di impostare valori già esistenti.

forse intendi la costruzione?


Quello che si intende è che si sta cercando di impostare lo stesso valore di StopLoss in OrderModify che era già presente. Per esempio, se lo StopLoss è 1,3020 e si cerca di impostare nuovamente lo stop a 1,3020, OrderModify restituirà il codice 1. Questo è esplicitamente dichiarato nella documentazione di OrderModify:

bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Modifica i parametri delle posizioni precedentemente aperte o degli ordini in sospeso. Restituisce TRUE se la funzione è stata completata con successo. Restituisce FALSE se la funzione fallisce. Chiama GetLastError() per ottenere informazioni sull'errore.

Nota: il prezzo aperto e il tempo di scadenza possono essere cambiati solo per gli ordini in sospeso.
Se vengono passati valori invariati come parametri alla funzione, verrà generato un errore 1 (ERR_NO_RESULT).
Su alcuni server di trading l'applicazione del tempo di scadenza per gli ordini in sospeso può essere proibita. In questo caso un errore 147 (ERR_TRADE_EXPIRATION_DENIED) sarà generato quando si cerca di impostare un valore diverso da zero nel parametro di scadenza.


WOW!!! esattamente!!! Renat grazie!

aggiunta condizione di ingresso trall

&& OrderStopLoss() != Ask+Point*LocalDinamicTrallSELL

if ( 
                         OrderStopLoss()  < OrderOpenPrice()
                      && ( OrderStopLoss()-Ask )>=(LocalDinamicTrallSELL*Point) + Ask-Bid   
                      && OrderStopLoss() !=  Ask+Point*LocalDinamicTrallSELL    
                       ) 
                  {                     
                     if ( DEBUG == 1 )
                        Print( "2 SL="+OrderStopLoss()+" < OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+LocalDinamicTrallSELL+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Ask+Point*LocalDinamicTrallSELL , 0,0,Purple);
                     err=GetLastError();
                     if (err != 0 )
                     {   
                        if ( ECHOerror == 1 )
                           Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*LocalDinamicTrallSELL)+" TP "+(0)+" "+msgErrors(err));
                     }
                  }

Ma non c'erano errori nei miei log durante i test! - questo è molto strano

 
pilgrim:

Penso che il tuo robot sia impazzito, penso che abbia molti partecipanti :-) Ha già iniziato a confondere gli EA. Il mio EA non scrive "stalker_2" nei commenti, funziona sul grafico orario. E il comando OrderModify non lo usa affatto.
Lo script del tester automatico ha catturato i log di qualcun altro - è già stato risolto.
 
Cioè, per due volte mi è stata inviata un'e-mail che la spesa ha superato il test e sono registrato... e sulla terza dice che ho un errore nel codice... perché devo cambiare il codice dell'esperto che ho caricato nel profilo una volta?
 
folver:
cioè per due volte mi è stata inviata un'e-mail che l'esperto ha superato con successo il test e sono registrato... e la terza volta mi dice che ho un errore nel codice... perché dovrei cambiare il codice dell'Expert Advisor una volta che l'ho caricato nel profilo?
A giudicare dai risultati, l'Expert Advisor ha preso una chiamata di margine. Non posso ancora dire nulla. Domani mattina saranno completati i prossimi controlli e controlleremo i risultati.
Motivazione: