Librerie: MultiTester - pagina 20

 

Un errore complicato con un crash dell'heap che sembra essere vissuto a lungo.

    ::ArrayResize(Buf, (int)user32::SendMessageW(Handle, CB_GETLBTEXTLEN, 0, 0 ));
    user32::SendMessageW(Handle, CB_GETLBTEXT, 0, Buf);

CB_GETLBTEXTLEN: Il valore restituito è la lunghezza della stringa, in TCHAR, escluso il carattere nullo finale.

CB_GETLBBTEXT: il buffer deve avere spazio sufficiente per la stringa e per il carattere nullo di terminazione.

Si dovrebbe scrivere

::ArrayResize(Buf, (int)user32::SendMessageW(Handle, CB_GETLBTEXTLEN, 0, 0 )+1);
 
traveller00:

Un errore intelligente con un'ammucchiata che sembra aver vissuto a lungo.


CB_GETLBTEXTLEN: Il valore restituito è la lunghezza della stringa, in TCHAR, escluso il carattere nullo di terminazione.

CB_GETLBBTEXT: il buffer deve avere spazio sufficiente per la stringa e per il carattere nullo di terminazione.

Si dovrebbe scrivere

Grazie! Vero, GetExpertName, dove viene utilizzato, è diventato quasi un rudimento.

 
fxsaber:

GetExpertName, dove viene utilizzato, è diventato quasi un rudimento.

Come dire, viene utilizzato in SetExpertName, che viene estratto da Run, ed è in effetti una delle funzioni principali di MultiTester. Anche se l'errore è raro, mi ci sono imbattuto per caso.

 
traveller00:

Come dire, viene utilizzato in SetExpertName, che viene estratto da Run, ed è in effetti una delle funzioni principali di MultiTester. Anche se l'errore compare raramente, mi ci sono imbattuto per caso.

Non è più così da un po' di tempo.

 
    Str += iBeginTime ? "FromDate==" + ::TimeToString(iBeginTime, TIME_DATE) + "\n" : NULL;
    Str += iEndTime ? "ToDate==" + ::TimeToString(iEndTime, TIME_DATE) + "\n" : NULL;

Segni di uguale in più in "FromDate==" e "ToDate=="?

 
traveller00:

Segni di uguale in più in "FromDate==" e "ToDate=="?

Non è necessario, grazie.

 
Salve. Sto usando MultiTester come WFO con un forward standard, ma il divisore standard di 1/4 di periodo non è sufficiente. Sto cercando di capire il vostro codice e di insegnare a MultiTester a riempire il campo data del forward, ma non riesco a farlo senza conoscenze OOP. Ho raggiunto la funzione Run() nel file MTTester. Non riesco a capire di più. Tutti i parametri sono incollati in una riga e passati a SetSettings2 e SetSettings, dove vengono moltiplicati e passati alla clipboard. Potete dirmi cos'altro deve essere corretto se nella stringa compare un altro parametro e dove MultiTester inserisce i dati nella finestra? Aggiungerei un'altra maniglia della finestra e il testo della data di avanzamento.
E allo stesso tempo, per favore, spiegatemi lo scopo di INITDEINIT fInit e INITDEINIT fDeinit nella funzione TesterSettings.Add().
 
Good Beer:
Salve. Sto usando MultiTester come WFO con un forward standard, ma il divisore standard di 1/4 di periodo non è sufficiente. Sto cercando di capire il vostro codice e di insegnare a MultiTester a riempire il campo data del forward, ma non riesco a farlo senza conoscenze OOP. Ho raggiunto la funzione Run() nel file MTTester. Non riesco a capire di più. Tutti i parametri sono incollati in una riga e passati a SetSettings2 e SetSettings, dove vengono moltiplicati e passati alla clipboard. Potete dirmi cosa devo correggere se nella riga compare un altro parametro e dove MultiTester inserisce i dati nella finestra?

Nella scheda Tester->Impostazioni premere CTRL+C e poi in un editor di testo premere CTRL+V. Verranno visualizzate tutte le impostazioni del Tester.

ForwardMode
ForwardDate

Questi due parametri sono responsabili dell'avanzamento (il secondo è rilevante quando il primo è 4).


MTTester gestisce le impostazioni del Tester tramite gli appunti, creando ciò che si vede nell'editor di testo con CTRL+V.

 
fxsaber:


MTTester gestisce le impostazioni del Tester tramite gli appunti, creando ciò che si vede in un editor di testo con CTRL+V.

Grazie.

Il compito è chiaro: trovare la riga giusta contando dall'alto e sostituirla con il testo richiesto.

 
Good Beer:

Il compito è chiaro: trovare la riga giusta dall'alto e sostituirla con il testo richiesto.

Il numero della riga cambia e non è importante.

  static bool Run( const string ExpertName = NULL,
                   const string Symb = NULL,
                   const ENUM_TIMEFRAMES period = PERIOD_CURRENT,
                   const datetime iBeginTime = 0,
                   const datetime iEndTime = 0,
                   const int ForwardMode = 0 )
  {
    string Str = "[Tester]\n";

    Str += (ExpertName != NULL) ? "Expert=" + ExpertName + "\n" : NULL;
    Str += (Symb != NULL) ? "Symbol=" + Symb + "\n" : NULL;
    Str += iBeginTime ? "FromDate=" + ::TimeToString(iBeginTime, TIME_DATE) + "\n" : NULL;
    Str += iEndTime ? "ToDate=" + ::TimeToString(iEndTime, TIME_DATE) + "\n" : NULL;
    Str += "ForwardMode=" + (string)ForwardMode + "\n";

    return(MTTESTER::SetSettings2(Str) &&
           MTTESTER::SetTimeFrame(period) && MTTESTER::ClickStart());