Errori, bug, domande - pagina 2898

 

Messaggio agli sviluppatori. Lo script Python si blocca quando riceve dati tramite copy_rates_from_pos in certe circostanze.

Lasciatemi spiegare la situazione. Il broker ha circa 4k strumenti.
Faccio una selezione primaria degli strumenti cercando e filtrando secondo certe regole.

Su uno degli strumenti nel terminale non c'è storia (cioè, nel market watch e nella lista dei simboli, lo strumento è presente, ma i dati sono vuoti).

Quando si cerca di eseguire lo script: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
lo script si blocca. Non serve a niente provare o controllare None perché l'errore in sé non si verifica, tutto si blocca su questa linea.

Se provo ad eseguire: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, cioè a specificare il numero di barra iniziale da 0, non si blocca e restituisce una tabella vuota.

Addendum. Ho anche trovato un problema simile quando PRIMA recupero i dati tramite copy_rates_from_pos con il numero di barre richieste, più di quanto ci sia nella storia. Anche lo script si blocca. Non c'è un simile errore nella seconda richiesta. Ecco perché sembra difficile ripetere l'errore (forse, solo cancellando l'intera cronologia per il simbolo).

Potrei sbagliarmi o essermi perso qualcosa, ma sembra essere un bug poiché la funzione dovrebbe restituire i dati o dare un errore.

 
Alexander Mikheev:

Cari sviluppatori, se mi sbaglio o non ho considerato qualcosa, per favore correggetemi.

Vuoi che qualcuno si prenda il tempo di scrivere un codice sorgente basato sui tuoi dati e testarlo su diversi server commerciali?

Non succederà. Rispettate il tempo degli altri: fornite completamente i dati per riprodurre il problema - fonte, server, configurazione della macchina e così via.


La fonte è concisa e con commenti, in modo da non perdere tempo ad analizzare ciò che è stato scritto lì. Racconta cosa volevi ottenere e cosa hai ottenuto.

 
fxsaber:

Un archivio ZIP protetto da password.

Gli archivi bloccati sono supportati in MQL?

 
Stanislav Korotky:

Gli archivi bloccati sono supportati in MQL?

Non lo so.

 
suncrypto:

Messaggio agli sviluppatori. Lo script Python si blocca quando riceve dati tramite copy_rates_from_pos in certe circostanze.

Lasciatemi spiegare la situazione. Il broker ha circa 4k strumenti.
Faccio una selezione primaria degli strumenti cercando e filtrando secondo certe regole.

Su uno degli strumenti nel terminale non c'è storia (cioè, nell'orologio del mercato e nella lista dei simboli, lo strumento è presente, ma i dati sono vuoti).

Quando si cerca di eseguire lo script: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
lo script si blocca. Non serve a niente provare o controllare None perché l'errore in sé non si verifica, tutto si blocca su questa linea.

Se provo ad eseguire: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, cioè a specificare il numero di barra iniziale da 0, non si blocca e restituisce una tabella vuota.

Addendum. Ho anche trovato un problema simile quando PRIMA recupero i dati tramite copy_rates_from_pos con il numero di barre richieste, più di quanto ci sia nella storia. Anche lo script si blocca. Non c'è un simile errore nella seconda richiesta. Ecco perché sembra difficile ripetere l'errore (forse, solo cancellando l'intera cronologia per il simbolo).

Forse mi sono sbagliato su qualcosa o mi è sfuggito qualcosa, ma sembra essere un bug poiché la funzione deve restituire i dati o dare un errore.

Riprodotto, corretto.

 
TesterHideIndicators(false) ha smesso di funzionare;
 
suncrypto:

Messaggio agli sviluppatori. Lo script Python si blocca quando riceve dati tramite copy_rates_from_pos in certe circostanze.

Lasciatemi spiegare la situazione. Il broker ha circa 4k strumenti.
Faccio una selezione primaria degli strumenti cercando e filtrando secondo certe regole.

Su uno degli strumenti nel terminale non c'è storia (cioè, nell'orologio del mercato e nella lista dei simboli, lo strumento è presente, ma i dati sono vuoti).

Quando si cerca di eseguire lo script: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
lo script si blocca. Non serve a niente provare o controllare None perché l'errore in sé non si verifica, tutto si blocca su questa linea.

Se provo ad eseguire: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, cioè a specificare il numero di barra iniziale da 0, non si blocca e restituisce una tabella vuota.

Addendum. Ho anche trovato un problema simile quando PRIMA recupero i dati tramite copy_rates_from_pos con il numero di barre richieste, più di quanto ci sia nella storia. Anche lo script si blocca. Non c'è un simile errore nella seconda richiesta. Ecco perché sembra difficile ripetere l'errore (forse, solo cancellando l'intera cronologia per il simbolo).

Potrei sbagliarmi o essermi perso qualcosa, ma sembra essere un bug poiché la funzione dovrebbe restituire i dati o dare un errore.

Corretto, sarà nella prossima beta
 
Aleksey Vyazmikin:
TesterHideIndicators(false) ha smesso di funzionare;

TesterHideIndicator imposta il flag di visibilità per gli indicatori creati successivamente.

Non cambia il flag di visibilità degli indicatori creati in precedenza.

Puoi controllare con il seguente esperto

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

Nel visualizzatore e nel grafico aperto dopo il semplice test, l'indicatore MACD non è visibile, la media mobile è visibile

Quindi, funziona come previsto

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
Bug - funzionamento incoerente dei puntatori (5.00, 2650)

Errore di compilazione. Qualche pensiero?



Usare la dichiarazione di dereferenza in modo esplicito

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

Precedentemente ho ricercato questa domanda, questo è ciò che ho trovato:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Sergey Dzyublik, 2020.04.04 21:46

Bug MT5(build 2375) errore di compilazione quando si chiama una funzione tramite il suo puntatore, quando si usa un array di puntatori a una funzione:

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}