Пиши и зарабатывай на MQL5 - страница 126

 
Dmitriy Skub:

Вообще, было бы интересно. В том случае, если это законченное решение.

Вы сами то используете КэтБуст?

А что значит "законченное решение"? Тут вопрос в предикторах - что не жалко засветить :) Поэтому, сомневаюсь, что модели будут из коробки прибыльными. А вот сам подход планировал показать.

CatBoost - пробую использовать, как раз выявил с помощью него проблемы с синхронизацией истории, теперь вношу правки в предикторы, что бы нивелировать эту проблему. Его преимущество для меня - быстрое создание большого числа торговых моделей.

 
Понято)
 

Добрый день!

Пишу сюда, потому что на моё сообщение от 21 ноября 2019 года не получил ответа.

Вот есть страничка, на которой я разрабатывал тестовые функции.

А вот код в штатной поставке терминала МТ5, который можно найти в папке \MQL5\Experts\Examples\Math 3D\:

//+------------------------------------------------------------------+
//|                                                    Functions.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//--- custom function y=f(x,y)
typedef double(*MathFunction)(double, double);
//--- Math functions list
enum EnFunctionType
  {
   Chomolungma=1,
   ClimberDream=2,
   Granite=3,
   Hedgehog=4,
   Hill=5,
   Josephine=6,
   Screw=7,
   DoubleScrew=8,
   MultyExtremalScrew=9,
   Sink=10,
   Skin=11,
   Trapfall=12,
  };
//+------------------------------------------------------------------+
//|  Returns a pointer to a function by its type from FunctionType   |
//+------------------------------------------------------------------+
MathFunction GetMathFunction(EnFunctionType type)
  {
   MathFunction function=ClimberDreamFunction;
   switch(type)
     {
      case  Chomolungma:
         function=ChomolungmaFunction;
         break;
      case  ClimberDream:
         function=ClimberDreamFunction;
         break;
      case  Granite:
         function=GraniteFunction;
         break;
      case  Hedgehog:
         function=HedgehogFunction;
         break;
      case  Hill:
         function=HillFunction;
         break;
      case  Josephine:
         function=JosephineFunction;
         break;
      case  Screw:
         function=ScrewFunction;
         break;
      case  DoubleScrew:
         function=DoubleScrewFunction;
         break;
      case  MultyExtremalScrew:
         function=MultyExtremalScrewFunction;
         break;
      case  Sink:
         function=SinkFunction;
         break;
      case  Skin:
         function=SkinFunction;
         break;
      case  Trapfall:
         function=TrapfallFunction;
         break;
     }
   return(function);
  }
//+------------------------------------------------------------------+
//| Function Chomolungma                                             |
//+------------------------------------------------------------------+
double ChomolungmaFunction(double x, double y)
  {
   double a= MathCos(x*x)+MathCos(y*y);
   double b= MathPow(MathCos(5*x*y), 5);
   double c=1.0/MathPow(2, b);
//--- calculate result
   double res=a-c;
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function ClimberDream                                            |
//+------------------------------------------------------------------+
double ClimberDreamFunction(double x, double y)
  {
   double a= MathSin(MathSqrt(MathAbs(x - 1.3) + MathAbs(y)));
   double b= MathCos(MathSqrt(MathAbs(MathSin(x))) + MathSqrt(MathAbs(MathSin(y))));
   double f=a+b;
//--- calculate result
   double res=MathPow(f, 4);
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Granite                                                 |
//+------------------------------------------------------------------+
double GraniteFunction(double x, double y)
  {
   double a= MathPow(MathSin(MathSqrt(MathAbs(x)+MathAbs(y))), 2);
   double b= MathPow(MathCos(MathSqrt(MathAbs(x)+MathAbs(y))), 2);
//--- calculate result
   double res=a*b;
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Hedgehog                                                |
//+------------------------------------------------------------------+
double HedgehogFunction(double x, double y)
  {
   double a1=MathSin(MathSqrt(MathAbs(x-2)+MathAbs(y)));
   double a2=MathCos(MathSqrt(MathAbs(MathSin(x)))+MathSqrt(MathAbs(MathSin(y))));
//--- calculate result
   double res=a1+a2;
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Hill                                                    |
//+------------------------------------------------------------------+
double HillFunction(double x, double y)
  {
//--- calculate result
   double res=MathExp(-x*x-y*y);
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Josephine                                               |
//+------------------------------------------------------------------+
double JosephineFunction(double x, double y)
  {
   double a= MathSin(MathPow(MathAbs(x)+MathAbs(y), 0.5));
   double b= MathCos(MathPow(MathAbs(x), 0.5)+MathPow(MathAbs(y), 0.5));
//--- calculate function
   double res=a+b;
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Screw                                                   |
//+------------------------------------------------------------------+
double ScrewFunction(double x, double y)
  {
   double a=(y==0)?0:((x*y<0)?MathArctan(x/y):MathArctan(x/y)+M_PI);
   double b=x*x+y*y;
   double f=MathSin(b+a);
//--- calculate result
   double  res=(f*f);
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function DoubleScrew                                             |
//+------------------------------------------------------------------+
double DoubleScrewFunction(double x, double y)
  {
   double a=(y==0)?0:((x*y<0)?MathArctan(x/y):MathArctan(x/y)+M_PI);
   double b=x*x+y*y;
   double res1=MathCos(b/2+a*3);
   res1=((res1*res1)/sqrt(b+1)-0.2);
   double res2=MathCos(b/2-a*3);
   res2=((res2*res2)/sqrt(b+1)-0.2);
   double f=fmax(res1, res2);
//--- calculate result
   double    res=(f>0)?f:0;
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function MultyExtremalScrew                                      |
//+------------------------------------------------------------------+
double MultyExtremalScrewFunction(double x, double y)
  {
   double a=(y==0)?0:((x*y<0)?MathArctan(x/y):MathArctan(x/y)+M_PI);
   double b=x*x+y*y;
   double res1=MathCos(b/2+a*3);
   res1=((res1*res1)/sqrt(b+1)-0.2);
   double res2=MathCos(b/2-a*3);
   res2=((res2*res2)/sqrt(b+1)-0.2);
//--- calculate function
   double res=fmin(res1, res2);
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Sink                                                    |
//+------------------------------------------------------------------+
double SinkFunction(double x, double y)
  {
   static double   k=5.0;
   static double   p=6.0;
//--- calculate result
   double     res=MathSin(x*x+y*y)+k*MathExp(-p*x*x-p*y*y);
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Skin                                                    |
//+------------------------------------------------------------------+
double SkinFunction(double x, double y)
  {
   double a1=2*x*x;
   double a2=2*y*y;
   double b1=MathCos(a1)-1.1;
   b1=b1*b1;
   double c1=MathSin(0.5*x)-1.2;
   c1=c1*c1;
   double d1=MathCos(a2)-1.1;
   d1=d1*d1;
   double e1=MathSin(0.5*y)-1.2;
   e1=e1*e1;
//--- calculate result
   double res=b1+c1-d1+e1;
   return(res);
//---
  }
//+------------------------------------------------------------------+
//| Function Trapfall                                                |
//+------------------------------------------------------------------+
double TrapfallFunction(double x, double y)
  {
   double a1=MathSqrt(MathAbs(MathSin(x-1.0)));
   double b1=MathSqrt(MathAbs(MathSin(y+2.0)));
//--- calculate result
   double     res=-MathSqrt(MathAbs(MathSin(MathSin(a1+b1))));
   return(res);
//---
  }
//+------------------------------------------------------------------+

@Rashid Umarov, как можете прокомментировать ситуацию? Настоящий автор функций не указан, вместо этого используется копирайт MetaQuotes Software Corp, гонорар не выплачен.

Пункт 4.6 условий использования https://www.mql5.com/, с которым я согласился публикуя свои материалы, не даёт права компании MetaQoutes использовать эти материалы без указания автора.

Тестовая многопеременная многоэкстремальная функция.
Тестовая многопеременная многоэкстремальная функция.
  • 2009.07.15
  • www.mql5.com
Всем здравия! Подскажите, пожалуйста, такую. Функции с двумя переменными, такие, как Rastrigin, не подходят...
 
Можно опубликовать статью на тему тестовых функций?
 

Здравствуйте, Андрей.

Извиняюсь что не заметили вашего сообщения еще год назад.

В нашем тестовом примере Math 3D использованы ранее созданные нами коды, которые были опубликованы в 2011 году на форуме в ветке MetaTrader 5 Strategy Tester 3D Visualization. Кроме того в него вошли еще и коды из постов от Vladimir Gomonov:

  1. Screw  #6
  2. DoubleScrew   #10
  3. MultiExtremalDoubleScrew #12 

Мы использовали эти формулы для того чтобы показать 3D функционал языка MQL5 в связке с возможностями тестера. Сами формулы не патентуются, поэтому здесь нет никакого нарушения.

Можно было взять готовые формулы из интернета, например:

  1. https://www.quora.com/Which-function-gives-the-best-looking-graph-of-all
  2. https://www.geogebra.org/m/YxhG5BEJ
  3. https://mzrg.com/math/graphs.shtml
  4. https://veusz.github.io/examples3d/
  5. https://smath.com/wiki/GetFile.aspx?File=Tutorials%2FSMathStudioGraphs2%263DExamples.pdf
  6. https://www.benjoffe.com/code/tools/functions3d/examples



Но мы решили использовать уже приведенные на нашем форуме формулы и коды. Это логично и не нарушает чьи-либо права. Мы сохранили имена функций, не стали ничего менять, так как они показались нам удачными.

Мы ценим ваше участие в MQL5.community (и статью помним -Генетические алгоритмы - это просто!), и выражаем Вам нашу благодарность. Андрей.

MetaTrader 5 Strategy Tester 3D Visualization
MetaTrader 5 Strategy Tester 3D Visualization
  • 2011.03.18
  • www.mql5.com
В последнем 419 билде мы включили новый режим 3D визуализации результатов тестирования.
 
Andrey Dik:
Можно опубликовать статью на тему тестовых функций?

Да, конечно. Создайте черновик, дайте мне ссылку для просмотра Плана, пожалуйста

 
Rashid Umarov:

Здравствуйте, Андрей.

Извиняюсь что не заметили вашего сообщения еще год назад.

В нашем тестовом примере Math 3D использованы ранее созданные нами коды, которые были опубликованы в 2011 году на форуме в ветке MetaTrader 5 Strategy Tester 3D Visualization. Кроме того в него вошли еще и коды из постов от Vladimir Gomonov:

  1. Screw  #6
  2. DoubleScrew   #10
  3. MultiExtremalDoubleScrew #12 

в первом посте Рената представлены коды из моей ветки, в которых указан автор, поэтому тогда у меня не было вопросов, но в кодах штатной поставки терминала упоминание автора уже исчезло, собственно этот факт я и озвучил.

спасибо за добрые слова, Рашид, вопрос снят.

//Skin http://forum.mql4.com/ru/24163/page2

//(-5..5)

//MAX(-3.315699;-3.072485)= 14.0606 одна точка

//MIN(3.07021;3.315935)= -4.3182 одна точкаdouble OnTester()

//Особенности:

//Хотя и не имеет недифференцируемых экстремумов это одна из самых сложных для алгоритмов оптимизации функция, 

//в частности, представляет серьезную проблему для классического ГА из за многих локальных "пологих" экстремумов,

// окрестности которых слабо изменяются в месте со значительным изменением значений переменных. 

//Моё (http://www.mql4.com/ru/users/joo) ИМХО: часто похожие функции встречаются в задачах оптимизации ТС и представляют проблему 

//ручного отбора из множества решений оптимальных параметров.

//Много "гладких" локальных Мах и Min, имеет только по одному глобальному Max и Min.


Тестовая многопеременная многоэкстремальная функция.
Тестовая многопеременная многоэкстремальная функция.
  • 2010.03.22
  • www.mql5.com
Всем здравия! Подскажите, пожалуйста, такую. Функции с двумя переменными, такие, как Rastrigin, не подходят...
 
Rashid Umarov:

Да, конечно. Создайте черновик, дайте мне ссылку для просмотра Плана, пожалуйста

спасибо, внёс пункт в свой ежедневник. включу как естественное дополнение в серию статей об оптимизации,  которая пишется в данный момент полным ходом.

 
Rashid Umarov:

Да, конечно.  Статьи по применению машинного обчения в трейдинге приветствуются.

Пишите, пожалуйста.

Я почти закончил статью - осталось оформить. Но вижу, что опубликовали стать про CatBoost , поэтому хочу уточнить, будет ли опубликована моя статья?

Градиентный бустинг (CatBoost) в задачах построения торговых систем. Наивный подход
Градиентный бустинг (CatBoost) в задачах построения торговых систем. Наивный подход
  • www.mql5.com
Градиентный бустинг является сильным алгоритмом машинного обучения. Суть метода заключается в построении ансамбля слабых моделей (например, деревьев принятия решений), в которых (в отличие от бэггинга) модели строятся не независимо (параллельно), а последовательно. Говоря простым языком, это означает, что следующее дерево учится на ошибках...
 
Aleksey Vyazmikin:

Я почти закончил статью - осталось оформить. Но вижу, что опубликовали стать про CatBoost , поэтому хочу уточнить, будет ли опубликована моя статья?

А разве у вас такая же тема?

Причина обращения: