![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
Ciao a tutti
Anche se l'aggiunta di RefreshRates() sembra fare la differenza, sto ancora avendo lo stesso problema: a volte apre entrambi gli ordini in sospeso, a volte solo uno dei due e a volte nessuno dei due. Ricevo ancora l'errore 130 quando non apre un ordine o entrambi, ma nessun errore quando entrambi vengono aperti. Ho anche notato che su quelle coppie in cui i miei input sono inferiori a MODE_STOPLEVEL, non apre mai un ordine e ho sempre l'errore 130, anche se il programma regola i miei input come richiesto. Sto stampando i valori e sono regolati come previsto. Quindi sto cercando di capire perché il mio OrderSend non funziona veramente.
Su una coppia come EURUSD dove lo stoplevel è 5, di solito invia entrambi gli ordini, ma non sempre, mentre su una coppia come EURAUD dove lo stoplevel è 10, non invia mai un ordine
Ho anche provato così, ma non fa alcuna differenza:
E anche se faccio così non fa differenza:
Grazie a tutti per l'aiuto, finalmente sono riuscito a farlo funzionare, l'unico modo che avevo per farlo funzionare in modo coerente era cambiarlo in questo modo:
Ho anche capito che il livello di Pipmove prima che l'ordine pendente venga attivato deve anche essere più alto di stoplevel. Così tutto sembra funzionare ora... Grazie
Grazie a tutti per l'aiuto, finalmente sono riuscito a farlo funzionare, l'unico modo in cui sono riuscito a farlo funzionare in modo coerente è stato cambiarlo in questo modo:
Ho anche capito che il livello di Pipmove prima che l'ordine pendente venga attivato deve anche essere più alto di stoplevel. Così tutto sembra funzionare ora... Grazie
La risposta semplice è di non cercare di aprire ordini pendenti così vicini al prezzo corrente. 5 punti sono di solito mezzo pip
Grazie per la risposta. Il mio calcolo è effettivamente in pip, quindi gli ordini pendenti sono almeno 50 punti (5 pip di distanza dal prezzo corrente), tuttavia, sembra funzionare se lo sposto almeno 1 pip più lontano dallo stoplevel, che è di 50 punti sulla EURUSD. Sembra che ora apra entrambi i trade tranne il primo dopo averlo trascinato sul grafico. Ma mi va bene così per ora. Il mio codice ora è così:
Mi sono imbattuto in un problema separato ma simile: una volta che uno degli ordini pendenti viene attivato, può succedere una delle due cose: o si attiva il TrailingStop e a quel punto l'altro ordine pendente viene cancellato, o se quel trade mi va contro dovrebbe aprire una copertura nella direzione opposta. A seconda di come scrivo il codice, si aprirà più di una copertura o nessuna copertura. Ho provato di tutto, comprese le due seguenti:
Oppure:
Dovrei usare un ciclo for separato per questo? Grazie
Ciao a tutti
Sono state settimane di tentativi e non ho ancora fatto alcun progresso. Tutto funziona ora, tranne che in certe condizioni l'EA apre più di un trade di copertura sul trade originale. Lo SL sul trade originale è di 11 pip e lo SL sul trade di copertura è di 9 pip. A volte l'hedge trade viene fermato a 9 pip mentre il trade originale è ancora aperto, quindi aprirà un secondo hedge trade e anche un terzo e un quarto mentre il trade originale è ancora aperto. Voglio semplicemente limitare la quantità di hedge trade a uno e se viene fermato, aspettare e vedere cosa succede con il trade originale.
Questo è il tipo di risultati che ottengo:
576 2015.01.15 11:39 buy stop 29 0.48 1.16786 1.16616 0.00000 0.00 4834.24
577 2015.01.15 11:39 vendere stop 30 0.48 1.16642 1.16812 0.00000 0.00 4834.24
578 2015.01.15 11:39 vendere 30 0.48 1.16642 1.16812 0.00000 0.00 4834.24
579 2015.01.15 11:39 cancellare 29 0.48 1.16786 1.16616 0.00000 0.00 4834.24
580 2015.01.15 11:42 comprare 31 1.44 1.16743 1.16653 0.00000 0.00 4834.24
581 2015.01.15 11:42 s/l 31 1.44 1.16653 1.16653 0.00000 -129.60 4704.64
582 2015.01.15 11:44 buy 32 1.44 1.16742 1.16652 0.00000 0.00 4704.64
583 2015.01.15 11:44 s/l 30 0.48 1.16812 1.16812 0.00000 -81.60 4623.04
584 2015.01.15 11:48 modifica 32 1.44 1.16742 1.16893 0.00000 0.00 4623.04
Gli ordini buystop e sellstop (29 e 30) vengono aperti come dovrebbero. Il prezzo scende e l'ordine di vendita (30) viene riempito mentre il buystop (29) viene cancellato. Il prezzo sale di nuovo e l'ordine hedge (martingala) (31) viene attivato (3*lotsize). Il prezzo scende di nuovo e l'ordine di copertura (31) viene fermato, ma poiché 30 è ancora aperto, si attiva un altro ordine di copertura (32), ecc. Come posso evitare che l'ordine 32 venga attivato? Grazie
Ciao a tutti, è più di un mese che cerco di risolvere questo problema e comincio a pensare che sia programmaticamente impossibile da codificare, quindi se qualcuno mi conferma questo, posso metterlo a riposo e andare avanti. Non è possibile impostare un livello profondo per il numero di ordini di copertura (martingala) come spiegato nel post sopra? Grazie.
Il meglio che ho finora è:
Ci sono diversi modi in cui questo può essere ottenuto.
Quando la copertura è aperta, create una variabile globale del terminale del cliente.
Dategli un nome che includa il numero del ticket della compravendita principale.
Dategli un valore che agisca come una bandiera che un trade di copertura è stato aperto per quel numero di ticket, o un conteggio della copertura se necessario.
Controllare il GV prima di aprire una copertura.
L'hedge e l'operazione principale hanno lotti di dimensioni diverse.
Prima di aprire una copertura, controlla gli ordini aperti e la cronologia per vedere se è stato aperto un ordine opposto con la dimensione del lotto pertinente con un OrderOpenTime() successivo all'orario di apertura dell'operazione principale.
Ci sono diversi modi in cui questo può essere ottenuto.
Quando la copertura è aperta, create una variabile globale del terminale del cliente.
Dategli un nome che includa il numero del ticket della compravendita principale.
Dategli un valore che agisca come una bandiera che un'operazione di copertura è stata aperta per quel numero di biglietto, o un conteggio della copertura se necessario.
Controllare il GV prima di aprire una copertura.
L'hedge e l'operazione principale hanno lotti di dimensioni diverse.
Prima di aprire una copertura, controlla gli ordini aperti e la cronologia per vedere se è stato aperto un ordine opposto con la dimensione del lotto pertinente con un OrderOpenTime() successivo al tempo di apertura dell'operazione principale.
Così ho cercato di ottenere questo attraverso una Variabile Globale, ma da quando ho aggiunto questo codice, non sta aprendo affatto un trade di copertura. Penso che il problema sia che l'EA sta facendo un GlobalVariableCheck, ma dato che non ne è stato ancora creato nessuno, non continua. Tuttavia, seleziona e stampa il numero di biglietto corretto. Forse sto sbagliando. Ecco il codice rilevante: