Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 112
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
Salve. Ho scritto nel mio EA il calcolo del lotto in questo modo:
lot=NormalizeDouble(AccountBalance()*rischio/(SL*MarketInfo(Symbol(),MODE_TICKVALUE)),2);
Lo scopo è quello di ottenere la dimensione corretta del lotto indipendentemente dalla valuta e dalla coppia del conto per il rischio e lo stop loss specificati. Ilrischio è impostato come una percentuale delle perdite quando viene attivato lo Stop Loss. Stop Loss SL in pips (dove pips è il più piccolo cambiamento possibile nel prezzo della coppia). Ho intenzione di avviare questo EA su un conto reale. Ma ho i miei dubbi. Se qualcuno dei programmatori più esperti potesse dirmi quali errori possono verificarsi, gliene sarei molto grato.Primo tester di strategia. Poi un conto demo. E solo allora un vero e proprio. Per controllare la formula, scrivete uno script. O semplicemente calcolarlo su un pezzo di carta. Ho preso balance=100, risk=0.1 SL=100, Tick=0.00001 Lot=100*0.1 / (100*0.00001) = 10 / 0.001 = 10000 lot più del balance? Dobbiamo considerare la leva?
MarketInfo(Symbol(),MODE_TICKVALUE)) non restituisce la dimensione minima del tick. È scritto nell'aiuto:
Dimensione del cambiamento minimo del prezzo dello strumento nella valuta di deposito.
Ma in realtà, restituisce il valore del cambiamento minimo del prezzo del simbolo nella valuta di deposito di 1 lotto del contratto.
Nel vostro esempio,MarketInfo(Symbol(),MODE_TICKVALUE)) restituirà 1. E quindi tutto è corretto. L'ho provato su conti in dollari e rubli reali e funziona. Ecco lo script che ho usato per controllarlo:
#property copyright "Copyright 2016, MetaQuotes Software Corp.
#proprietà link "https://www.mql5.com"
#proprietà versione "1.00"
#proprietà rigorosa
#proprietà show_inputs
extern double risk=0,10;
extern int sl=1000;
//+------------------------------------------------------------------+
//| funzione di avvio del programma script |
//+------------------------------------------------------------------+
void OnStart()
{
Alert(NormalizeDouble(AccountBalance()*rischio/(sl*MarketInfo(Symbol(),MODE_TICKVALUE),2))
}
//+------------------------------------------------------------------+
Hai ragione. Il controllo con uno script è più veloce e affidabile
Dobbiamo anche far dipendere la precisione della funzione NormaliseDouble dal lotto minimo consentito. Se si passa un lotto alla funzione OrderSend, per esempio, 0,11, e lo strumento è scambiato solo con lotti multipli di 0,1, ci sarà un errore.
Non riesco a capire perché i trade aperti non vengono cancellati tutti in una volta, cioè l'EA ne cancella alcuni, ma l'errore orderdelete 4108, ordine a mercato non può essere cancellato più volte, e solo allora li cancella.
Non riesco a capire perché i trade aperti non vengono cancellati tutti in una volta, cioè l'EA ne cancella alcuni, ma l'errore orderdelete 4108, ordine a mercato non può essere cancellato più volte, e solo allora li cancella.
Questa pagina spiega come cancellare. Hai 2 errori.
All'avvio c'è un errore costante array out of range in 'expert1.0.mq4' (69,25)... Ho capito che si tratta dell'array. Non so cosa fare.
Ho bisogno di vedere il codice, o un pezzo di esso, che gestisce questo array.
Telepati, riposatevi oggi.
Dovete guardare il codice o un pezzo di codice che gestisce l'array.
Telepati, riposatevi oggi.
}
Ecco la funzione.
Ho solo pensato che il problema non fosse nel codice, dato che non ci sono errori in modalità standard.