![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ma poi OrderModify fallisce.
Il codice qui sotto viene eseguito dopo il codice sopra dell'ultimo post.
Il Log ist:
#ESZ1,M5: Posizione di apertura
#ESZ1,M5: tickvalue: 12.50000000
#ESZ1,M5: dimensione pos: 1.00000000
#ESZ1,M5: Ask/Bid 1242.00000000/1241.75000000
#ESZ1,M5: Spread 0.25000000
#ESZ1,M5: aprire #13679252 comprare 1.00 #ESZ1 a 1242.00 ok
#ESZ1,M5: ordine 13679252 aperto con successo
#ESZ1,M5: SL: 1241.25000000
#ESZ1,M5: TP: 1242.25000000
#ESZ1,M5: errore=130
Quindi anche la prima apertura e poi l'impostazione dello stoploss non sembra funzionare :-/
Lo spread è 0,25
#ESZ1,M5: Spread 0.25000000
OK, si apre un BUY a . . 1242.00 (Ask)
#ESZ1,M5: aperto #13679252 compra 1.00 #ESZ1 a 1242.00 ok
#ESZ1,M5: ordine 13679252 aperto con successo
Poi provi a modificare con un TP al prezzo Bid + 2 * Spread e SL al prezzo Bid - 2 * Spread
#ESZ1,M5: SL: 1241.25000000
#ESZ1,M5: TP: 1242.25000000
Se il tuo FreezeLevel è 0.50 allora questo è il tuo problema . . qual è il tuo FreezeLevel ?
stesso problema. L'ordine si apre bene con stoploss = 0 e takeprofit = 0.
Ma poi OrderModify fallisce.
Non regolando per broker a 4/5 cifre. Non aprendo prima e poi impostando gli stop.
Come già risposto in precedenza
Sì, probabilmente stai facendo trading con un broker ECN, devi aprire ordini con zero stop e poi modificare l'ordine dopo che è stato aperto, quindi c'è un problema con 50 pips SL e TP, quindi fai come ha detto Raptor, controlla anche il freezelevel e lo stoplevel, per sicurezza
Controlla anche il tuo codice OrderModify() .... forse funziona così, ma credo che dovresti selezionare l'ordine usando OrderSelect() prima di poter fare OrderOpenPrice()
Ahimè il #130 mi perseguita ancora di notte ;)
Ecco il mio prossimo tentativo:
Come potete vedere, ho semplificato l'esempio non usando il takeprofit. L'errore si verifica sicuramente a causa dello stoploss, quindi non abbiamo bisogno del takeprofit.
Prima apro l'ordine con 0 stoploss (e takeprofit) e poi provo a impostare lo stoploss usando OrderModify.
Prima di questo controllo Mode_Stoplevel e Mode_Freezelevel e regolo lo stoploss, se necessario. (Un aggiustamento avviene qui sotto nel log, perché lo stoploss è inizialmente 50, ma Mode_Stoplevel è 75, quindi ho impostato lo stoploss a Mode_Stoplevel + 1, quindi 76)
RaptorUK e SDC:
MarketInfo(MODE_FREEZELEVEL) restituisce 0. Non credo che Freezelevel sia il problema.
Ho incluso l'output nel file di log.
SDC:
Ho anche inserito un OrderSelect, prima di chiamare OrderOpenPrice solo per essere sicuro. Nel log si può vedere che OrderSelect ha funzionato, altrimenti il codice non sarebbe andato avanti (exit -1).
WHRoeder:
Ho seguito il semplice esempio di SDC. Ma ora l'ho esteso usando la regolazione pips 4/5 Digit quando si imposta lo stoploss, come potete vedere sopra. Puoi anche vedere che l'ordine viene prima aperto con stoploss e takeprofit impostati a zero e poi lo stoploss viene impostato con OrderModify. Come potete vedere nel log qui sotto con S/L e T/P impostati a zero, l'ordine si apre con successo, ma non sono ancora in grado di impostare il S/L nel passo successivo con OrderModify.
Ecco il log completo:
Vi sono davvero grato per il vostro continuo aiuto e penso che stiamo restringendo il problema :)
Cos'altro potrebbe essere il problema? C'è qualcos'altro che potrei provare?
shinobi
Lo spread è 0,25
#ESZ1,M5: Spread 0.25000000
OK, si apre un BUY a . . 1242.00 (Ask)
#ESZ1,M5: aperto #13679252 compra 1.00 #ESZ1 a 1242.00 ok
#ESZ1,M5: ordine 13679252 aperto con successo
Poi provi a modificare con un TP al prezzo Bid + 2 * Spread e SL al prezzo Bid - 2 * Spread
Il tuo STOP_LEVEL non è 3 * Spread? Il tuo Stop è troppo vicino...
Sì, è per questo che controllo lo stoplevel qui (dal codice sopra):
Quindi nell'ultimo esempio lo stoploss è stato impostato a 76, che è 3*Spread +1.
Dovrebbe essere abbastanza lontano, giusto?
Ciao Raptor,
Sì, è per questo che controllo lo stoplevel qui (dal codice sopra):
Quindi nell'ultimo esempio lo stoploss è stato impostato a 76, che è 3*Spread +1.
Dovrebbe essere abbastanza lontano, giusto?
Ecco cosa ho fatto.
Per prima cosa ho scritto una funzione personalizzata per arrotondare i doppi al doppio più vicino:
Fa quello che vi aspettate. Se la chiamate con DoubleRound(1237.687360000), restituisce 1237.50.
Poi l'ho usato sul mio S/L appena prima di chiamare OrderModify. E ho usato MODE_TICKVALUE, che è 0,25 per #ESZ1.
Quindi:
Nel log si può vedere che l'arrotondamento ha funzionato bene. Tuttavia lo stoploss è stato respinto :/
Non riesco a immaginare quale altro problema possa essere! Questo #130 è davvero persistente!
Hai aperto una vendita
#ESZ1,M5: aprire #13708089 vendere 1.00 #ESZ1 a 1239.75 ok
e hai cercato di impostare uno SL al di sotto di esso . . .
#ESZ1,M5: SL: 1237.50000000
#ESZ1,M5: errore=130