Problema dell'inserimento di ordini multipli per un conto live con un broker specifico - pagina 4

 
FinanceEngineer:

Ciao

So che sembra strano. Quando ho controllato il valore restituito di OrderSend(request,result) nel codice precedente, ho avuto il problema degli ordini multipli. Ora nel mio nuovo codice, non controllo il valore restituito di OrderSend(request,result) ( ma ho ancora assegnato il valore restituito a qualche variabile per evitare l'errore sulla nuova build del terminale.


CiaoFinanceEngineer, esattamente quello che ti ho detto, stai solo mascherando il vero problema, poiché secondo me stai stampando questo (###) al tuo codice precedente (il codice 10008 restituito), e non la situazione di rottura.

if(!OrderSend(request,result) || result.deal==0 )
      {
         Print("OrderSend Code: ",result.retcode); // You are printing this (###) -> 10008
         ...
 
figurelli:

Ciao Alain,

Non mi è chiaro cosa hai bisogno di sapere, dato che stiamo parlando solo del nuovo codice di FinanceEngineer, e di un consiglio su come testare il codice di ritorno di OrderSend() che è stato cambiato dal codice originale.

Nota che sia il suo codice originale che quello nuovo non hanno il test del codice 10010, quindi se è rilevante per te perché non l'hai chiesto fin dal primo post di lui?

Comunque, puoi spiegare perché avresti bisogno del test del codice 10010 per una polizza di riempimento FOK?

Dato che non è la prima volta che vedo te e altri moderatori parlare, conosci qualche caso in cui è veramente necessario questo test del codice per gli ordini FOK (Fill Or Kill), che potresti condividere con noi?

Grazie in anticipo.

Ho supposto che posso anche fare domanda su questo forum, e non solo devono sempre rispondere. Semplicemente che.

Vediamo un sacco di codice qui, testando il codice restituito (MqlResult) contro 10008 o 10009, ma qualcuno può spiegare qual è il vero significato di questi codici, qual è la differenza tra "Order Placed" e "Request completed" ? Sembra che siano gli unici 2 codici che non sono codici di errore, giusto?

10010 è discutibile, la documentazione ha detto:

10008

TRADE_RETCODE_PLACED

Ordine piazzato

10009

ORDINE COMPLETATO

Richiesta completata

10010

TRADE_RETCODE_DONE_PARTIAL

Solo una parte della richiesta è stata completata

Ma cosa significa "Solo una parte della richiesta è stata completata". Avete notato che con la politica di riempimento FOK, questo probabilmente non può essere l'apertura di 0,5 lotti se viene richiesto 1 lotto (per esempio), ma è l'unico significato?

In precedenza hai scritto del codice 10010:

Non considero questo codice a prova di futuro e abbastanza sicuro e questo è solo un esempio della mancanza di codice di ritorno, quindi per favore rileggi.

Quale può essere il significato di questa frase? "A prova di futuro"? "Abbastanza sicuro" per ... ? "Mancanza di codice di ritorno", cosa manca ? (e non così importante ma, "rileggere" cosa ?).

 
angevoyageur:

Suppongo che posso anche fare domande su questo forum, e non solo avere sempre una risposta. Semplicemente questo.

Vediamo un sacco di codice qui, testando il codice restituito (MqlResult) contro 10008 o 10009, ma qualcuno può spiegare qual è il vero significato di questi codici, qual è la differenza tra "Order Placed" e "Request completed" ? Sembra che siano gli unici 2 codici che non sono codici di errore, giusto?

10010 è discutibile, la documentazione diceva:

10008

TRADE_RETCODE_PLACED

Ordine piazzato

10009

ORDINE COMPLETATO

Richiesta completata

10010

TRADE_RETCODE_DONE_PARTIAL

Solo una parte della richiesta è stata completata

Ma cosa significa "Solo una parte della richiesta è stata completata". Avete notato che con la politica di riempimento FOK, questo probabilmente non può essere l'apertura di 0,5 lotti se viene richiesto 1 lotto (per esempio), ma è l'unico significato?

In precedenza hai scritto del codice 10010:

Quale può essere il significato di questa frase ? "A prova di futuro" ? "Abbastanza sicuro" per ... ? "Mancanza di codice di ritorno", cosa manca ? (e non così importante ma, "rileggere" cosa?).

Proprio come la maggior parte delle persone, ho imparato la codifica MQL5 guardando il codice di altre persone. Stranamente per me, finora non ho visto nessun codice che controlla il codice 10010. Tuttavia potrebbe valere la pena di controllare. Per sicurezza.

Da quello che ho visto, quando controllo il codice 10008 da solo, ho ottenuto un ordine a doppia entrata. E quando controllo il codice 10009 lungo ho ottenuto l'ordine di doppia entrata. Quando controllo sia il 10008 che il 10009, non ho ottenuto l'ordine di doppia entrata.

Ma sono solo curioso in termini di punto di vista pratico, se tu stesso controlli il codice 10010 nel tuo EA? Se l'ordine fosse davvero parzialmente completato, allora quale sarebbe il modo efficiente di affrontare questo tipo di situazione?

Probabilmente penso che la maggior parte di questo problema di invio dell'ordine potrebbe essere trattato con il controllo del volume avendo PositionGetDouble(POSITION_VOLUME) all'interno del nostro ciclo. Tuttavia non sono praticamente sicuro che questo sia più efficiente del controllo del codice 10008 o 10009.

Se il server del broker è occupato, allora le possibilità di non ottenere il volume giusto sono uguali a quelle di non ottenere il codice 10008 o 10009.

Cordiali saluti.

 
figurelli:

Ciao Alain,

Non mi è chiaro cosa hai bisogno di sapere, dato che stiamo parlando solo del nuovo codice di FinanceEngineer, e di un consiglio su come testare il codice di ritorno di OrderSend() che è stato cambiato dal codice originale.

Nota che sia il suo codice originale che quello nuovo non hanno il test del codice 10010, quindi se è rilevante per te perché non l'hai chiesto dal primo post di lui?

Comunque, puoi spiegare perché avresti bisogno del test del codice 10010 per una polizza di riempimento FOK?

Dato che non è la prima volta che vedo te e altri moderatori parlarne, conosci qualche caso in cui è veramente necessario questo test di codice per gli ordini FOK (Fill Or Kill), che potresti condividere con noi?

Grazie in anticipo.

Beh, quando postiamo sul forum di MQL5.com supponiamo che stiamo parlando con persone che potrebbero avere diversi tipi di esigenze mentre codificano i consulenti esperti... quindi in questo caso, è ovvio che si può semplificare tutto e chiedere all'utente di codificare un consulente esperto più "semplice", una volta che le sue esigenze non sono così "avanzate" come si potrebbe immaginare. Tuttavia, per quanto ne so, ci sono diverse situazioni in cui non è possibile lavorare con la politica di riempimento FOK.

Vi faccio un esempio molto semplice: supponiamo che stiate lavorando con le azioni e che il volume scelto sia di 10.000 azioni. Ora supponiamo che questo stesso expert advisor lavori con le "inversioni", quindi a qualche segnale casuale potresti dover inviare un ordine al mercato con un volume pari a 20.000 azioni per eseguire la cosiddetta "inversione". In questo caso, anche azioni molto liquide (per esempio le azioni brasiliane pesanti PETR4 o VALE5) potrebbero non avere un volume di domanda o offerta pari a 20.000 azioni in un dato momento. Quindi, in questo caso, come tratteresti questo all'interno del tuo expert advisor? Siete davvero convinti che la politica FOK sarebbe l'approccio migliore in questo caso? O proveresti a considerare questo codice 10010 all'interno del tuo expert advisor?

Come detto, quando si lavora sempre con piccoli lotti, allora la politica di riempimento FOK potrebbe essere la soluzione migliore. Tuttavia, a volte le persone hanno esigenze più "avanzate"...

 
angevoyageur:

Suppongo che posso anche fare domande su questo forum, e non solo avere sempre una risposta. Semplicemente che.

Vediamo un sacco di codice qui, testando il codice restituito (MqlResult) contro 10008 o 10009, ma qualcuno può spiegare qual è il vero significato di questi codici, qual è la differenza tra "Order Placed" e "Request completed" ? Sembra che siano gli unici 2 codici che non sono codici di errore, giusto?

10010 è discutibile, la documentazione ha detto:

10008

TRADE_RETCODE_PLACED

Ordine piazzato

10009

ORDINE COMPLETATO

Richiesta completata

10010

TRADE_RETCODE_DONE_PARTIAL

Solo una parte della richiesta è stata completata

Ma cosa significa "Solo una parte della richiesta è stata completata". Avete notato che con la politica di riempimento FOK, questo probabilmente non può essere l'apertura di 0,5 lotti se viene richiesto 1 lotto (per esempio), ma è l'unico significato?

In precedenza hai scritto sul codice 10010:

Quale può essere il significato di questa frase? "A prova di futuro"? "Abbastanza sicuro" per ... ? "Mancanza di codice di ritorno", cosa manca ? (e non così importante ma, "rileggere" cosa ?).

Alain, nessun problema, non devi rispondere, perché probabilmente non troverai mai un caso, dato che questo è obbligatorio in ogni buon protocollo OMS.

Inoltre non c'è bisogno di parlare del perché non hai chiesto dopo il primo post, dato che probabilmente questo è off-topic.

Comunque, nota che FOK è una vecchia politica di riempimento, che MQ ha introdotto probabilmente per indirizzare la comunicazione con OMS, quindi la troverai in tutti i buoni protocolli OMS, come FIX, per esempio(come questo argomento del forum dall'anno 2009, prima che MT5 esistesse).

Quindi, a mio parere, non vedo alcun motivo per chiedere il codice di ritorno 10010 per un ordine Fill o Kill, e questo è il punto, poiché questa regola è obbligatoria e i broker e i fornitori OMS devono rispettarla.

FIX Trading Community: // Fill or Kill Order
FIX Trading Community: // Fill or Kill Order
  • General Q/A
  • www.fixtradingcommunity.org
Have doubt regarding FoK order type. In my view if order is not filled a reject message should be sent by an exchange instead of cancel. Can someone confirm this? No, rejections are to convey that the requested action was not carried out. A FoK order not being filled does not fall in this category, it is rather "works as designed". It is...
 
Malacarne:

Beh, quando scriviamo sul forum di MQL5.com supponiamo che stiamo parlando con persone che potrebbero avere diversi tipi di esigenze mentre codificano i consulenti esperti... quindi in questo caso, è ovvio che si può semplificare tutto e chiedere all'utente di codificare un consulente esperto più "semplice", una volta che le sue esigenze non sono così "avanzate" come si potrebbe immaginare. Tuttavia, per quanto ne so, ci sono diverse situazioni in cui non è possibile lavorare con la politica di riempimento FOK.

Vi faccio un esempio molto semplice: supponiamo che stiate lavorando con le azioni e che il volume scelto sia di 10.000 azioni. Ora supponiamo che questo stesso expert advisor lavori con le "inversioni", quindi a qualche segnale casuale potresti dover inviare un ordine al mercato con un volume pari a 20.000 azioni per eseguire la cosiddetta "inversione". In questo caso, anche le azioni molto liquide (per esempio le azioni brasiliane di peso elevato PETR4 o VALE5) potrebbero non avere un volume di domanda o offerta pari a 20.000 azioni in un dato momento. Quindi, in questo caso, come tratteresti questo all'interno del tuo expert advisor? Siete davvero convinti che la politica FOK sarebbe l'approccio migliore in questo caso? O proveresti a considerare questo codice 10010 all'interno del tuo expert advisor?

Come detto, quando si lavora sempre con piccoli lotti, allora la politica di riempimento FOK potrebbe essere la soluzione migliore. Tuttavia, a volte le persone hanno esigenze più "avanzate"...

La spiegazione è accattivante. Ho pensato la stessa cosa, dato che la maggior parte di noi probabilmente scambia meno di 1 milione di dollari per ogni scambio. In un mercato ad alta liquidità come il Forex, l'adempimento parziale dell'ordine potrebbe essere una cosa rara. Tuttavia mai dire mai. Viviamo in un mondo probabilistico. Niente è certo. Qualche broker rigido potrebbe dividere 1 lotto in 0,5 lotti. In termini di considerazione pratica, se qualche broker non può riempire 1 lotto in qualsiasi momento, preferisco trovare un altro broker per fare trading.

Saluti.

 
Malacarne:

Beh, quando scriviamo sul forum di MQL5.com supponiamo che stiamo parlando con persone che potrebbero avere diversi tipi di esigenze mentre codificano i consulenti esperti... quindi in questo caso, è ovvio che si può semplificare tutto e chiedere all'utente di codificare un consulente esperto più "semplice", una volta che le sue esigenze non sono così "avanzate" come si potrebbe immaginare. Tuttavia, per quanto ne so, ci sono diverse situazioni in cui non è possibile lavorare con la politica di riempimento FOK.

Vi faccio un esempio molto semplice: supponiamo che stiate lavorando con le azioni e che il volume scelto sia di 10.000 azioni. Ora supponiamo che questo stesso expert advisor lavori con le "inversioni", quindi a qualche segnale casuale potresti dover inviare un ordine al mercato con un volume pari a 20.000 azioni per eseguire la cosiddetta "inversione". In questo caso, anche le azioni molto liquide (per esempio le azioni brasiliane di peso elevato PETR4 o VALE5) potrebbero non avere un volume di domanda o offerta pari a 20.000 azioni in un dato momento. Quindi, in questo caso, come tratteresti questo all'interno del tuo expert advisor? Siete davvero convinti che la politica FOK sarebbe l'approccio migliore in questo caso? O proveresti a considerare questo codice 10010 all'interno del tuo expert advisor?

Come detto, quando si lavora sempre con piccoli lotti, allora la politica di riempimento FOK potrebbe essere la soluzione migliore. Tuttavia, a volte le persone hanno esigenze più "avanzate"...

Ciao Malacarne,

Scusa ma questo è off-topic, dato che come Moderatori non possiamo confondere la realtà (ciò che l'utente posta realmente) e le condizioni what if.

In altre parole, se l'utente chiede qualcosa e pubblica il codice, e il codice ha la linea sottostante (come la prima e vecchia), come Moderatori la nostra mentalità deve considerare che sta usando FOK.

request.type_filling=ORDER_FILLING_FOK;

Non credi? Se no, penso di dover rivedere i miei concetti di ricerca di errori di codice e di analisi dei problemi.

In realtà, se non si utilizza FOK, come i tuoi casi BM&FBovespa brasiliano, la mia mentalità cambierà e 10010 codice di ritorno deve essere considerato, ma questo è assolutamente off-topic, e forse una discussione migliore al forum portoghese.

Comunque, grazie per la condivisione.

 
FinanceEngineer:

La spiegazione è accattivante. Ho pensato la stessa cosa, dato che la maggior parte di noi probabilmente scambia meno di 1 milione di dollari per ogni operazione. In un mercato ad alta liquidità come il Forex, l'adempimento parziale dell'ordine potrebbe essere una cosa rara. Tuttavia mai dire mai. Viviamo in un mondo probabilistico. Niente è certo. Qualche broker rigido potrebbe dividere 1 lotto in 0,5 lotti. In termini di considerazione pratica, se qualche broker non può riempire 1 lotto in qualsiasi momento, preferisco trovare un altro broker per fare trading.

Saluti.

Nel mio esempio parlavo di volumi intorno ai 200.000 USD... Quindi, per quanto ne so, molti di noi scambiano più di 200.000 USD per scambio... :-)
 
FinanceEngineer:

Proprio come la maggior parte delle persone, ho imparato la codifica MQL5 guardando il codice di altre persone. Stranamente per me, finora non ho visto nessun codice che controlla il codice 10010. Tuttavia potrebbe valere la pena di controllare. Non si sa mai.


CiaoFinanceEngineer, non vedi perché probabilmente questi casi sono relativi alla politica di riempimentoORDER_FILLING_FOK, come stai usando anche tu, quindi, a mio parere, questo non è necessario, come spiegato nei miei altri post qui.
 
figurelli:

Ciao Malacarne,

Scusa ma questo è off-topic, dato che come Moderatori non possiamo confondere la realtà (ciò che l'utente posta realmente) e le condizioni what if.

In altre parole, se l'utente chiede qualcosa e pubblica il codice, e il codice ha la riga sotto (come la prima e vecchia), come Moderatori la nostra mentalità deve considerare che sta usando FOK.

Non lo pensate anche voi? Se no, penso di dover rivedere i miei concetti di ricerca di errori nel codice e di analisi dei problemi.

In realtà, se non si utilizza FOK, come i tuoi casi BM&FBovespa brasiliano, la mia mentalità cambierà e 10010 codice di ritorno deve essere considerato, ma questo è assolutamente off-topic, e forse una discussione migliore al forum portoghese.

Comunque, grazie per aver condiviso questo.

Grazie per la tua opinione... Non è mia intenzione portare "confusione" nella mente delle persone.

Tuttavia, non credo che sia off-topic perché se non controlli il codice 10010 il tuo expert advisor potrebbe aggirare questa possibilità e inviare ordini multipli (totalmente legato all'argomento, non credi?)...

È quello che stiamo "cercando" di avvertire dagli ultimi due post su questo stesso argomento...

Motivazione: