アルゴリズム最適化選手権。 - ページ 51

 

2つ目の選択肢については、参加者のスクリプトの例、バルカンのようなものが必要で、よくわかりません。

FFをインポート したが、参加者の関数に表示されず、MaxFFruns_P変数も表示されない。

 
Dmitry Fedoseev:

2つ目の選択肢については、参加者のスクリプトの例、バルカンのようなものが必要で、よくわかりません。

FFをインポートしたが、参加者の関数に表示されず、MaxFFruns_P変数も表示されない。

参加者のアルゴリズムの例のことですか?

まあ、アルゴリズムは何度もFFを呼ぶなと言われてるので

InitAO(paramCount、MaxFFruns_P)。

第二の選択肢によれば、メンバーアルゴリズムはFFを輸入することもできる。確認したところ、FFライブラリはスクリプトとアルゴリズムで同じものが使われていました。つまり、アルゴリズムはインポートした関数で FFにアクセスし、スクリプトは独自の関数でアクセスするが、スクリプトのコールカウントは正しい。

アンドレイ・ディク

ここで、FFの、まさに、ネイティブで愛すべきMSFの両タイプの呼び出しについて、アルゴリズムそのものの例を追加します。特に初心者の方は愛情を注いでください。初歩的でシンプル、かつ実用的な最適化アルゴリズムを構築できる例として、理解しやすいと思います。

 

Andrey Dik:

参加者のアルゴリズムの例のことですか?

ここで、アルゴリズムは、FFをこれ以上呼び出さないようにと言われた。

InitAO(paramCount、MaxFFruns_P)。

第二の選択肢によれば、メンバーアルゴリズムはFFを輸入することもできる。確 認したところ、スクリプトとアルゴリズムで同じFFライブラリのコピーが使用されていました。

それが、参加者用のテンプレートを表示することです。チェッカーのスクリプトが表示されます。

パラメータの数は明確です。しかし、少なくとも2、3文字は指示を書く必要がある。

 
グローバル変数の 停止は必要ないでしょう。FFに実行制限を超えた時のアラートを追加して、手動で停止できるようにすればいい。アルゴリズムは、FFを何回呼び出したかを記録しておく必要があります。
 
Dmitry Fedoseev:

ここに参加者のテンプレートが表示されるはずです。チェッカーのスクリプトが表示されます。

パラメータの数は明確です。しかし、少なくとも2、3文字は指示を書かなければならない。

すべきです。もちろん、インストラクションもあります。

しかし、すべては十分シンプルで、参加するためにOOPは必要ないでしょうし、参加者は20行のコードを理解することができると信じています、彼らはチャンピオンシップに来た時から緑の子供ではありません)。

 
Andrey Dik:

そうしなければならないのです。もちろん、説明書もあります。

しかし、すべてはそのままシンプルで、参加するためにOOPは必要ありませんし、参加者はチャンピオンシップに来たからには、緑色ではないので、おそらく20行のコードを理解することができるでしょう)。

単純なことかもしれませんが、推して知るべし、なんだか体裁が悪いというだけです。
 

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

アルゴリズムの実行結果。

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

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

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) FF runs: 1000

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) 最大: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) Time: 148 µs; 0.00014800 c

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) FF runs: 1000

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) 最大: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) Time: 149 µs; 0.00014900 c

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) FF runs: 1000

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) 最大: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) Time: 153 µs; 0.00015300 c

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) FF runs: 1000

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) 最大: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) Time: 154 µs; 0.00015400 c

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

2016.06.22 03:20:19.071 OAC variant 1 (GBPUSD,H1) 最大: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) Time: 152 µs; 0.00015200 c

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) FF runs: 1000

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

GCFのアルゴリズムとしては悪くないですねそうでしょう?

 

ここで他に説明することはないだろう。すべてが明確で、関数も短く、約束されたOOPもありません。コメントがあります。

さらに、FFコールの2つ目のバリエーションに関する例ですが、もしモーフィアスがオーバーパワーでなければ、彼はそうなるでしょう。

 
Andrey Dik:

ここで他に説明することはないだろう。すべてが明確で、関数も短く、約束されたOOPもありません。コメントがあります。

そして、FFコールの第2バージョンでの例ですが、もしモーフィアスがオーバーパワーでなければ--。

私もそのように書くことができます。私の質問のどこが不明瞭なのでしょうか?

 
なぜ、ひとつの質問を10回もしなければならないのか?