Championnat d'optimisation des algorithmes. - page 51

 

La deuxième option n'est pas claire, nous avons besoin d'un exemple de script de participant, une sorte de balkan.

Importation de FF, mais il ne sera pas visible dans la fonction du participant et la variable MaxFFruns_P ne sera pas visible.

 
Dmitry Fedoseev:

La deuxième option n'est pas claire, nous avons besoin d'un exemple de script de participant, une sorte de balkan.

Importation de FF, mais il ne sera pas visible dans la fonction du participant et la variable MaxFFruns_P ne sera pas visible.

Vous voulez dire l'exemple de l'algorithme du participant ?

Eh bien, l'algorithme a été dit de ne pas appeler FF plus que tant de fois.

InitAO (paramCount, MaxFFruns_P) ;

Selon la deuxième option, l'algorithme membre importe également des FF. J'ai vérifié, une seule et même copie de la bibliothèque FF est utilisée dans le script et dans l'algorithme. C'est-à-dire que l'algorithme accède au FF par ses fonctions importées, et le script par les siennes, mais le nombre d'appels du script est correct.

Andrey Dik:

Je vais maintenant ajouter des exemples des algorithmes eux-mêmes pour les deux types d'appels à la FF, à la très, native et bien-aimée MSF. S'il vous plaît, aimez et aimez, surtout pour les débutants. Ils sont faciles à comprendre, un exemple de la façon dont vous pouvez construire un algorithme d'optimisation élémentaire simple et en même temps fonctionnel.

 

Andrey Dik:

Vous voulez dire l'exemple de l'algorithme du participant ?

Ici, on a dit à l'algorithme de ne pas appeler le FF plus de tant de fois.

InitAO (paramCount, MaxFFruns_P) ;

Selon la deuxième option, l'algorithme membre importe également des FF. J'ai vérifié, la même copie de la bibliothèque FF est utilisée dans le script et dans l'algorithme.

C'est ce dont vous avez besoin pour montrer le modèle au participant. Le script du vérificateur est affiché.

Le nombre de paramètres est clair. Mais nous devons écrire des instructions, au moins quelques mots.

 
Il n'y aura pas besoin d'arrêter les variables globales. Il suffit d'ajouter une alerte au FF lorsque la limite d'exécution est dépassée, afin de pouvoir l'arrêter manuellement. L'algorithme doit garder la trace du nombre de fois où il appelle le FF.
 
Dmitry Fedoseev:

C'est ici que doit apparaître le modèle du participant. Le script du vérificateur est affiché.

Le nombre de paramètres est clair. Mais nous devons écrire des instructions, au moins quelques mots.

Vous devriez. Il y aura une instruction, bien sûr.

Mais tout est assez simple, nous n'aurons pas besoin d'OOP pour participer, et nous pensons que les participants seront capables de comprendre 20 lignes de code, ce ne sont pas des enfants verts puisqu'ils sont venus au championnat).

 
Andrey Dik:

Nous devons le faire. Il y aura des instructions, bien sûr.

Mais tout est simple comme bonjour, vous n'aurez pas besoin de la POO pour participer, et les participants seront probablement capables de comprendre 20 lignes de code, puisqu'ils ne sont pas verts, puisqu'ils sont venus au championnat).

C'est peut-être simple, mais seulement si vous devez deviner, ce n'est pas présentable.
 

Un exemple d'algorithme d'un participant pour la première variante de l'appel FF :

#property library
#property strict

//+------------------------------------------------------------------+
void InitAO (int paramCount, int maxFFruns) export
{ 
}
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+
void ServiceFunc1 () export
{ 
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void ServiceFunc2 () export
{ 
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void ServiceFunc3 () export
{ 
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetReplaysCount () export
{ 
  return (1);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetOptParam (double &param []) export
{ 
  GenerateParam (param);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void   SendFFvolue (double volue) export
{ 
  if(volue > maxFFvolue) 
    maxFFvolue = volue;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double GetMaxFF () export
{ 
  return (maxFFvolue);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
bool StopAlgo () export
{ 
  return (false);
}
//+------------------------------------------------------------------+

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Все функции выше этой строки - обязательны! Именно они будут импортированы 
// и использованы тестовым скриптом. Они нужны для доступа к алгоритму оптимизации.
// Содержимое - произвольное, на усмотрение участника
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Ниже этой строки пример алгоритма оптимизации участника
//————————————————————————————————————————————————————————————————————
double maxFFvolue = - DBL_MAX;
double minParam   = -10.0;
double maxParam   = 10.0;
double stepParam  = 0.1;
//————————————————————————————————————————————————————————————————————

//————————————————————————————————————————————————————————————————————
// Генерация значений оптимизируемых параметров
void GenerateParam (double &param[])
{
  int size = ArraySize (param);
  double paramVolue = 0.0;
  for(int i = 0; i < size; i++) 
  {
    paramVolue = RNDfromCI (minParam, maxParam);
    param [i] = SeInDiSp (paramVolue, minParam, maxParam, stepParam);
  }
}
//————————————————————————————————————————————————————————————————————

//————————————————————————————————————————————————————————————————————
// Выбор в дискретном пространстве
double SeInDiSp (double in, double inMin, double inMax, double step) 
{ 
  if(in <= inMin) 
    return (inMin); 
  if(in >= inMax) 
    return (inMax); 
  if(step == 0.0) 
    return (in); 
  else 
    return (inMin + step * (double)MathRound ((in - inMin) / step));
}
//————————————————————————————————————————————————————————————————————

//————————————————————————————————————————————————————————————————————
// ГСЧ в заданном интервале
double RNDfromCI (double min, double max) 
{ 
  if(min == max) 
    return (min); 
  double Min, Max; 
  if(min > max) 
  {
    Min = max; 
    Max = min;
  }
  else 
  {
    Min = min; 
    Max = max;
  }
  return (double(Min + ((Max - Min) * (double)MathRand () / 32767.0)));
}
//————————————————————————————————————————————————————————————————————

Résultats de l'exécution de l'algorithme :

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) Temps : 146 µs ; 0.00014600 c

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) FF exécutions : 1000

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) Max : 3.14159260

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) Temps : 148 µs ; 0.00014800 c

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) FF exécutions : 1000

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) Max : 3.10159260

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) Temps : 149 µs ; 0.00014900 c

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) FF exécutions : 1000

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) Max : 3.06159260

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) Temps : 153 µs ; 0.00015300 c

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) FF exécutions : 1000

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) Max : 3.09159260

2016.06.22 03:20:19.071 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.22 03:20:19.071 OAC variant 1 (GBPUSD,H1) Temps : 154 µs ; 0.00015400 c

2016.06.22 03:20:19.071 OAC variant 1 (GBPUSD,H1) FF exécutions : 1000

2016.06.22 03:20:19.071 OAC variant 1 (GBPUSD,H1) Max : 3.14159260

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) Temps : 152 µs ; 0.00015200 c

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) FF exécutions : 1000

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) Max : 2.64159260

Pas mal pour un algorithme sur le GCF ! N'est-ce pas ?

 

Je ne sais pas quoi expliquer d'autre ici. Tout semble clair, les fonctions sont courtes, il n'y a pas de POO comme promis. Les commentaires sont présents.

Et, en outre, un exemple sur la deuxième variante de l'appel FF, si Morpheus n'est pas surpuissant - il le sera.

 
Andrey Dik:

Je ne sais pas quoi expliquer d'autre ici. Tout semble clair, les fonctions sont courtes, il n'y a pas de POO comme promis. Les commentaires sont présents.

Et puis un exemple sur la deuxième version de l'appel FF, si Morpheus n'est pas surpuissant - il le sera.

Je peux aussi l'écrire de cette façon - qu'est-ce qui n'est pas clair dans ma question ?

 
Pourquoi une question doit-elle être posée dix fois ?