Чемпионат Алгоритмов Оптимизации. - страница 51

 

Непонятно про второй вариант, надо пример скрипта участника, балванку какую-нибудь.

Импортировал FF, но ведь она не будет видимо в функции участника и переменная MaxFFruns_P не будет видна. 

 
Dmitry Fedoseev:

Непонятно про второй вариант, надо пример скрипта участника, балванку какую-нибудь.

Импортировал FF, но ведь она не будет видимо в функции участника и переменная MaxFFruns_P не будет видна. 

Имеешь ввиду пример алгоритма участника?

Вот же, сказали алгоритму, что не больше стольки то раз вызывать ФФ

InitAO (paramCount, MaxFFruns_P);

По второму варианту в алгоритме участника тоже идет импорт ФФ. Я проверил, одна и таже копия ФФ библиотеки используется и в скрипте и в алгоритме. То есть  алгоритм обращался к ФФ по своим импортированным функциям, а скрипт по своим, но счетчик вызовов скрипт показал верно.

Andrey Dik:

Теперь добавлю примеры собственно самих алгоритмов обоих типов вызова ФФ, на том самом, родном и любимом ГСЧ. Прошу любить и жаловать, особенно новичкам. В них просто разобраться, пример того, как можно построить элементарно простой и в тоже время рабочий алгоритм оптимизации. 

 

Andrey Dik:

Имеешь ввиду пример алгоритма участника?

Вот же, сказали алгоритму, что не больше стольки то раз вызывать ФФ

InitAO (paramCount, MaxFFruns_P);

По второму варианту в алгоритме участника тоже идет импорт ФФ. Я проверил, одна и таже копия ФФ библиотеки используется и в скрипте и в алгоритме.

Вот и надо показать шаблон для участника. Показан скрипт проверяющего.

Про количество параметров понятно. Но надо писать инструкцию, хоть пару слов. 

 
Геморои с глобальными переменными для останова не понадобятся. Просто в ФФ добавим алерт при превышении лимита запусков, что бы врукопашную можно остановить было. Алгоритм должен следить сам за тем, сколько раз он вызывает ФФ.
 
Dmitry Fedoseev:

Вот и надо показать шаблон для участника. Показан скрипт проверяющего.

Про количество параметров понятно. Но надо писать инструкцию, хоть пару слов. 

Надо. Будет конечно инструкция.

Но всё и так просто, ООПа не понадобится что бы участвовать, и участники надо полагать в 20-ти строчках кода смогут разобраться, не зелёные раз на чемпионат пришли.)   

 
Andrey Dik:

Надо. Будет конечно инструкция.

Но всё и так просто, ООПа не понадобится что бы участвовать, и участники надо полагать в 20-ти строчках кода смогут разобраться, не зелёные раз на чемпионат пришли.)   

Может просто, но только если надо догадываться, это как-то не презентабельно
 

Пример алгоритма участника по первому варианту вызова ФФ:

#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) Время: 146 мкс; 0.00014600 c

2016.06.22 03:25:25.777 OAC variant 1 (GBPUSD,H1) Запусков ФФ: 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) Время: 148 мкс; 0.00014800 c

2016.06.22 03:25:21.874 OAC variant 1 (GBPUSD,H1) Запусков ФФ: 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) Время: 149 мкс; 0.00014900 c

2016.06.22 03:20:32.249 OAC variant 1 (GBPUSD,H1) Запусков ФФ: 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) Время: 153 мкс; 0.00015300 c

2016.06.22 03:20:26.626 OAC variant 1 (GBPUSD,H1) Запусков ФФ: 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) Время: 154 мкс; 0.00015400 c

2016.06.22 03:20:19.071 OAC variant 1 (GBPUSD,H1) Запусков ФФ: 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) Время: 152 мкс; 0.00015200 c

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) Запусков ФФ: 1000

2016.06.22 03:20:13.407 OAC variant 1 (GBPUSD,H1) Макс: 2.64159260

 

Не плохо для алгоритма на ГСЧ! Не так ли?

 

Что тут ещё объяснять - я не знаю. Всё вроде понятно, функции коротенькие, ООПа никакого нет как и обещал. Коменты присутствуют.

И, далее пример по второму варианту вызова ФФ, если Морфей не одолеет - будет.

 
Andrey Dik:

Что тут ещё объяснять - я не знаю. Всё вроде понятно, функции коротенькие, ООПа никакого нет как и обещал. Коменты присутствуют.

И, далее пример по второму варианту вызова ФФ, если Морфей не одолеет - будет.

Ну я тоже так могу написать - чо непонятного в моем вопросе?

 
Почему один вопрос надо по 10 раз задавать?
Причина обращения: