Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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.
Le impostazioni dei simboli nel tester non tengono, le sessioni di trading sono tagliate il giovedì e il venerdì, a causa di questo c'è sempre un errore mercato chiuso, le posizioni non vengono aperte, l'ottimizzazione è impossibile, il robot non funziona correttamente, altri broker vanno bene, ma questo è necessario, cosa fare? Non lo so, ma non ho mai avuto questo tipo di problema. Non so, non so se ho già registrato il robot di trading, ma non sono mai stato in grado di aprire posizioni. Chi sa cosa fare? Registrato un nuovo account, pulito il terminale dai file temporanei, provato un altro terminale, nessun aiuto. problemi video https://radikal.ru/video/1HA3UfUNVZt
Potresti dirci quali metodi per combattere l'errore "array out of range" sono disponibili? In primo luogo, non posso usare Print per stampare un elemento di un array che è andato fuori portata, perché l'errore lo precede e non riesce a stampare. In secondo luogo, questo errore appare non sistematicamente, ma a suo piacimento: è apparso una volta e l'indicatore non ha funzionato (eppure è nella lista degli indicatori sul grafico), tuttavia, non è apparso in momenti successivi, senza ricompilare l'indicatore, niente da dire sulla sua modifica.
x572intraday: 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)))
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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...
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
2020.12.3015:25:38.629 Experts automated trading is enabled
2020.12.3015:25:39.159 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.297 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.397 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.499 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.725 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:42.781 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.129 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.758 Experts automated trading is disabled
Il risultato dovrebbe essere il seguente:
2020.12.3015:29:58.406 Experts automated trading is enabled
2020.12.3015:30:02.247 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.368 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.486 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:04.320 Experts automated trading is disabled
Ovviamente, deve sempre ArraySize(Arr)=1. Questo nel caso di una copia riuscita. Ma in quali casi la copia della barra potrebbe fallire? Perché quando si verifica l'errore "array out of range", il terminale punta ad Arr[0].
x572intraday: 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:
2020.12.3114:45:20.474 test (EURUSD,H2) ArraySize(Arr)=0; copied=-1; TF=PERIOD_H22020.12.3114:45:20.474 test (EURUSD,H2) Error Code = 4401
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?
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?