Allarme: Terminale MT4 che duplica gli ordini inviati dagli esperti - pagina 6

 

C'è una differenza tra

bool Buy_Ticket = OrderSend(........)

e quello che state facendo voi

bool Buy_Ticket = Ordersend > 0;   //SIMPLIFIED CODE FOR EASIER READING

nel primo se un ordine fallisce verrà restituito un valore di -1, ma il bool lo interpreterà come TRUE

nel secondo, stai usando la condizione (Ordersend>0) per assegnare vero o falso al booleano.

 
GumRai:


C'è una differenza tra

e quello che state facendo voi

nel primo se un ordine fallisce verrà restituito un valore di -1, ma il bool lo interpreterà come TRUE

nel secondo, state usando la condizione (Ordersend>0) per assegnare vero o falso al booleano.



È vero? Non sono in grado di testarlo su un conto demo (Live trade) ora, ma ho fatto una rapida verifica su un backtest interrompendo appositamente OrderSend() con stoploss non valido = ask (prezzo di mercato) per un trade lungo. Il risultato è che OrderSend() restituisce "-1" come previsto e anche il mio bool var Buy_Ticket restituisce falso.


** MODIFICA

Ti è sfuggita la mia condizione "> 0" dietro OrderSend()? Il mio codice originale mostra:

bool Buy_Ticket = OrderSend(........) > 0;
 
BigFisherman:



È vero? Non sono in grado di testarlo su un conto demo (Live trade) ora, ma ho fatto qualche rapida verifica su un backtest disturbando appositamente OrderSend() con stoploss non valido = ask (prezzo di mercato) per un trade lungo. Il risultato è che OrderSend() restituisce "-1" come previsto e anche il mio bool var Buy_Ticket restituisce falso.


** MODIFICARE

Ti sei perso le mie condizioni "> 0" dietro OrderSend()? Il mio codice originale mostra:


Scusa, sì, mi è mancato il >0.

Immagino che sia un modo così strano di procedere che non l'ho notato.

 

@ BigFisherman controlla il codice qui sotto

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);

vedere qui

L'operatore di assegnazione può essere usato più volte in un'espressione. In questo caso l'elaborazione dell'espressione viene eseguita da sinistra a destra:

y=x=3;

Prima, alla variabile x sarà assegnato il valore 3, poi alla variabile y sarà assegnato il valore di x, cioè anche 3.

 
GumRai:


Scusa, sì, mi è sfuggito il >0.

Immagino che sia un modo così strano di procedere che non l'ho notato.


Nessun problema.

Sono d'accordo che non è una buona pratica codificarlo in quel modo; ho codificato quella parte nella fase iniziale del mio apprendimento del MQL, ma poiché mi sembrava corretto per tutto questo tempo, l'ho lasciato stare fino a quando non si è verificato questo problema di commercio duplicato. Ma a quanto pare, ora "sembra" che il mio codice originale anche se confuso appaia valido, allora si ritorna all'argomento originale di questo thread "Duplicate trades.."; questo potrebbe essere un serio e altamente sgradito bug "raro" in mt4, che purtroppo non sono in grado di riprodurre a causa della sua rara apparizione (1 su oltre 500+ trades).

Per le informazioni di chiunque, a causa di come ho codificato il mio EA (fare riferimento al mio 1 ° post in pg5), SL & TP è stato assegnato solo dopo aver rilevato il successo di OrderSend() (IMHO è piuttosto infallibile fino ad ora). E quello che è successo al mio precedente trade duplicato è stato che non è MAI riuscito a impostare SL & TP per qualche ragione sconosciuta; oltre a OrderSend() che restituisce "-1" ma ha aperto un trade comunque O "ha" aperto 2 trade simultanei in un OrderSend() ** solo una mia speculazione **. Fortunatamente ero davanti al mio PC quando è successo, così ho potuto chiuderlo manualmente; immaginate cosa succederebbe se fossi via per una vacanza.

 
qjol:

@ BigFisherman controlla il codice qui sotto

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);


Buy_Ticket restituisce true come previsto. Cosa stai cercando di dire?

 

Non sto cercando di dire, sto dicendo!

se lo usate in questo modo

bool Buy_Ticket = OrderSend(........) > 0;

ovviamente otterrete true se OrderSend() è stato eseguito

perché prima viene esaminato se il risultato di OrderSend è > 0

e poi è stato passato a

Buy_Ticket

ma comunque non è il modo giusto di gestirlo

 
qjol:

Non sto cercando di dire, sto dicendo!

se lo usate in questo modo

ovviamente otterrete true se OrderSend() è stato eseguito

perché prima viene esaminato se il risultato di OrderSend è > 0

e poi è stato passato a

ma comunque non è il modo giusto di gestirlo



Ora so di chi è il post da filtrare in mql4, grazie comunque per il tuo contributo.
 
y=x=3;
Ho provato a farlo, ma MetaEditor mi ferma sempre ogni volta che provo a compilare.
 
BigFisherman:


Ora so di chi è il post da filtrare in mql4,

nota: il mio nome utente in mql5 è lo stesso
Motivazione: