Errori, bug, domande - pagina 2815

 

Errore durante l'esecuzione:

class A {
public:
        A( int ) { Print( 1 ); }
        A( A&  ) { Print( 2 ); }
};
void OnStart()
{       
        int a = 5;
        {
                A a( a );         //(1)
        }
}

  • Risultato in MQL: 2
  • Previsto in MQL: 1

Infatti, questo esempio è eseguito dalle regole C++

void OnStart()
{
        int a = 5;
        {
                A a( a );         //(2)
        }
}

mentre il seguente esempio funziona in MQL secondo le sue regole (diverse da quelle del C++)

void OnStart()
{       
        int a = 5;
        {
                int a = a;         //(3)
                printf( "%d", a );
        }
}

  • Risultato (3) in MQL: 5
  • in C++: 0 (o numero casuale)

Una variabile è considerata dichiarata sia

  • dal momento della comparsa (*), oppure
  • dalla fine della dichiarazione (**)

In С++ c'è un solo approccio (*), mentre in MQL nel caso di (2) è (*), e nel caso di (3) è (**). Qual è la differenza fondamentale tra (2) e (3)?

Questa è la domanda: perché in MQL in un caso una variabile è considerata dichiarata dal momento in cui appare e nell'altro caso dal momento in cui la dichiarazione è finita?

 

Errore di compilazione:

#import "z.ex5"
#import
#define  MACRO1( x )    (x) //(*)
#define  MACRO2( x )    MACRO1(x)
int f( int z )
{
        return MACRO2( z ); //Error: '()' - operand expected
}

Altrimenti:

#define  MACRO1( x )    x  //(**)

OK. Qual è la differenza tra (*) e (**)?

 
Fast235:

Non riesco a caricare la cronologia in un terminale vuoto o in un simbolo precedentemente inutilizzato

Quando lo eseguo su M1 carica tutto, su H1 carica ~720 barre e basta, l'indicatore ha bisogno di molto meno per funzionare, ma il caricamento di ulteriori barre si ferma e l'indicatore non rende correttamente(se controllo per circa 900 barre, l'indicatore smette di funzionare del tutto),

.....

Ho allegato lo script dihttps://www.mql5.com/ru/docs/series/timeseries_access, non ho voluto usarlo per molto tempo perché era troppo macchinoso. L'ho aggiunto all'indicatore, ho aggiunto un paio di linee e funziona bene,

Questo script è ben progettato e facile da integrare in un robot di trading, è un must per multicurrency e timeframes multitime! Poiché non si carica o si blocca a seconda degli indicatori di lavoro,

La stessa cosa si può ottenere anche con la MA standard, ma a causa delle sue peculiarità ecc. molti non se ne accorgono e cambiano solo il grafico o il periodo, e poi si ricarica...

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 
MT5 su Android 4.4 ha smesso di aggiornarsi. Non riesco nemmeno ad aprire l'app. Se qualcuno l'ha incontrato, sarebbe grato per l'aiuto.
Grazie!
 
fxsaber:

Possono essere ottenuti attraverso Expert.mqh in OnTesterInit, poiché l'Expert Advisor verrà eseguito in modalità frame per impostare i parametri.

La chiamata di EXPERT::Parameters ha il tipo stringa per qualche motivo. È un bug o una restrizione?

 
Stanislav Korotky:

Come risultato della chiamata di EXPERT::Parameters tutti i parametri sono di tipo stringa per qualche motivo. È un bug o una limitazione?

Un esempio migliore.

 
Andrey:
MT5 su Android 4.4 ha smesso di aggiornarsi. Non riesco nemmeno ad aprire l'app. Se qualcuno ha incontrato , sarebbe grato per l'aiuto.
Grazie!

Il minimo è Android5, è quello che gli sviluppatori hanno scritto di recente.

 
fxsaber:

Un esempio sarebbe meglio.

Beh, l'esempio è standard per questo metodo, più o meno:

    EXPERT::Parameters(0, parameters, names);
    for(int i = 0; i < ArraySize(parameters); i++)
    // здесь parameters[i].type всегда равно TYPE_STRING, вне зависимости от фактического типа параметра

Questo può essere visto anche dal codice sorgente della stessa libreria Expert.mqh.

PS. Spostato la discussione nell'argomento biblioteca.

 

Un altro bug con ParameterGetRange/ParameterSetRange.

ChiamareParameterSetRange non cambia il flag per includere il parametro nell'ottimizzazione per la successiva chiamataParameterGetRange:

// параметр "name" изначально включен в оптимизацию
// в одной части кода...
ParameterSetRange("name", false, value, start, step, stop);
...
// в другой части кода финализация проверок
ParameterGetRange("name", enabled, value, start, step, stop); // получаем enabled=true, т.е. изменения внесенные ParameterSetRange не применились
 
Stanislav Korotky:

Un altro bug con ParameterGetRange/ParameterSetRange.

Una chiamata a ParameterSetRange non cambia il flag per includere il parametro nell'ottimizzazione per la successiva chiamata aParameterGetRange:

Mi ricordo che quando mi stavo avvicinando a questo argomento, c'erano molte sfumature. Qualcosa si è mostrato giusto o sbagliato, a seconda della funzione OnTester*. Provate a chiamarlo in diverse funzioni On.