Errori, bug, domande - pagina 2932
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
Errore nella descrizione:
Struttura di una transazione commerciale (MqlTradeTransaction)
Questo campo si chiama: time_type
Sto cercando di permettere all'utente di selezionare entrambi i timeframe e il loro numero dal menu della finestra di configurazione dell'indicatore:
e voglio che i periodi selezionati vadano direttamente in PArray. Ma dall'esempio precedente risulta che assegno all'array i valori preimpostati nel programma e non i valori inseriti da un utente. Inoltre, il compilatore genera degli avvertimenti:
Quando provo a sostituire l'ultima riga con
il compilatore genera un errore in tutto e per tutto:
Inoltre, NO_PERIOD=0 significaPERIOD_CURRENT, e non ne ho bisogno, ho bisogno di qualcosa come false o EMPTY_VALUE, ma non si adattano affatto.
Come posso rimediare?
Ho quasi risolto il problema.
Ditemi, quali metodi di lotta esistono per catturare e correggere l'errore "array out of range"?
ArrayResize() fare prima di scrivere un elemento dell'array, contare e inserire lì il numero di elementi che dovrebbero essere nell'array, o usare un array dinamico che diventa esso stesso grasso. Stai solo andando fuori dall'array, per esempio specifichi una dimensione di 100 elementi, ma dato che il primo elemento è #0 alcune persone si confondono, se scrivi i numeri in una riga ti andranno bene 0-99. Non sono un programmatore professionista semmai (ma posso), la prima cosa che mi è venuta in mente, funziona)))
Fate ArrayResize() prima di scrivere un elemento dell'array, contate e inserite lì il numero di elementi che dovrebbero essere nell'array, o usate un array dinamico che cresce da solo.
In realtà, è comunque dinamico. Dall'aiuto:"La funzione può essere applicata solo agli array dinamici. Notate che gli array dinamici assegnati come buffer di indicatori dalla funzione SetIndexBuffer() non dovrebbero essere ridimensionati. Per i buffer indicatori, tutte le operazioni di ridimensionamento sono eseguite dal sottosistema di esecuzione del terminale. "Ma non è un tampone indicatore, quindi bisogna pensare con le mani e la testa...
In realtà, è già dinamico. Dall'aiuto:"La funzione può essere applicata solo agli array dinamici. Dovreste tenere a mente che gli array dinamici assegnati come buffer di indicatori dalla funzione SetIndexBuffer() non possono essere ridimensionati. Per i buffer indicatori, tutte le operazioni di ridimensionamento sono eseguite dal sottosistema di esecuzione del terminale. "Ma non è un buffer indicatore, quindi dovrai pensare con le mani e la testa...
Il problema di catturare tali errori è risolto solo utilizzando "strati", come una classe di array personalizzata che intercetta l'indirizzamento.
Quando si lancia l'EA quando l'algotrading è disattivato e poi si attiva l'algotrading:
Secondo il codice di errore, il divieto di commercio rimane, anche se la proprietà TERMINAL_TRADE_ALLOWED è vera
Il risultato dovrebbe essere il seguente:
Ovviamente, dovrebbe essere sempre ArraySize(Arr)=1. Questo nel caso di una copia riuscita. Ma in quali casi la copia della barra potrebbe fallire? Quando si verifica l'errore "array out of range", il terminale punta ad Arr[0].
Ho beccato l'errore alla fine, citazione dall'aiuto:
4401
Storia richiesta non trovata.
Stampato sul diario di bordo - ottenuto:
Cosa ne faccio ora, dove vado? Sono una cattiva mano o...? Sto copiando solo una barra da 0 a 1, dopo tutto. Come può non esserlo (la storia)? Soprattutto perché l'errore non appare sempre. O è necessario controllare e caricare forzatamente la cronologia prima?