Обсуждение статьи "Создание мульти-экспертов на основе торговых моделей" - страница 3

 
Serj_Che:

По моему статью надо переименовать - зачем просто, когда можно сделать сложно.

верно подмечено.

Interesting:

По крайней мере, суть того, что хотел донести до читателей автор я понял (или считаю, что понял). 

про это и речь. Про суть что написано поняли все. Кто из прочитавших воспримет приложенные коды как готовую реализацию какого-то этапа разработки? Да практически никто кроме автора. Статья получилась ознакомительной, из которой можно взять только идею, а не код. А для этого столько букофф не надо было делать.

Если назвался груздем, так полезай в кузовок. Решили занятся обучением других, или поделится своими наработками, тогда писать надо, продумывая каждое слово и структуру излагаемой информации. Если мысли гуляют, и хочется объять необъятное и писать про все на свете, то и нечего браться за написание статей фундаментального плана.  И слова, что это версия 1.0 бета неподходят. Так как этим портится репутация грамотного кодера. 

Руководству форума желаю внимательней относится к публикуемым материалам и осуществлять более  жесткий контроль авторских работ (не только статей но и кодов). И только ради набива числа публикаций не стоит брать все подряд. Чтоб не получилось как c Codebase в MQL4. Действительно ценные работы без аналогов теряются за сотней версий 1.0 бета.

 

Руководству форума желаю...

1. Не указывайте мне как писать и что писать. 

2. Не указывайте корпорации MetaQuotes Software какую маркетинговую политику ей проводить, и как оценивать и выбирать авторов для своего продукта.

Рассматривайте эти пункты ни как пожелание, а как предупреждение. Если Вы и дальше будете продолжать распространять негатив в ветке форума посвященной моей статье, а также указывать MetaQuotes, что ей и как делать, то это будет расценено мной как попытка очернить проделанную мной работу и подвергнуть сомнению профессионализм команды MetaQuotes. В этом случае я оформлю соответственную жалобу модераторам этого раздела, и у меня есть серьезные основания, что возникший конфликт между мной и вами решиться в мою пользу.

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

 

 
udmurt2:

Руководству форума желаю внимательней относится к публикуемым материалам и осуществлять более  жесткий контроль авторских работ (не только статей но и кодов). И только ради набива числа публикаций не стоит брать все подряд. Чтоб не получилось как c Codebase в MQL4. Действительно ценные работы без аналогов теряются за сотней версий 1.0 бета.

+1

 

Я думаю, что раздел "  Статьи "  надо будеть полезен для потребителям !!! Надо облекчает, не пугает и спутает их !  

А сейчас - "Чукча писатель, чукча не читатель" ....

 

 

 

>>>Только представьте,  ваш один единственный эксперт торгует сразу по нескольким десяткам торговых стратегий, сразу на всех доступных инструментах и сразу на всех возможных таймфреймах! К тому же этот эксперт прекрасно тестируется в тестере, а для всех стратегий, входящих в его состав, действует одна или сразу несколько систем управления капиталом.<<<

Именно так мой эксперт торгующий на чемпионате и устроен. Все, как мне кажется, проще. Главное - правильно все спроектировать и не мешать в одну кучу.

//+------------------------------------------------------------------+
//|                                                 Vigor-Levels.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Vigor\Strategy.mqh>

#include <Vigor\TradeSignal.mqh>
#include <Vigor\ADXMAStrategy.mqh>
#include <Vigor\ADXStrategy.mqh>
#include <Vigor\MAVSimpleStrategy.mqh>
#include <Vigor\Order.mqh>
#include <Vigor\Dispatcher.mqh>
#include <Vigor\AdaptiveStrategy.mqh>
CDispatcher dispatcher;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int myTick = 60;
   EventSetTimer(myTick);
   dispatcher.tickSeconds = myTick;

   //-- объект dispatcher работает с ордерами, объекты стратегий 
//занимаются только сигналами и с рынком не работают

   //-- простые стратегии торгующие отдельно. наследники класса CStrategy
   //--strategies
   CMAVStrategy *s4 = new CMAVStrategy();
   s4.Symbol = "EURGBP";
   s4.onBars = true;
   s4.TimeFrame = PERIOD_M5;
   s4.HourStart = 7;
   s4.HourEnd = 18;
   s4.Risk = 0.1;
   s4.takeProfit = 2000;
   s4.stopLoss = 450;
   s4.trailingStop = 77;
   s4.lots = 0.1;
   s4.maxLots = 5;
   //--custom;
   s4.period1 = 2;
   s4.max = 0.0025;
   s4.sensity = 0.39;
   s4.unsensity = 0.53;
   s4.init();
   dispatcher.strategies.Add(s4);



   //--strategies
   CADXStrategy *s2 = new CADXStrategy();
   s2.Symbol = "GBPUSD";
   s2.onBars = true;
   s2.TimeFrame = PERIOD_M5;
   //s2.mHourStart = 0;
   //s2.mHourEnd = 24;
   s2.Risk = 0.13;
   s2.takeProfit = 2000;
   s2.stopLoss = 360;
   s2.trailingStop = 150;
   s2.lots = 0.1;
   s2.maxLots = 5;
   //--custom
   s2.period = 17;
   s2.level = 0.0042;
   s2.init();
   dispatcher.strategies.Add(s2);

   //--и т.д.


   //-- адаптивная стратегия содержащая внутри себя виртуальную 
//торговлю подключенного списка(наследники CStrategy опять же), 
//также наследник CStrategy и для dispetcher'a разницы нет
   CAdaptiveStrategy *sadapt4 = new CAdaptiveStrategy();
   sadapt4.onBars = false;
   sadapt4.mRisk = 0.13;
   sadapt4.lots = 0.1;
   sadapt4.performance_variant = 2;
   sadapt4.maxLots = 5;
   sadapt4.init();
        
        // *****************************************   M30
        CADXStrategy *s_gbpjpy1 = new CADXStrategy();    s_gbpjpy1.Symbol = "GBPJPY";    s_gbpjpy1.onBars = true;    s_gbpjpy1.TimeFrame = PERIOD_M30;  s_gbpjpy1.takeProfit = 2000; s_gbpjpy1.trailingStop = 70; s_gbpjpy1.lots = 0.1; s_gbpjpy1.maxLots = 5; 
        s_gbpjpy1.stopLoss = 300;  s_gbpjpy1.init();
        sadapt4.strategies.Add(s_gbpjpy1); //все кладем в адаптивную стратегию
         // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
         // и т.д.
         // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
        


  dispatcher.strategies.Add(sadapt4);


  // наполняем как угодно и чем угодно

  return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   dispatcher.control();
  }
//+------------------------------------------------------------------+
 

Приведенный Вами пример на самом деле очень похож на мой. Различий меньше чем может показаться. Все также реализовано через классы и каждая класс-стратегия имеет свои независимые параметры. Самое большое различие в их компоновке, у Вас все стратегии обрабатывает диспетчер, у меня они обрабатываются в списке типа CObject. На самом деле мой подход не сколько не сложнее Вашего, просто мы говорим о одинаковых вещах, но разным языком.

Изначально я задумывал решить своим подходом любое сочетание трех "мульти-": мультитаймфрейм, мультистратегия, мультиинструмент. Сейчас я вижу в нем гораздо больше. Во второй части, я думаю осветить проблему решений эксперта. Эксперт будет сам решать, как ему торговать, чем ему торговать и когда ему торговать. Все это  позволяет мой подход. Наверное и ваш подход тоже, и это хорошо, потому что несколько решений одного и того же это развитие.

Кстати можно посмотреть на реализацию самого диспетчера?

 
class CDispatcher {
   public:
      CTrade trade;
      CList strategies; 
      CList newOrders; 
      CList currentOrders;
      CList* strategiesResults;
      int repeats;
      int tickSeconds;
   private:
      ulong Magic;            
   public:
      void CDispatcher() {
          strategiesResults = new CList();
          repeats = 5;
          tickSeconds = 1;
      }
      void ~CDispatcher() {
        delete(strategiesResults);
      }
      
      void control();

      bool controlLimits();
      void controlOrders();
      bool controlOpen();
      bool controlClose();
      bool controlModify();      
      ulong ticketOpen(string smb, ENUM_ORDER_TYPE type,double lot,int SL,int TP);
      double countLotByRisk(CSymbolInfo *symbinfo, CStrategy *s, int dist, double risk, double lot, double maxlot);
       double NormalPrice(CSymbolInfo *symbinfo, double d);
      double NormalLot(CSymbolInfo *symbinfo, double lot);
      double BasePrice(CSymbolInfo *symbinfo, int dir);
      double ReversePrice(CSymbolInfo *symbinfo, int dir);
      double ReversType(ENUM_ORDER_TYPE type);
      double NormalTP(CSymbolInfo *symbinfo, int dir,double op,double pr,int TP,double stop);
      double NormalSL(CSymbolInfo *symbinfo, int dir,double op,double pr,int SL,double stop);
      void   checkDeals(CStrategy *s);
       ENUM_ORDER_TYPE getTypeByDirection(int dir);
       int getDirectionByType(ENUM_ORDER_TYPE type);
};
Реализацию выкладывать не буду. Тут и так все понятно. Стратегии все потомки CObject. Но их обрабатывает диспетчер. Нужно идти от простого к сложному. Простой интерфейс объектов, для внешнего наблюдателя, должен скрывать все детали реализации. Просто я хочу сказать ничего экстраординарного в мульти мульти мульти нет вообще. Имея ООП и полиморфизм это все просто делается.
 
Vigor:
Реализацию выкладывать не буду. Тут и так все понятно. Стратегии все потомки CObject. Но их обрабатывает диспетчер. Нужно идти от простого к сложному. Простой интерфейс объектов, для внешнего наблюдателя, должен скрывать все детали реализации. Просто я хочу сказать ничего экстраординарного в мульти мульти мульти нет вообще. Имея ООП и полиморфизм это все просто делается.
+1. Полностью согласен. Да и вообще хочу сказать, что мой подход как две капли воды похож на Ваш. Стратегии все потомки базовой стратегии CModel, которая в свою очередь потомок CObject. Также как и у Вас все инициализируется динамически и засовывается в список. Так же как и у вас есть реализован простой интерфейс объектов скрывающий все детали реализации. Другое дело что мне пришлось в статье описать все реализацию целиком, и поэтому многим показалось что это сложно. Но что бы использовать объекты моего типа даже не обязательно знать, как все это устроено внутри.
 

Василий, огромное спасибо за статью! Читал просто в захлёб! Пошло очень легко, видимо я созрел для такого материала. Над некоторыми вопросами, освещенными в статье, я, как и многие трейдеры, размышлял. Какие-то решил, какие-то нет. А какие-то были только в виде смутной идеи. И было очень приятно-неожиданно увидеть все в таком систематическом изложении.

Масштаб решаемых  вопросов и, тем более, перспектив огромен. Не всякий "ум" дозрел даже до их постановки, не говоря уже о решении. В этом причина комментариев в стиле басни Крылова "Лиса и виноград", ибо "хоть видит око, да зуб неймет." А стремление к самоутверждению неукротимо, поэтому комментируют и надеются, что другие подумают: "Ай, Моська! знать, она сильна, что лает на Слона!" :) Не стоит даже обращать на это внимание.  

Продолжайте творить, с нетерпением ждем продолжения!

P.S. Хотя на MetaTrader 5 еще нельзя работать в реале, можно воспользоваться статьей "Копирование торговли из MetaTrader 5 в MetaTrader 4". Очень толковая, проверенная вещь! Так что всё очень актуально и можно использовать в торговле уже сегодня!

 

......
      За что же, не боясь греха,
      Кукушка хвалит Петуха?

 

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

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