Librerie: Esperto - pagina 12

 
Se l'Expert Advisor richiede il caricamento di una DLL, non spunta questa casella da solo? Sembra che si tratti della modalità esperto. Non vedo l'interfaccia. Devo modificare il codice o il modello da solo?
 
traveller00:
Se l'Expert Advisor richiede il caricamento di una DLL, non spunta questa casella da solo? Sembra che si tratti della modalità esperto. Non vedo l'interfaccia. Devo modificare il codice o il modello da solo?

Sopra c'erano esempi con DLL.

 

Vorrei chiarire la semantica del codice di ritorno del metodo Parameters. Al momento, quando si verifica un errore nella ricezione di una stringa con un modello, il metodo restituisce 0. Questo presuppone che 0 significhi un errore.

In tutti gli altri casi, il ritorno è una stringa:

Res = (int)EXPERT::StringBetween(Str, EXPERT_FLAGS, STRING_END);

, cioè il valore di expertmode del template, che può essere uguale a 0 in modo del tutto legale. EXPERT viene utilizzato in questo modo in altri progetti, in particolare in Tester:

void OnTimerReal()
{
  ...
  if ((this.Symb += BeginTick) && EXPERT::Parameters(0, Params, Names))
  {
    ... открытие рабочего чарта
  }
}

Di conseguenza, se il metodo restituisce 0, Tester non funziona. Perché? Se il flag di negoziazione reale viene azzerato, non significa che i test debbano essere vietati, imho. Inoltre, Tester non fa nulla in silenzio in questo caso.

 
Stanislav Korotky:

Vorrei chiarire la semantica del codice di ritorno del metodo Parameters. Attualmente, quando si verifica un errore nella ricezione di una stringa con un modello, il metodo restituisce 0. Questo presuppone che 0 significhi errore.

Il valore di ritorno è cambiato dalle prime pubblicazioni. Quindi, storicamente, il valore di ritorno non dice nulla sulla presenza o meno di un errore.

In tutti gli altri casi, il valore di ritorno è una stringa:

, cioè il valore di expertmode del template, che può essere legittimamente uguale a 0. In altri progetti, in particolare in Tester, EXPERT viene utilizzato in questo modo :

Di conseguenza, se il metodo restituisce 0, Tester non funziona. Perché? Se il flag di negoziazione reale viene azzerato, non significa che i test debbano essere vietati, imho. In particolare, Tester non fa nulla in silenzio in questo caso.

Secondo il codice che hai citato, infatti, non funziona se l'autotrading è disabilitato. Non ricordo se si tratta di un errore o se è stato fatto di proposito. Molto probabilmente è stato fatto apposta per poter collegare le DLL.


Dovrò aggiornare la Bibbia. C'è una forte torsione per la condivisione con Sequence. Poiché solo io ho bisogno di questa funzione, non è una priorità aggiornarla.

 

L'unica volta che il costrutto di rilevamento del ciclo infinito ha funzionato.

ME      3       15:22:12.123    Message Endless loop:
KS      3       15:22:12.123    Message Expert.mqh
IP      3       15:22:12.123    Message 169
DG      3       15:22:12.123    Message bool EXPERT::TemplateApply(const long,const string&,const bool)
FQ      3       15:22:12.123    Message Condition: !::IsStopped()&&::ChartGetInteger(Chart_ID,CHART_COLOR_STOP_LEVEL,0,Value)&&(!(bool)((int)Value>>24))


È successo in Expert.mqh a questo punto.

      while (_CS(!::IsStopped() && ::ChartGetInteger(Chart_ID, CHART_COLOR_STOP_LEVEL, 0, Value) && (!(bool)((int)Value >> 24))))
        ::Sleep(1); // https://www.mql5.com/ru/forum/170952/page190#comment_18830346


Uso attivamente Expert.mqh ogni giorno, ma questa è la prima volta che mi capita. A quanto pare si tratta di una situazione molto rara. Tenete presente.

 
Ottimo lavoro, ma credo che ora come ora caricherà l'esperto con il preset predefinito? Sarebbe anche bello se si potessero caricare i file SET per l'esperto scelto.
 

Ciao, grazie EXPER.mqh è fantastico.

1. come posso attivare "Algo trading" per l'EA aperto con EXPERT::Run(....).

2. Sto usando la versione 2019. Esiste una versione più recente?

 
upinsa #:

1. Come posso attivare la funzione "Algo trading" per l'EA aperto con EXPERT::Run(....)?

Leggi questo.

2. Sto utilizzando la versione 2019. Esiste una versione più recente?

Ultima versione.


 
static bool GetInputNames( MqlParam &Parameters[], string &InputNames[] )
  {
    const int Size = ::ArraySize(Parameters);
    bool Res = (Size > 1);

    if (Res)
    {
      ::ArrayResize(InputNames, Size - 1);

      for (int i = 1; (i < Size) && Res; i++)
      {
        InputNames[i - 1] = EXPERT::GetInputName(Parameters[i]);
        Res &= (InputNames[i - 1] != NULL);
      }
    }

    return(Res);
  }

gruppo di input "【label1】";

Questa situazione non sembra essere considerata. Quando il parametro è un gruppo, non esiste un valore specifico e il valore ricevuto sarà nullo, quindi i parametri dopo il gruppo non verranno ricevuti.

 
hini #:

gruppo di input "【label1】";

Questa situazione non sembra essere considerata. Quando il parametro è un gruppo, non esiste un valore specifico e il valore ricevuto sarà nullo, quindi i parametri dopo il gruppo non verranno ricevuti.

Se c'è un problema, si prega di fornire file mq5 pronti da riprodurre.