Fehler, Irrtümer, Fragen - Seite 1960

 
Fall, in dem DEAL_TIME_MSC Null ergibt
// Время в миллисекундах первой балансовой сделки (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);
}
 

Wenn Sie während der Optimierung auf Stopp drücken und dann die Optimierung erneut starten, wird sie nicht ausgeführt, da dies der Eintrag

Core 1  occupied by another terminal
Core 2  occupied by another terminal
 
Der Prüfer ruft ParameterSetRange nicht für Eingabeparameter auf, die nicht auf Optimierung geprüft werden. Aus diesem Grund liefert ParametersGetRange Nullen für die entsprechenden Start-, Step- und Stop-Werte. Das ist überhaupt nicht richtig. Aus diesem Grund ist es beispielsweise nicht möglich, eine vollständige SET-Datei des Testers selbst zu erstellen oder den Optimierungsbereich eines Eingabeparameters zu korrigieren, wenn er vom Benutzer falsch eingestellt wurde.
 
ParameterGetRange funktioniert nicht 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:
Wie man schnell viele Strings zusammenzählt (z.B. einen Handelsbericht in einem String erstellen)

Ergebnis

Es gibt eine rot markierte Tatsache, die in keiner Weise erklärt werden kann.

Die Besonderheit des Speicherpools ist, dass beim ersten Aufruf SumString2 im Speicherpool mit Speicher vom System "gesättigt" ist, beim zweiten Mal wird der Speicher nicht mehr vom System angefordert.

Ich empfehle die Korrektur von 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:

Über den Herausgeber.

  • Wenn Sie die folgende Zeile in den Metaeditor eingeben, wird die QuickInfo (oder wie lautet der korrekte Name für eine QuickInfo mit Optionen?) GetMicrosecondCount nicht angezeigt.
    DoubleToString(GetMicro

Die Hervorhebung ist clever, das DoubleToString-Argument sollte double sein undGetMicrosecondCount sollte ulong sein.

Es würde folgendermaßen funktionieren:

DoubleToString( (double)GetMicro
 
fxsaber:

Irgendeine Idee, wie man den Namen eines beliebigen Eingabeparameters als String erhält?

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:

Irgendeine Idee, wie man den Namen eines beliebigen Eingabeparameters als String erhält?

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

#define  TOSTRING(A) (#A)

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

Großartig, danke!

Und um eine Liste von EA-Instanzen zu erhalten, wenn ein einzelner Testlauf ausgeführt wird? Ohne Lesen der Einstellungsdatei mit dll.
Es wurde eine bequeme Anzeige der im Test verwendeten Parameter nach der Optimierung erstellt (über die Datei und die Hauptvariablen), eine Unannehmlichkeit bleibt jedoch - alle Parameter müssen manuell aufgelistet werden.

 
Andrey Khatimlianskii:

Erhalte ich eine Liste der EA-Instanzen, wenn ich einen einzelnen Testlauf durchführe?

Das können Sie nicht, nur im Optimierungsmodus.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.07.25 11:27

Wie kann man die Eingabeparameter eines EA zumindest im Einzellaufmodus kennen?

Für Indikatoren gibt es IndicatorParameters.

Für Optimierungen gibt es FrameInputs.

Aber für einen einzelnen Lauf des EA oder einen normalen Lauf - nichts.