Erreurs, bugs, questions - page 1960

 

Si vous appuyez sur Stop pendant l'optimisation et que vous relancez ensuite l'Optimisation, elle ne partira pas, car ce sera l'entrée

Core 1  occupied by another terminal
Core 2  occupied by another terminal
 
Le testeur n'appelle pas ParameterSetRange pour les paramètres d'entrée qui ne sont pas contrôlés pour l'optimisation. Pour cette raison, ParametersGetRange renvoie des zéros pour les valeurs Start, Step et Stop correspondantes. Ce n'est pas du tout correct. De ce fait, il est par exemple impossible de générer un fichier SET complet du testeur lui-même ou de corriger la plage d'optimisation d'un paramètre d'entrée si celui-ci est mal défini par l'utilisateur.
 
ParameterGetRange ne fonctionne pas dans 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:
Comment additionner rapidement plusieurs chaînes de caractères (par exemple, générer un rapport commercial en chaîne)

Résultat

Il y a un fait marqué en rouge qui ne peut être expliqué d'aucune manière.

La particularité du pool de mémoire, le premier appel SumString2 dans le pool de mémoire est "saturé" de mémoire du système, la deuxième fois, la mémoire n'est plus demandée au système.

Je recommande de corriger 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:

Sur l'éditeur.

  • Si vous tapez la ligne suivante dans le Metaeditor, l'infobulle (ou quel est le nom correct pour une infobulle avec des options ?) GetMicrosecondCount n'apparaît pas.
    DoubleToString(GetMicro

La mise en évidence est intelligente, l'argument DoubleToString devrait être double etGetMicrosecondCount devrait être ulong.

Cela fonctionnerait comme suit :

DoubleToString( (double)GetMicro
 
fxsaber:

Une idée de comment obtenir le nom d'un paramètre d'entrée arbitraire sous forme de chaîne de caractères ?

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:

Une idée de comment obtenir le nom d'un paramètre d'entrée arbitraire sous forme de chaîne de caractères ?

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

#define  TOSTRING(A) (#A)

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

Super, merci !

Et pour obtenir une liste des instances d'EA lors d'une exécution d'un seul testeur ? Sans lire le fichier des paramètres en utilisant la dll.
L'affichage pratique des paramètres utilisés dans le test après l'optimisation (via le fichier et les variables principales), un inconvénient demeure - tous les paramètres doivent être listés manuellement.

 
Andrey Khatimlianskii:

Est-ce que j'obtiens une liste d'instances d'EA lors d'une exécution de test unique ?

Vous ne pouvez pas, seulement dans le mode Optimisation.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.07.25 11:27

Comment connaître les paramètres d'entrée d'un EA au moins en mode exécution unique ?

Pour les indicateurs, il existe IndicatorParameters.

Pour les optimisations, il y a FrameInputs.

Mais pour une seule exécution de l'EA ou une exécution normale - rien.

 
fxsaber:
Pas du tout, seulement en mode Optimisation.

Ahem... L'inverse de "TOSTRING" est-il résolu ?

Ensuite, pendant l'optimisation, vous pourriez écrire la liste des paramètres dans un fichier au format texte, et pendant le test, la lire et la comparer aux valeurs d'entrée utilisées.