Risposta

SQ 3.8.0 Errore 129 prezzo non valido nel trading reale

14 risposte

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

9 anni fa #113353

Ciao Mark,

 

Ho creato, testato ed esportato il MQL4 per una strategia che sembra promettente sul timeframe EURUSD H1. Utilizza l'opzione di inversione della posizione di mercato, ma fallisce durante il test in avanti su un conto reale:

 

2015.02.16 17:59:59.599 Strategia 9.7 EURUSD,H1: 2015.02.16 20:00:09 Errore nell'apertura dell'ordine: 129 : prezzo non valido
2015.02.16 17:59:59.599 Strategia 9.7 EURUSD,H1: 2015.02.16 20:00:09 Ordine di apertura, direzione: 0, prezzo: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:55.489 Strategia 9.7 EURUSD,H1: 2015.02.16 20:00:05 Errore nell'apertura dell'ordine: 129 : prezzo non valido
2015.02.16 17:59:55.489 Strategia 9.7 EURUSD,H1: 2015.02.16 20:00:05 Ordine di apertura, direzione: 0, prezzo: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:52.067 Strategia 9.7 EURUSD,H1: 2015.02.16 20:00:01 Errore nell'apertura dell'ordine: 129 : prezzo non valido
2015.02.16 17:59:52.067 Strategia 9.7 EURUSD,H1: 2015.02.16 20:00:01 Ordine di apertura, direzione: 0, prezzo: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:52.052 Strategia 9.7 EURUSD,H1: chiudere #164716296 vendere 0,10 EURUSD a 1,14383 al prezzo 1,13572

 

Qualche idea sul perché l'EA non sembra essere in grado di aprire la direzione di trading opposta dopo aver chiuso un trade?

 

Grazie,

 

Mike

0

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

9 anni fa #128868

Mark,

 

Osservando la logica di trading nell'EA generato, mi sembra che ritenti indipendentemente dalla causa dell'errore, e in caso di errore 129 dovrebbe aggiornare il bid/ask poiché il prezzo si è spostato oltre lo slippage.

 

Vedi http://forum.mql4.com/61528

 

 

Per i miei EA utilizzo una libreria chiamata OrderReliable per gestire i complicati errori richiesti. 

 

https://github.com/keyguy/TradersTech/blob/master/OrderReliable_2011.01.07.mqh

 

Forse è possibile includerlo nella prossima versione del modello SQ per MQ4?

 

Saluti,

 

Mike

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #128890

grazie per avermi segnalato l'errore e la libreria, ci darò un'occhiata.

Marchio
Architetto StrategyQuant

0

mikeyc

Cliente, bbp_partecipante, comunità, 877 risposte.

Visita il profilo

9 anni fa #129627

L'errore di slippage è molto frequente con alcuni broker (ciao FXDD :angry: ). Penso che la soluzione migliore sia evitare questi broker con un cattivo slippage.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

9 anni fa #129666

Vai con un broker ECN, quell'errore è tipico dei broker market maker che rifiutano di accettare il tuo ordine al prezzo che mostrano in MT4. Si chiamano requotes e servono a far guadagnare di più il broker dalle vostre perdite:) Questo non accadrà mai su un broker ECN buono e onesto. Ce ne sono molti, il mio consiglio è Global Prime in Australia.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Cliente, bbp_partecipante, comunità, 300 risposte.

Visita il profilo

9 anni fa #129687

Questo non accadrà mai su un broker ECN buono e onesto.

 

Ti sbagli... Ci sono molte altre cose che causano i requotes. Semplicemente, provate a fare trading senza requotes con ping al server di trading > 300ms. Anche con un broker onesto non otterrete mai il prezzo che vedete, perché questo prezzo già non esiste. 

btn_viewmy_160x33.png

0

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

9 anni fa #129701

Certo, ma questo non è un requote, è uno slippage e non darà un errore all'EA come un requote - l'operazione verrà aperta in ogni caso, solo con un prezzo slittato. Continuo a preferire questo metodo rispetto al requote. Inoltre, è chiaro che non si dovrebbe avere un ping di 300 ms verso il server del broker. Io lavoro per un broker ECN, e anche per i piccoli conti si dovrebbe affittare un VPS per gestire le proprie strategie.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Cliente, bbp_partecipante, comunità, 300 risposte.

Visita il profilo

9 anni fa #129704

Anche per i piccoli conti si dovrebbe affittare un VPS per gestire le proprie strategie.

 

Assolutamente d'accordo.

btn_viewmy_160x33.png

0

Dan

Cliente, bbp_partecipante, comunità, 31 risposte.

Visita il profilo

8 anni fa #133511

Ciao Mark,

 

Sto ricevendo lo stesso errore di MickeyC, in cui alcune volte quando il mio AE va a piazzare un'operazione ottengo il messaggio "Errore nell'apertura dell'ordine 129: prezzo non valido" e si ritira altre 3 volte con il prezzo originale. Esiste un codice per aggiornare il prezzo quando tenta di sostituire l'ordine che posso inserire ed è qualcosa che SQ4 affronterà.

 

Grazie per il vostro aiuto

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

8 anni fa #133524

Dan,

 

puoi caricare la strategia o inviarla a [email protected]?

0

Dan

Cliente, bbp_partecipante, comunità, 31 risposte.

Visita il profilo

8 anni fa #133528

Ciao Thomas,

 

Preferisco non condividere il mio AE e risolvere il problema partendo dal presupposto che si tratta di un problema di logica SQ, in cui dovrebbe aggiornare il prezzo quando ha superato l'importo dello slippage. MIckeyC l'ha segnalato in precedenza su questo thread e Mark aveva intenzione di esaminarlo. Vedi sopra, Mark ha apportato qualche modifica per risolvere questo errore nella prossima edizione di SQ? Ho seguito il link fornito da MickeyC per il sito MQL4.  http://forum.mql4.com/61528 e dice che per risolvere il codice di errore 129 prezzo non valido, è necessario inserire RefreshRates(); prima dell'invio dell'ordine. Non sono un programmatore, al massimo ho provato a inserirlo nell'AE. In grassetto verso il fondo è dove ho aggiunto il codice della frequenza di aggiornamento, non sono sicuro che funzionerà, è qui che avrei bisogno della vostra esperienza. Devo dire che l'errore si è verificato solo due volte e in seguito ha tentato di effettuare l'ordine tre volte senza successo con l'errore di prezzo non valido 129. Spero che l'aggiunta del codice RefreshRate possa risolvere il problema. 

 

Grazie per il vostro aiuto

 

 // ordine aperto con gestione degli errori e tentativi
   int ticket = 0;
   int retries = 3;
   while(true) {
      ritenta-;
      if(retries < 0) return;
      if(getMarketPosition() := 0) return;

      if(sqIsTradeAllowed() == 1) {
         ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
         if(ticket > 0) {
            se(tradeDirection > 0) {
                ObjectSetText("righe", "Ultimo segnale: lungo, biglietto: "+biglietto, 8, "Tahoma", LabelColor);
            } else {
                ObjectSetText("righe", "Ultimo segnale: breve, biglietto: "+biglietto, 8, "Tahoma", LabelColor);
            }
            ritorno;
         }
      }

      if(ticket == -130 || ticket == -129) {
         // stop o volume non validi, non possiamo aprire l'operazione
         ritorno;
      }

      Sleep(1000);
     
   }
   ritorno;
}

//+——————————————————————+

int openOrderWithErrorHandling(int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

   //—————————————
   // inviare l'ordine
   int errore, ticket;
   Log("Ordine di apertura, direzione: ", orderType,", prezzo: ", openPrice, ", Ask: ", Ask, ", Bid: ", Bid);
   ticket = OrderSend(Symbol(), orderType, orderLots, openPrice, MaxSlippage, 0, 0, comment, magicNumber, 0, Green);
   if(ticket < 0) {
      // ordine fallito, scrivere l'errore nel log
      error = GetLastError();
      Log("Errore nell'apertura dell'ordine: ", errore, " : ", ErrorDescription(error));
      ritorno(-errore);
      Sleep(1000);
      //aggiornamento dei dati sui prezzi  
      RefreshRates();

    
   }

   rettmp = OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   Log("Ordine aperto: ", OrderTicket(), " al prezzo:", OrderOpenPrice());

   stopLoss = getSpecialSL(stopLoss);
   profitTarget = getSpecialPT(profitTarget);

   if(EmailNotificationOnTrade) {
      SendMail("Strategia GB - Ordine aperto", getNotificationText());
   }

0

Dan

Cliente, bbp_partecipante, comunità, 31 risposte.

Visita il profilo

8 anni fa #133543

Ciao Tomas, ho bisogno del tuo intelletto e della tua guida per il problema di cui sopra.

0

Dan

Cliente, bbp_partecipante, comunità, 31 risposte.

Visita il profilo

8 anni fa #133561

Thomas non otterrò una risposta????

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

8 anni fa #133566

Mi dispiace per la risposta tardiva. Purtroppo non è così semplice, perché il prezzo di un'operazione viene impostato qualche tempo prima che questa funzione venga chiamata, anche per gli ordini di mercato.

Ma è possibile aggiungere il seguente pezzo di codice subito dopo la chiamata di sqIsTradeAllowed().

Aggiornerà il prezzo di mercato poco prima dell'invio dell'ordine.

 

 

   …
   // ordine aperto con gestione degli errori e tentativi
   int ticket = 0;
   int retries = 3;
   while(true) {
      ritenta-;
      if(retries < 0) return;
      if(getMarketPosition() := 0) return;
 
      if(sqIsTradeAllowed() == 1) {
         
         se(orderType == OP_BUY || orderType == OP_SELL) {
            RefreshRates();
            openPrice = NormalizeDouble(getTradeOpenPrice(tradeDirection), Digits);
         }
 
         ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
         if(ticket > 0) {
            se(tradeDirection > 0) {
                ObjectSetText("righe", "Ultimo segnale: lungo, biglietto: "+biglietto, 8, "Tahoma", LabelColor);
            } else {
                ObjectSetText("righe", "Ultimo segnale: breve, biglietto: "+biglietto, 8, "Tahoma", LabelColor);
            }
            ritorno;
         }
      }

 

 

Marchio
Architetto StrategyQuant

0

Dan

Cliente, bbp_partecipante, comunità, 31 risposte.

Visita il profilo

8 anni fa #133576

Ciao Mark,

Grazie per aver risposto, aggiungerò lo snippet di codice e vedrò se funziona........ Grazie ancora

0

Stai visualizzando 14 risposte - da 1 a 14 (di 14 totali)