Errori, bug, domande - pagina 2932

 

Errore nella descrizione:

Errore

Questo campo si chiama: time_type

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

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.

 
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
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
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.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
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: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
freelancerAntonyan:

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...

 
x572intraday:

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.

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
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
 

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

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

Il risultato dovrebbe essere il seguente:

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
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.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14: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?