Algorithmus-Optimierung Meisterschaft. - Seite 51

 

Die zweite Option ist unklar, wir brauchen ein Beispiel für das Skript eines Teilnehmers, eine Art Balkan.

FFwurde importiert, ist aber in der Funktion des Teilnehmers nicht sichtbar, und die Variable MaxFFruns_P ist nicht sichtbar.

 
Dmitry Fedoseev:

Die zweite Option ist unklar, wir brauchen ein Beispiel für das Skript eines Teilnehmers, eine Art Balkan.

FF wurde importiert, ist aber in der Funktion des Teilnehmers nicht sichtbar und die Variable MaxFFruns_P ist nicht sichtbar.

Sie meinen das Beispiel des Algorithmus der Teilnehmer?

Nun, dem Algorithmus wurde gesagt, er solle FF nicht mehr als so und so oft anrufen.

InitAO (paramCount, MaxFFruns_P);

Bei der zweiten Option importiert der Mitgliedsalgorithmus auch FFs. Ich habe überprüft, dass ein und dieselbe Kopie der FF-Bibliothek im Skript und im Algorithmus verwendet wird. Das heißt, der Algorithmus greift über seine importierten Funktionen auf den FF zu und das Skript über seine eigenen, aber die Anzahl der Aufrufe des Skripts ist korrekt.

Andrej Dik:

Ich werde nun Beispiele für die Algorithmen selbst für beide Arten von Aufrufen des FF, des ursprünglichen und des geliebten MSF, hinzufügen. Bitte Liebe und Liebe, besonders für Anfänger. Sie sind leicht zu verstehen, ein Beispiel dafür, wie man einen elementar einfachen und gleichzeitig funktionierenden Optimierungsalgorithmus aufbauen kann.

 

Andrey Dik:

Sie meinen das Beispiel mit dem Algorithmus des Teilnehmers?

In diesem Fall wurde dem Algorithmus gesagt, dass er den FF nicht mehr als eine bestimmte Anzahl von Malen anrufen soll.

InitAO (paramCount, MaxFFruns_P);

Bei der zweiten Option importiert der Mitgliedsalgorithmus auch FFs. Ich habe überprüft, dass im Skript und im Algorithmus die gleiche Kopie der FF-Bibliothek verwendet wird.

Das ist das, was Sie brauchen, um die Vorlage für den Teilnehmer zu zeigen. Das Skript des Prüfers wird angezeigt.

Die Anzahl der Parameter ist eindeutig. Aber wir müssen Anweisungen schreiben, zumindest ein paar Worte.

 
Es besteht keine Notwendigkeit, globale Variablen zu stoppen. Fügen Sie einfach eine Warnung in den FF ein, wenn die Laufzeitgrenze überschritten wird, so dass er manuell gestoppt werden kann. Der Algorithmus sollte aufzeichnen, wie oft er die FF aufruft.
 
Dmitry Fedoseev:

Hier sollte die Vorlage für den Teilnehmer angezeigt werden. Das Skript des Prüfers wird angezeigt.

Die Anzahl der Parameter ist eindeutig. Aber wir müssen Anweisungen schreiben, zumindest ein paar Worte.

Das sollten Sie. Natürlich wird es eine Anleitung geben.

Aber alles ist einfach genug, wir brauchen kein OOP, um teilzunehmen, und wir glauben, dass die Teilnehmer in der Lage sein werden, 20 Zeilen Code zu verstehen, sie sind ja keine grünen Kinder, seit sie zur Meisterschaft gekommen sind).

 
Andrey Dik:

Das müssen wir. Es wird natürlich Anweisungen geben.

Aber alles ist so einfach, wie es ist, man braucht kein OOP, um teilzunehmen, und die Teilnehmer werden wahrscheinlich in der Lage sein, 20 Zeilen Code zu verstehen, da sie sich nicht grün sind, da sie zur Meisterschaft gekommen sind).

Es mag einfach sein, aber nur wenn man raten muss, ist es irgendwie nicht vorzeigbar.
 

Ein Beispiel für den Algorithmus eines Teilnehmers für die erste Variante des FF-Aufrufs:

#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)));
}
//————————————————————————————————————————————————————————————————————

Ergebnisse der Algorithmusausführung:

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

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

2016.06.22 03:25:25.777 OAC Variante 1 (GBPUSD,H1) FF läuft: 1000

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

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

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

2016.06.22 03:25:21.874 OAC Variante 1 (GBPUSD,H1) FF läuft: 1000

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

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

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

2016.06.22 03:20:32.249 OAC Variante 1 (GBPUSD,H1) FF läuft: 1000

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

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

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

2016.06.22 03:20:26.626 OAC Variante 1 (GBPUSD,H1) FF läuft: 1000

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

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

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

2016.06.22 03:20:19.071 OAC Variante 1 (GBPUSD,H1) FF runs: 1000

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

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

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

2016.06.22 03:20:13.407 OAC Variante 1 (GBPUSD,H1) FF läuft: 1000

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

Nicht schlecht für einen Algorithmus auf dem GCF! Nicht wahr?

 

Ich weiß nicht, was ich hier noch erklären soll. Alles scheint klar, die Funktionen sind kurz, es gibt kein OOP wie versprochen. Kommentare sind vorhanden.

Und weiter, ein Beispiel für die zweite Variante des FF-Aufrufs, wenn Morpheus nicht übermächtig ist - er wird es sein.

 
Andrey Dik:

Ich weiß nicht, was ich hier noch erklären soll. Alles scheint klar, die Funktionen sind kurz, es gibt kein OOP wie versprochen. Kommentare sind vorhanden.

Und dann ein Beispiel für die zweite Version von FF Call, wenn Morpheus nicht übermächtig ist - er wird es sein.

Ich kann es auch so schreiben - was ist an meiner Frage unklar?

 
Warum muss eine Frage 10 Mal gestellt werden?