算法优化锦标赛。 - 页 51

 

第二种方案不清楚,我们需要一个参与者的脚本的例子,某种巴尔干式的。

导入了 FF,但在参与者的函数中是看不到的,MaxFFruns_P变量也是看不到的。

 
Dmitry Fedoseev:

第二种方案不清楚,我们需要一个参与者的脚本的例子,某种巴尔干式的。

导入了FF,但在参与者的函数中是看不到的,MaxFFruns_P变量也是看不到的。

你是说参与人的算法的例子?

好吧,算法已经被告知不要给FF打电话超过这么多次了

InitAO(paramCount,MaxFFruns_P)。

根据第二种选择,成员的算法也是进口FF。我检查了一下,脚本和算法中使用的是同一个FF库的副本。也就是说,算法使用其导入的函数 访问FF,而脚本使用自己的函数,但脚本的调用次数是正确的。

安德烈-迪克

现在,我将补充这两种类型调用FF的算法本身的例子,在非常,原生和心爱的MSF。请爱护,特别是对初学者。它们很容易理解,是一个如何建立一个基本的简单的同时又能工作的优化算法的例子。

 

Andrey Dik:

你是说参与者的算法的例子?

在这里,该算法被告知不要超过这么多次调用FF。

InitAO(paramCount,MaxFFruns_P)。

根据第二种选择,成员算法也进口FF。我 检查了一下,脚本和算法中使用的都是同一个FF库的副本。

这就是你需要为参与者展示的模板。检查员的脚本显示。

参数的数量是明确的。但我们需要写说明,至少要写几个字。

 
将没有必要让全局变量 停下来。只要在超过运行限制时给FF添加一个警报,这样就可以手动停止运行。该算法应记录其调用FF的次数。
 
Dmitry Fedoseev:

这里应该显示参与者的模板。检查员的脚本显示。

参数的数量是明确的。但我们需要写说明,至少要写几个字。

你应该。当然,会有一个指示。

但一切都很简单,我们不需要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运行: 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) Time: 148 µs; 0.00014800 c

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

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

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

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

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

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

对于一个关于GCF的算法来说,这还算不错了!不是吗?

 

我不知道在这里还要解释什么。一切似乎都很清楚,函数很短,没有承诺的OOP。评论是存在的。

而且,进一步说,关于FF呼叫的第二个变体的例子,如果莫菲斯没有被压制 - 他将被压制。

 
Andrey Dik:

我不知道在这里还要解释什么。一切似乎都很清楚,函数很短,没有承诺的OOP。评论是存在的。

再举个例子,关于FF呼叫的第二个版本,如果莫菲斯不被压制--他将被压制。

我也可以这样写--我的问题有什么不清楚的地方?

 
为什么一个问题要问10次?