![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
Questo viene stampato nel Journal durante il mio ciclo for, dove, nel caso di un ordine di acquisto pendente, se il 60 EMA è > dell'OrderStopLoss, chiuderà l'ordine pendente, ne aprirà uno nuovo con un nuovo SL (che è dietro il 60EMA), regolerà il take profit per ottenere la ricompensa 1:2, e cambierà i lotti relativi allo stop in punti e il mio profilo di rischio (diciamo 2%).
Quindi, quando tutto questo viene fatto, la variabile personalizzata "Current Lots" che è "LotSize" all'interno di OrderSend funziona, sta inviando una dimensione di lotto che non è corretta per il server a ricevere? "0.18215"? Potrebbe essere un problema, nonostante gli ordini vengano effettivamente inviati comunque - questa domanda è più in relazione a "potrebbe essere questa la ragione per cui non posso chiamare "OrderType==OP_BUY"?
Dovresti risolverlo, convalidare la dimensione del lotto nello stesso modo che hai già . . . potresti anche codificare una funzione separata per farlo sulla base del codice che hai già . . . per esempio:
Invece di usare LotSize nel tuo OrderSend() useresti ValidateLots(LotSize)
Dubito che questo sia la causa del tuo problema però . . .
Argh! Così frustrante lol - bloccato su questo da troppo tempo ormai :(
Non riesco a capire perché questo sia un problema e non posso selezionare un "OP_BUY"... So che probabilmente ho esaurito questo argomento, ma qualsiasi ultima pugnalata nel buio sarebbe davvero apprezzata - grazie anche per l'aiuto!
Hmm - sì, ci ho appena giocato. Sembra che l'ordine venga semplicemente inviato come il server permette solo 0.00 (2 cifre decimali). Quindi le cifre rimanenti sono quasi irrilevanti.
Argh! Così frustrante lol - bloccato su questo da troppo tempo ormai :(
Non riesco a capire perché questo sia un problema e non posso selezionare un "OP_BUY"... So che probabilmente ho esaurito questo argomento, ma qualsiasi ultima pugnalata nel buio sarebbe davvero apprezzata - grazie anche per l'aiuto!
Penso che tu debba mostrare tutto il tuo codice . . .
Vedo alcuni problemi qui:
-http://pastebin.com/eaY1wKbN
Scusa per la sintassi - un po' più difficile da vedere tutto, ma non hanno MQL4? Quindi mettilo sotto C++
Tutto il codice non ci sta qui? L'ho messo su pastebin però?
-http://pastebin.com/eaY1wKbN
Scusa per la sintassi - un po' più difficile da vedere tutto, ma non hanno MQL4? Quindi mettilo sotto C++
Nessun problema . . .
Quando fai questo...
Il tuo OrderSelect() fallirà se il tuo OrderTicket() fallisce, a meno che tu non abbia già un ordine selezionato. Hai davvero bisogno di questo codice? In seguito hai un ciclo in cui selezioni gli ordini e controlli il loro simbolo, il loro Magic Number e il loro tipo...
Anche questo è da sistemare...
. . . aggiungi delle parentesi graffe. . .
Ok - ho fatto più stampe per avere un po' di chiarezza su ciò che viene fatto e su quale punto. L'ho incollato qui sotto.
La linea dove dice "Order Select for closing:-..." è quello che viene selezionato al punto "Close OP_BUY Half Lots @ 1:1 Function" che hai chiesto sopra. Sembra che il numero di ticket sia diverso in questo punto di selezione? Ho eliminato la parte "...&& OrderType()==OP_BUY", poiché sembra stampare il resto quando questa parte non è nella dichiarazione "if"... Questo dà un po' più di chiarezza?
"Primo ordine di acquisto piazzato:-" è la prima funzione OrderSend che passa all'inizio
"Checking Buy Order:-" è quella all'interno del ciclo for che cancella e riapre l'ordine in sospeso se la MA è > l'OrderStopLoss().
"NUOVO ORDINE DI ACQUISTO:-" è il nuovo ordine che viene inserito all'interno del ciclo for.
"Order Select for closing:-..." - come già detto sopra, questa è la parte che viene selezionata per chiudere metà dei lotti.
Scusa se ti ho confuso, dato che ho appena aggiunto queste parti - non le vedrai nel link pastebin di cui sopra... solo semplici funzioni di stampa :)
Ok - ho fatto più stampe per avere un po' di chiarezza su ciò che viene fatto e su quale punto. L'ho incollato qui sotto.
La linea dove dice "Order Select for closing:-..." è quello che viene selezionato al punto "Close OP_BUY Half Lots @ 1:1 Function" che hai chiesto sopra. Sembra che il numero di ticket sia diverso in questo punto di selezione? Ho eliminato la parte "...&& OrderType()==OP_BUY", poiché sembra stampare il resto quando questa parte non è nella dichiarazione "if"... Questo dà un po' più di chiarezza?
"Primo ordine di acquisto piazzato:-" è la prima funzione OrderSend che passa all'inizio
"Checking Buy Order:-" è quella all'interno del ciclo for che cancella e riapre l'ordine in sospeso se la MA è > l'OrderStopLoss().
"NUOVO ORDINE DI ACQUISTO:-" è il nuovo ordine che viene inserito all'interno del ciclo for.
"Order Select for closing:-..." - come già detto sopra, questa è la parte che viene selezionata per chiudere metà dei lotti.
Scusa se ti ho confuso, dato che ho appena aggiunto queste parti - non le vedrai nel link pastebin di cui sopra... solo semplici funzioni di stampa :)
Prova l'allegato . . . è la mia migliore ipotesi su quello che stai cercando di fare . . .
Ah, fantastico - grazie. È un grande passo nella giusta direzione. Penso che siccome è all'interno di un ciclo for, vuole chiudere metà e metà e metà @ il prezzo... Invece di farlo solo una volta? Non solo, ma sembra che non chiuda a metà non appena il prezzo >= al prezzo di uscita che voglio, invece va oltre, e poi quando il prezzo oscilla di nuovo più in basso nel prezzo di uscita che voglio, si chiude allora - strano... Apprezzo la vostra pazienza nell'aiutarmi! Molto grato per il vostro tempo!
AGGIORNAMENTO: Inoltre, ho appena scoperto che se cambio le proprietà dell'esperto (extern int) prima di lanciare strategy tester, allora la metà di chiusura non funziona affatto - le cose che hanno effetto sulla metà di chiusura sono "MA_PadAmount" questo è quanti punti voglio aggiungere come pad allo stop loss che segue in pips, e "OrderPrice_PadAmount" che mi permette di specificare quanti pips posso mettere come pad sul prezzo di entrata degli ordini...
Ah, fantastico - grazie. È un grande passo nella giusta direzione. Penso che siccome è all'interno di un ciclo for, vuole chiudere metà e metà e metà @ il prezzo... Invece di farlo solo una volta? Non solo, ma sembra che non chiuda a metà non appena il prezzo >= al prezzo di uscita che voglio, invece va oltre, e poi quando il prezzo oscilla di nuovo più in basso nel prezzo di uscita che voglio, si chiude allora - strano... Apprezzo la vostra pazienza nell'aiutarmi! Molto grato per il vostro tempo!
Non sono del tutto sicuro di come scriverlo, ma è più o meno sulle linee giuste?