Errori, bug, domande - pagina 1960

 
Caso in cui DEAL_TIME_MSC restituisce zero
// Время в миллисекундах первой балансовой сделки (DEAL_TIME_MSC) в тестере равно нулю
int OnInit()
{
  if (HistorySelect(0, TimeCurrent()) && HistoryDealsTotal())
  {
    Print((datetime)HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TIME)); // Время балансовой сделки
    Print(HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TIME_MSC));       // Это же время в мс равно нулю
  }

  return(INIT_FAILED);
}
 

Se si preme Stop durante l'ottimizzazione e poi si riavvia l'ottimizzazione, non andrà, perché questa sarà la voce

Core 1  occupied by another terminal
Core 2  occupied by another terminal
 
Il tester non chiama ParameterSetRange per i parametri di input che non sono controllati per l'ottimizzazione. Per questo motivo ParametersGetRange restituisce degli zeri per i valori Start, Step e Stop corrispondenti. Questo non è affatto corretto. Per esempio, a causa di ciò, è impossibile generare un file SET completo del tester stesso o correggere l'intervallo di ottimizzazione di un parametro di ingresso se è impostato in modo errato dall'utente.
 
ParameterGetRange non funziona in OnTesterInit.
sinput int Range = 5;

#define  PRINT(A) Print(#A + " = " + (string)(A));

void PrintParameter( const string Name, const string From )
{
  PRINT(From)
  
  bool Enable;
  long Value, Start, Step, Stop;
  
  if (ParameterGetRange(Name, Enable, Value, Start, Step, Stop))
  {
    PRINT(Start)
    PRINT(Step)
    PRINT(Stop)
    PRINT(Value)
    PRINT(Enable)
  }   
}

void OnTesterInit()
{
  ParameterSetRange("Range", true, 5, 1, 2, 3); // Задали ненулевыми все значения
  
  PrintParameter("Range", __FUNCTION__); // Возвращает одни нули
}

void OnTesterDeinit()
{
  PrintParameter("Range", __FUNCTION__); // Работает нормально
  
  ChartClose();
}

void OnTesterPass()
{
  PrintParameter("Range", __FUNCTION__); // Работает нормально
}

int OnInit()
{
  uchar Data[];
  
  FrameAdd(NULL, 0, 0, Data);
  
  return(INIT_FAILED);
}
 
fxsaber:
Come sommare rapidamente molte stringhe (ad esempio generare un rapporto commerciale in stringa)

Risultato

C'è un fatto segnato in rosso che non può essere spiegato in alcun modo.

La particolarità del pool di memoria, la prima chiamata SumString2 nel pool di memoria è "satura" di memoria dal sistema, la seconda volta, la memoria non è più richiesta dal sistema.

Raccomando di correggere SumString1

ulong SumString1( string TmpStr, const int Amount )
{
  const ulong StartTime = GetMicrosecondCount();

  string Str;
  StringInit(Str,Amount * StringLen(TmpStr) + 1);            << обеспечим строке приёмный буфер

  for (int i = 0; i < Amount; i++)
    Str += TmpStr;

  return(GetMicrosecondCount() - StartTime);
}
 
fxsaber:

Sull'editore.

  • Se digitate la seguente linea nel Metaeditor, il tooltip (o qual è il nome corretto per un tooltip con opzioni?) GetMicrosecondCount non appare.
    DoubleToString(GetMicro

L'evidenziazione è intelligente, l'argomento DoubleToString dovrebbe essere double eGetMicrosecondCount dovrebbe essere ulong.

Funzionerebbe così:

DoubleToString( (double)GetMicro
 
fxsaber:

Qualche idea su come ottenere il nome di un parametro di input arbitrario come stringa?

input double dParam1 = 1.0; // Double
input int iParam2 = 2;      // Integer

Print( InputToString( dParam1 ) ); // "dParam1"
Print( InputToString( iParam2 ) ); // "iParam2"

template<typename T>
string InputToString(T param)
{
   ???
}
 
Andrey Khatimlianskii:

Qualche idea su come ottenere il nome di un parametro di input arbitrario come stringa?

input double dParam1 = 1.0; // Double
input int iParam2 = 2;      // Integer

#define  TOSTRING(A) (#A)

Print( TOSTRING( dParam1 ) ); // "dParam1"
Print( TOSTRING( iParam2 ) ); // "iParam2"
 
fxsaber:

Grande, grazie!

E per ottenere un elenco di istanze EA quando si esegue una singola esecuzione del tester? Senza leggere il file delle impostazioni usando la dll.
Realizzato un comodo display dei parametri utilizzati nel test dopo l'ottimizzazione (tramite file e variabili principali), rimane un inconveniente - tutti i parametri devono essere elencati manualmente.

 
Andrey Khatimlianskii:

Ottengo un elenco di istanze EA quando eseguo una singola esecuzione del tester?

Non è possibile, solo nella modalità di ottimizzazione.

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

Bug, bug, domande

fxsaber, 2017.07.25 11:27

Come conoscere i parametri di ingresso di un EA almeno in modalità di esecuzione singola?

Per gli indicatori c'è IndicatorParameters.

Per le ottimizzazioni c'è FrameInputs.

Ma per l'esecuzione singola dell'EA o l'esecuzione normale - niente.