Librerie: MultiTester - pagina 25

 
fxsaber:

Approfittate del bug della KB: il file zip contiene la prima versione.

Ahimè, contiene i file del 25/12/20.
Ho ancora i file di novembre 2019, ma ci sono già...
Tu ne hai?
 
Edgar Akhmadeev:
Ne avete uno?

Ne ho trovato solo uno per dicembre 2019. MTTester non sembra aver cancellato le vecchie funzioni.

 
fxsaber:

Trovato solo per dicembre 2019. Non credo di aver cancellato le vecchie funzioni in MTTester.

Forse, almeno sotto forma di idea - come impostare i parametri di ottimizzazione dell'Expert Advisor dal codice?
Probabilmente sono confuso dal fatto che è passato molto tempo e non esiste questa possibilità.
 
Edgar Akhmadeev:
Forse, almeno sotto forma di idea - come impostare i parametri dell'ottimizzazione dell'Expert Advisor dal codice?
Probabilmente sono confuso dal fatto che è passato molto tempo e non esiste questa possibilità.

Esistono solo queste possibilità.



Ma nulla impedisce di lavorare in parallelo tramite la clipboard comune. Basta fare un ulteriore controllo.

 
fxsaber:

Ma nulla vieta di lavorare in parallelo tramite una clipboard comune. Basta fare un controllo in più.

Questa è la prima cosa che ho provato. Ho passato diversi giorni a fare il debug del semaforo del file in COMMON, ma non sono riuscito a ottenere un lavoro stabile. Forse le funzioni di file integrate hanno un timing diverso da quello che penso dovrebbero avere.
Forse dovrei provare con i file tramite WinAPI, memoria condivisa o anche API semaphore (sicuramente ne esiste una, forse qualcuno può dirmelo; MutEx mi è venuta subito in mente, ci penserò).
Se volete analizzare le mie funzioni di Lock e Release (sono brevi), posso postarle dopodomani. No?
 
Edgar Akhmadeev:
Questa è la prima cosa che ho provato. Ho passato qualche giorno a fare il debug del semaforo del file in COMMON, ma non sono riuscito a farlo funzionare in modo coerente. Forse le funzioni di file integrate hanno un timing diverso da quello che penso dovrebbero avere.
Forse dovrei provare con i file tramite WinAPI, memoria condivisa o anche API semaphore (sicuramente ne esiste una, forse qualcuno può suggerirla; MutEx mi è venuta subito in mente, ci penserò).
Se volete analizzare le mie funzioni di Lock e Release (sono brevi), posso postarle dopodomani. No?

Allora hai fatto un pasticcio! Inserite una stringa in ingresso, nella quale ficcate il percorso del Terminale attraverso il buffer. Dopo aver inserito le impostazioni, leggetele e verificate se sono corrette. In particolare, da questo string-input. Premere il pulsante Avvia non appena il controllo è stato completato con successo.


Si può anche fare qualcosa di simile.

  static bool SetSettings2( string Str, const int Attempts = 5 )
  {
    bool Res = false;

    for (int j = 0; (j < Attempts) && !Res; j++)
    {
      string Str1;
      string Str2;
      string Str3;

      Res = MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str1) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str2) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str3) &&
            (Str1 == Str2) && (Str1 == Str3);
    }

    return(Res);
  }
 
fxsaber:

Avete fatto un sacco di cose sensate! Inserite una stringa in ingresso, nella quale inserite il percorso del terminale attraverso il buffer. Dopo aver inserito le impostazioni, leggerle e verificare che siano corrette. In particolare, da questo string-input. Premere il pulsante Avvia non appena il controllo è stato completato con successo.

Non si tratta di essere furbi, ma solo di essere troppo diretti. Accesso multiplo significa semafori.
Beh, ho chiesto un'idea e l'ho avuta. Grazie!
 

Accelerazione di GA.

L'Expert Advisor in modalità frame riceve OnTester dagli agenti. Se per 100-1000 passaggi non viene trovato nulla di buono, si preme Stop.

L 'ottimizzazione può essere accelerata di un ordine di grandezza.
 
fxsaber:
È possibile accelerare l'ottimizzazione di un ordine di grandezza .

Ho effettuato 470 ottimizzazioni (ciascuna su un simbolo diverso) in 4,5 ore su tick reali (un mese).

 

1. Passerei da GetTickCount() a GetTickCount64() in Sleep2. Altrimenti, l'overflow minaccia una logica non del tutto corretta. E si verifica molto meno spesso nella variante a 64. In altre opere, forse dovreste passare anche a questa.


2. Il secondo ArrayResize solleva delle domande

      ::ArrayResize(Buffer, (int)Size / sizeof(T));

      kernel32::ReadFile(handle, Buffer, (uint)Size, Read, 0);
      Res = ::ArrayResize(Buffer, Read);

Molto probabilmente dovrebbe essere

Res = ::ArrayResize(Buffer, Read / sizeof(T));


3. Infine, alcuni tipi diversi

static void Sleep2( const uint Pause )


  static bool IsReady( const int Pause = 100 )
  {
    if (MTTESTER::IsReady2())
      MTTESTER::Sleep2(Pause);