Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1689
![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
Se non ti piace "-1", puoi fare così.
No, non puoi - il programma si blocca se accedi al tuo array in questo modo.
Nel migliore dei casi, se si accede agli array interni, si perde il dato di cui si ha bisogno, o semplicemente non lo si raggiunge nel ciclo.
Fondamentalmente è semplice, il tuo unico riassume tutti gli ordini spaiati tra diversi maghi...
Per esempio ci sono 3 ordini
La prima iterazione di magic=1 unico=0, alla fine dell'iterazione unico sarà=2.
La seconda iterazione magik=2unico=2, alla fine dell'iterazioneunico sarà=3
Poiché 3>=numero di tutti gli ordini, il ciclo while si interrompe... E la magia =3 non è mai stata controllata... Quindi magia =2 di nuovo e così via con tutti...
Il primo ordine è dato magico =1 per impostazione predefinita. Poi il ciclo entra in azione:
Inizio dell'iterazione magic = 1 unique = 0, alla fine (quando c'è già un ordine con magic = 1) magic = 1 è ancora 1 e unique = 0
Seconda iterazione magic = 2 unique = 0, alla fine magic = 2 e unique = 1 (nessuna corrispondenza) e il retorn viene dato al 2° ordine magic = 2.
Il terzo dovrebbe essere lo stesso...
Volevo stampare l'intero processo, ma qualcosa è andato storto:
Il primo ordine è dato magic = 1 per impostazione predefinita. Poi viene avviato un ciclo:
Inizio dell'iterazione magic = 1 unique = 0, alla fine (quando c'è già un ordine con magic = 1 ) magic è ancora 1 e unique = 0
Seconda iterazione magic = 2 unique = 0, alla fine, magic = 2 e unique = 1 (nessuna corrispondenza) e il retorn viene assegnato al 2° ordine magic = 2.
Il terzo dovrebbe essere lo stesso...
Volevo stampare l'intero processo, ma qualcosa è andato storto:
Puntate apiù- TUTTI i linguaggi di programmazione.
È semplice: nei linguaggi di programmazione, il conteggio inizia da zero. La prima cella di una matrice avrà un indice di 0. Pertanto, dovete fare un ciclo inverso PRIMA di zero INCLUDENDOLO. Cioè >=0
OrdersTotal() produce, per esempio, 10. E iniziate un ciclo da 10, mentre l'ultimo indice dell'array è 9 (ricordate, stiamo partendo da zero?). E cosa succede quando si accede a una cella di un array inesistente? Proprio così - il programma andrà in crash per un errore critico, perché siete andati in un'area di memoria non allocata, oltre i limiti dell'array.
Queste sono stampelle solide di sicuro. Leggete, imparate e tutto verrà da voi.
Ci sono tonnellate di corsi gratuiti e buoni su C/C++.
Mql è vicino a loro e si può imparare liberamente. Fortunatamente, la conoscenza profonda non è richiesta. Ma almeno la sintassi del linguaggio e le basi fondamentali degli algoritmi.
Altrimenti otteniamo delle sciocchezze nell'argomento, invece di consultazioni sulla piattaforma e sugli algoritmi, dialoghi a livello di scuole elementari - dove mettere; cos'è un loop e perché gli indici sono 0.
Per esempio, c'è un sito intuit.ru - ci sono corsi su C e algoritmi, prenditi il tuo tempo, un paio di settimane al massimo. Allo stesso tempo puoi ottenere un giornale :-)
Altrimenti otteniamo delle assurdità nell'argomento, invece di consultazioni sulla piattaforma e sugli algoritmi, dialoghi a livello di scuole elementari - dove mettere; cos'è un loop e perché gli indici sono 0.
Per esempio, c'è un sito intuit.ru - ci sono corsi su C e algoritmi, prenditi il tuo tempo, un paio di settimane al massimo. Si può ottenere un giornale allo stesso tempo:-)
Come questo?
OrdersTotal() dà per esempio 10. E si inizia il ciclo da 10. Ma l'ultimo indice dell'array è 9 (ricordate, stiamo contando da zero?). E cosa succede quando si accede a una cella di un array inesistente? Proprio così - il programma andrà in crash per un errore critico, perché siete andati in un'area di memoria non allocata, oltre i limiti dell'array.
Mi correggo... Non ci sarà un errore critico, solo la booleana OrderSelect restituirà false... e questo è tutto... Ma naturalmente, è meglio evitare... Perché se si usano caratteristiche di codice errate, è difficile prevedere i possibili errori...
Il primo ordine è dato magic = 1 per impostazione predefinita. Poi viene avviato un ciclo:
Inizio dell'iterazione magic = 1 unique = 0, alla fine (quando c'è già un ordine con magic = 1 ) magic = 1 e unique = 0
Seconda iterazione magic = 2 unique = 0, alla fine magic = 2 e unique = 1 (nessuna corrispondenza) e il retorn viene assegnato al 2° ordine magic = 2.
Il terzo dovrebbe essere lo stesso...
Vedo solo che il riempimento dell'unico va molto veloce e raggiunge il limite, e la magia cresce appena... In generale, era sbagliato usare la stessa variabile sia per il controllo del loop che per la logica all'interno del loop dove questa variabile si gonfia...
Stampare per trovare una soluzione in questo contesto, ma suggerirei solo di riformulare il problema... Per esempio trovare il magik massimo in ordini dal ciclo e restituirlo con +1, questa sarebbe la giusta soluzione semplice.
Puoi farlo in questo modo, il codice è chiamato come necessario, quindi il suo peso non è un problema
Per il test ho usato Buy/Sell
Forum sul trading, sistemi di trading automatico e test di strategia
Tutte le domande dei neofiti su MQL4 e MQL5, consigli e discussioni su algoritmi e codici
Vitaly Muzichenko, 2021.10.19 23:08
Lo correggerò un po'. Non ci sarà nessun errore critico, solo la booleana OrderSelect restituirà false ... e questo è tutto... Ma naturalmente è meglio evitare... Perché se le caratteristiche del codice non sono usate correttamente, è difficile prevedere le possibili insidie...
Vedo solo che l'unico si riempie a un ritmo molto veloce e raggiunge il suo limite, mentre la magia cresce a malapena... In generale era sbagliato usare la stessa variabile sia per il controllo del loop che per la logica all'interno del loop, dove questa variabile si gonfia...
Stampare per trovare una soluzione in questo contesto, ma suggerirei solo di riformulare il problema... Per esempio trovare il magik massimo in ordini dal ciclo e restituirlo con +1, questa sarebbe la giusta soluzione semplice.
Puoi farlo in questo modo, il codice è chiamato come necessario, quindi il suo peso non è un problema
Per il test ho usato Buy/Sell