Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 659
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
Ho anche trovato un grave inconveniente, troppe chiamate a CopyClose()
Potete dirmi come copiare le quotazioni da un array di coppie di valute in un ciclo?
Sembrerebbe un doppio array, ecco perché MQL non lo supporta, come %.
MQL4 sembra funzionare con array dinamici bidimensionali. Potete cambiare la prima dimensione con ArayResize(), e passare la seconda aCopyClose()
O una soluzione universale da parte degli sviluppatori, perché gli array dinamici bidimensionali non funzionano in MQL5, avvolgere un array unidimensionale in una struttura e creare un array di tali strutture.... Se ci prendi la mano, considera che hai quasi creato una classe, ed è più ottimale - una classe con metodi che caricano i dati e li memorizzano nelle proprietà della classe (campi)MQL4 sembra funzionare con array dinamici bidimensionali, usate ArayResize() per cambiare la prima dimensione eCopyClose() per cambiare la seconda.
o una soluzione universale da parte degli sviluppatori, perché gli array dinamici bidimensionali non funzionano in MQL5, avvolgere un array unidimensionale in una struttura e creare un array di tali strutture.... Se ci prendi la mano, considera che hai quasi creato una classe, ed è più ottimale - la classe con il metodo che carica i dati e li memorizza nelle proprietà della classe (campi)Grazie e proverò
Un'altra domanda sull'indicatore, non so cos'altro fare qui
Ho bisogno di stampare la differenza tra la chiusura delle coppie inserite e la media mobile delle stesse.
Non so cos'altro fare.
Gli ordini dovrebbero essere enumerati in un ciclo, non ad ogni tick... Per essere più precisi, è arrivato un tick e tutti i vostri ordini nel ciclo sono stati contati: for(j=0;j<OrderTotal;j++)
OrdersTotal() mostra quanti ordini sono aperti (inclusi gli ordini pendenti, inclusi gli ordini su tutti i simboli... in totale... Ecco quanti ordini sono aperti nel terminale - ecco quanti )))).
La numerazione degli ordini è come negli array, da 0 a OrdersTotal()-1 - questo è l'ultimo ordine, e probabilmente hai un numero di biglietto inesistente [OrdersTotal()] o qualche altra informazione nel giornale su ogni tick, che è difficile da indovinare.
Sì, lo voglio - e voglio che passi attraverso tutti gli ordini. La funzione era un po' diversa all'inizio, ma l'ho semplificata il più possibile nella speranza di trovare la causa e sistemarla. Il ritracciamento consecutivo completo avviene solo quando i tick sono rari o dopo che rimuovo l'EA dal grafico e non arrivano nuovi tick.
Ho sempre pensato che se l'EA è entrato nel corpo di una funzione, non dovrebbe reagire ad altri tick finché non esce dal ciclo, ma sembra che non sia così. Come evitare questa situazione?
int test()
{
int totale;
totale = OrdiniTotali();
log("totale = " + totale +"; ");
per (int j = 0; j < totale; j++)
{
log("j = " + j +"; ");
}
ritorno(0);
}
Perché abbiamo bisogno di informazioni su tutti gli ordini ogni tick? Non sarebbe meglio introdurre delle restrizioni nella visualizzazione dell'ordine, per esempio ogni nuovo minuto, cinque minuti, ..., ora?
Il problema non è nemmeno che ho bisogno di informazioni per ogni tick, ma che, se ho capito bene, il ciclo non ha il tempo di finire prima che arrivi un nuovo tick e il nuovo tick in qualche modo rompe il conto. Ecco un altro screenshot, in modo da non dover cercare il precedente. Mostra che l'EA ha contato fino a 52 e poi è saltato a 93. Ho avuto difficoltà a credere che questo sia dovuto ai nuovi tick, ma non riesco a trovare nessun'altra ragione, perché con tick rari il conto finisce bene, così come l'ultimo ciclo dopo che l'EA è stato rimosso dal grafico.
Ho già semplificato il codice il più possibile:
int test()
{
int totale;
totale = OrdiniTotali();
log("totale = " + totale +"; ");
per (int j = 0; j < totale; j++)
{
log("j = " + j +"; ");
}
ritorno(0);
}
Come fa a saperlo? Non è così.
Finché tutti i calcoli iniziati con l'arrivo del tick non sono completati, tutti i tick successivi vengono saltati.
Come ho scritto poco sopra, ho la stessa situazione, solo che l'ho già semplificata fino a un certo punto e sono arrivato alla conclusione che non solo non posso fare normalmente alcun calcolo, ma solo passare attraverso gli ordini uno per uno e stampare i loro numeri nel registro.
Anch'io ho sempre creduto che "Finché tutti i calcoli iniziati con l'arrivo di un tick sono stati completati, tutti i tick successivi sono saltati". Vorrei che fosse così, ma non riesco a trovare nessun'altra ragione, a parte le nuove zecche, ancora.
Nessuno lo dirà senza il codice.
Ecco un codice estremamente semplificato, che ha lo stesso problema - i nuovi tic gettano via l'uscita successiva dei numeri d'ordine.
int test()
{
int total;
total = OrdersTotal();
log("total = " + total +"; ");
for (int j = 0; j < totale; j++)
{
log("j = " + j +"; ");
}
return(0);
}
Ecco un codice estremamente semplificato che ha lo stesso problema - i nuovi tic gettano via l'uscita sequenziale dei numeri d'ordine.
int test()
{
int totale;
totale = OrdiniTotali();
log("totale = " + totale +"; ");
per (int j = 0; j < totale; j++)
{
log("j = " + j +"; ");
}
ritorno(0);
}
Un'altra domanda sull'indicatore, non so cos'altro fare qui
Ho bisogno di stampare la differenza tra la chiusura delle coppie inserite e la media mobile delle stesse.
Alla fine mostra solo la differenza senza MA, qual è il problema?
Questo è forte!
Romano!
Io, per esempio, sono un trader di successo con 20 anni di esperienza.
Non capisco perché hai bisogno di "la differenza tra le chiusure delle coppie inserite euna media mobile di esse".
Inoltre, sapete come costruire una media mobile di queste differenze? - Fantastico!
Puoi semplicemente disegnare la media mobile delle quotazioni? - Anche no?
Allora qual è il problema?
Ecco un codice estremamente semplificato che ha lo stesso problema - i nuovi ticchettii cancellano l'uscita sequenziale dei numeri d'ordine.
int test()
{
int totale;
totale = OrdiniTotali();
log("totale = " + totale +"; ");
per (int j = 0; j < totale; j++)
{
log("j = " + j +"; ");
}
ritorno(0);
}
questo codice funziona, fatelo per analogia: