Азбука MQL5

 

Здравствуйте господа. Прошу помощи в указании эффективного пути изучения MQL5. Хочется наметить структуру этого пути и ему следовать, отдавая себе отчет в темпе продвижения и перспективах. Тему завожу потому как на данный момент "общая картина" пока не вырисовалась и возникают сомнения относительно выбора эффективного алгоритма из всего пространства возможных алгоритмов обучения.

В данный момент читаются Справочник MQL5 и хаотично статьи с данного ресурса такие как Быстрый старт или краткий курс для начинающихМастер MQL5: Создание эксперта без программирования Пошаговое руководство по написанию MQL5-советников для начинающихСоздай торговый робот за 6 шагов!Прототип торгового роботаНаписание советника в MQL5 с использованием объектно-ориентированного подхода и тд.

Некоторые статьи перевариваются легко другие порождают ряд вопросов. Я понимаю что это нормальный процесс, вот только хочется сделать некоторый набросок общего пути, до скажем так, "среднего уровня", какой объём информации нужно поглотить и переварить для этого и какого рода практические задания сделать и осмыслить. Иными словами я говорю о "метаобучении", если так можно выразиться... Алгоритме обучения писать торговые системы на mql5. 

 Очень хотелось бы классифицировать существующие статьи на данном ресурсе в порядке следования усложнения, возможные пересечения(дублирование) материала в статьях и необходимый минимум для старта. То есть сделать виртуальный учебник из последовательности статей сайта. Это бы очень помогло новичкам. таким как я, которых часто сбивает с толку колоссальный объём информации и не очевидная её структурность и иерархичность. 

По справочнику, предполагаю что из него нужно в обязательном порядке прочесть и осмыслить как минимум раздел "Основы языка", и просмотреть содержание остальных частей для того чтобы в случае необходимости знать где искать и вообще о существовании некоторой темы, функции, класса и тп. Или я не верно мыслю и есть разделы которые христоматичьны также как "Основы языка" в справочнике?

Заранее прошу прощения за возможно протёртую до дыр тему... но для меня это важно и пока не нашел последовательности поглощения материала, а хаотично кушать вредно для здоровья)))

Спасибо за внимание. 

 

Вот краткий сборник статей по MQL5, который может быть полезен:

  1. Начало
  2. Индикаторы
  3. Эксперты (Торговые роботы)
  4. Графические элементы
  5. Тестирование и оптимизация
  6. Торговые системы
  7. Язык MQL5

Смотрите, критикуйте, предлагайте.

 

Так что для Вас важнее: научится самому, или систематизировать всё то, с чем пришлось столкнуться?

 

Большое спасибо Rosh за оперативный ответ и наглядный каталог статей! Буду изучать, когда же накопится некоторый набор знаний начну задавать предметные вопросы и высказывать разного рода измышления. Пока рано критиковать и предлагать, так как совсем ламерские вопросы и утверждения могут вызвать праведный гнев у профи))

 

Yedelkin:

Так что для Вас важнее: научится самому, или систематизировать всё то, с чем пришлось столкнуться?

Безусловно научиться самому главная доминта. Систематизация нужна как своего рода маяк, ориентировка в так сказать "пространстве научения", не секрет что обучение одному и тому же, может разительно отличаться как по скорости, так и по качеству, не говоря уже о субъективных компонентах, таких как степень "интересности" и удовлетворения процессом. Причем отличия могут быть величинами значительными, в порядки раз, а это может быть большим акселератором или препятствием продвижения в мире где время главное богатство. 

Поэтому нужна "карта" информационного пространства, которое планируется к освоению. Она нужна в первую очередь для экономии ресурсов мозга, для быстрого доступа к её содержимому по только "адресу", без необходимости запоминания всего объёма, который быстро усвоить на мой взгляд, не только мммм.. сложно, но и неразумно. Некоторый "каркас" всё равно необходимо впитать, это без сомнений, суть в поиске золотой середины, а для этого информационный каркас должен быть максимально иерархично структурирован и очищен от избыточности, или хотя бы с указанием где таковая есть.

От общего к частностям, другими словами. Например хочется избежать на начальных этапах, тратить время на изучение множества способов получения одного и того же, это безусловно интересно, но менее приоритетно по сравнению с получением разных результатов разными способами. Проводя аналогию с деревом, можно сказать, что для начала хочется изучить ствол, затем крупные ветки, мельче и потом процедуру отыскания совсем мелких веток, но не последовательно перечислять и запоминать, каждую веточьку произвольной величины, в хаотичном порядке. Возможно людям с сверх памятью перечисление и подойдет, но у меня уклон скорее в логику, за счет к сожалению убытка памяти((  А в справочнике 3515 страниц! И это лаконичная информация а не художественный роман, чтобы запомнить и проанализировать такой объём, нужны многие годы если действовать в лоб...

Потому и вопрошаю форумчан по теме как они картируют местность знаний.

 
chtacK: Безусловно научиться самому - главная доминта. Систематизация нужна как своего рода маяк, ориентировка, в так сказать, "пространстве научения"...

 Тогда предлагаю отложить вопросы систематизации материала в дальнюю папку. Ибо для систематизации материала требуется его понимание, а из тех, кто понимает материал, пока никто не взялся за систематизацию.

chtacK: Потому и вопрошаю форумчан по теме как они квартируют местность знаний.

У каждого здесь, конечно, своё видение вопроса, но предлагаю свой вариант: если Вы взялись за изучение языка, значит, уже представляете себе немного область его применения. Вот и попробуйте самостоятельно, с нуля, нарисовать свой первый простенький индикатор. Пусть даже это будет просто линия, соединяющая цены закрытия баров. Дальше можно будет попробовать какой-нибудь осциллятор в отдельном окне, затем - ленты Боллинджера, например. Потом появится наглость попробовать написать свой первый советник, и т.д.

А статьи, которые придётся прочитать, перечислены выше. Лично мне в своё время хватило для начала одной из этих:

  • Знакомство с MQL5: написание простого советника и индикатора
  • Пошаговое руководство по написанию MQL5-советников для начинающих
  • Удачи! Ну и форум в помощь.

     
    Yedelkin:

     Тогда предлагаю отложить вопросы систематизации материала в дальнюю папку. Ибо для систематизации материала требуется его понимание, а из тех, кто понимает материал, пока никто не взялся за систематизацию.

    У каждого здесь, конечно, своё видение вопроса, но предлагаю свой вариант: если Вы взялись за изучение языка, значит, уже представляете себе немного область его применения. Вот и попробуйте самостоятельно, с нуля, нарисовать свой первый простенький индикатор. Пусть даже это будет просто линия, соединяющая цены закрытия баров. Дальше можно будет попробовать какой-нибудь осциллятор в отдельном окне, затем - ленты Боллинджера, например. Потом появится наглость попробовать написать свой первый советник, и т.д.

    А статьи, которые придётся прочитать, перечислены выше. Лично мне в своё время хватило для начала одной из этих:

  • Знакомство с MQL5: написание простого советника и индикатора
  • Пошаговое руководство по написанию MQL5-советников для начинающих
  • Удачи! Ну и форум в помощь.

    Спасибо Yedelkin !  Примерно так я и предполагал действовать и собственно действую)) в отсутствии более общего алгоритма добычи знаний. То есть дочитал вот уже "Основы языка" в справочнике , несколько статей указанных выше с данного замечательного ресурса, и теперь экспериментирую с простейшими советниками, совсем простейщими... Пока что цель так сказать прочувствовать систему с самого основания. А так как mql5 это не С++ и Print("Hello World") нельзя назвать первым шагом, но 

    input float lotSize = 0.1;
    
    #include <Trade\Trade.mqh>
    
    int OnInit()
    {
    
    CTrade trade;
    trade.Buy(lotSize);
    
    return(0);
    }

    вполне можно назвать элементарным характерным "стерильным" началом))

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

    В итоге получится(вероятней всего), наглядный пример развития навыков с самого нуля до надеюсь приемлемых результатов, сосредоточенных в одной ветке, что возможно будет полезно в будущем для таких же нубов как я сейчас.

     

     

     

    Везёт Вам! Сразу с классов начали.

    Интересная идея - создать азбуку на основании собственного опыта обучения. ..Стилизатор кода: " Ctrl+, ".

     
    Rosh:

    Вот краткий сборник статей по MQL5, который может быть полезен:

    1. Начало
    2. Индикаторы
    3. Эксперты (Торговые роботы)
    4. Графические элементы
    5. Тестирование и оптимизация
    6. Торговые системы
    7. Язык MQL5

    Смотрите, критикуйте, предлагайте.

    Все это похоже на содержание  книги не находите Roch ?? Об этом -  электронной книге как то раз писал Renat.

     Может вам заняться к раз таки ! 

     
    Yedelkin:

    ... Вот и попробуйте самостоятельно, с нуля, нарисовать свой первый простенький индикатор. Пусть даже это будет просто линия, соединяющая цены закрытия баров. Дальше можно будет попробовать какой-нибудь осциллятор ...

    Задача построения линии соединяющих клосы баров оказалась тривиальной если использовать визард. Суть в том чтобы приравнять индикаторный буфер к нужной величине бара (open[],high[],low[],close[],tick_volume[],volume[],spread[] или price[]) 1234

    Код получился такой:

    #property indicator_chart_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    #property indicator_label1  "Label1"
    #property indicator_type1   DRAW_LINE
    #property indicator_color1  clrRed
    #property indicator_style1  STYLE_SOLID
    #property indicator_width1  1
    
    double         Label1Buffer[];
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    
       SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
    
    //---
       return(0);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total,
                    const int prev_calculated,
                    const datetime &time[],
                    const double &open[],
                    const double &high[],
                    const double &low[],
                    const double &close[],
                    const long &tick_volume[],
                    const long &volume[],
                    const int &spread[]
                    )
      {
    
       for(int i=0; i<=rates_total; i++)
         {
          Label1Buffer[i]=close[i];
         }
    
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    

     Вся главная суть в цикле

       for(int i=0; i<=rates_total; i++)
         {
          Label1Buffer[i]=close[i];
         }

    Сразу возникли мысли по поводу реализации чего то более осмысленного, а именно получить производную от простой скользящей средней, первую и вторую. Вроде как простая производная от значения индикатора мне не встречалась как индикатор, а по идее это может оказаться важным индикатором, как никак первая производная от МА может показывать скорость тренда, а вторая его ускорение, которое есть вероятный признак разворота, что по идее замечательно. То есть нужно вычислить разность (iМА(bar) - iMA(bar-1))/timestep. То есть массив скользящей средней в цикле перебрать и записать в буфер разность соседних элементов, всё без ошибок вроде как в коде, но на графике фигня(((( не могу понять в чем баг пока...

     

    #property indicator_separate_window
    #property indicator_minimum -1
    #property indicator_maximum 1
    #property indicator_buffers 3
    #property indicator_plots   1
    //--- plot Label1
    #property indicator_label1  "Label1"
    #property indicator_type1   DRAW_HISTOGRAM
    #property indicator_color1  clrRed
    #property indicator_style1  STYLE_SOLID
    #property indicator_width1  1
    //--- indicator buffers
    
    input int MAPeriod= 10;
    input int MAShift = 0;
    
    double ExtLineBuffer[];
    double MA[];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+  
    void OnInit()
      {
       SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
       SetIndexBuffer(1,MA,INDICATOR_DATA);
       PlotIndexSetInteger(0,PLOT_SHIFT,MAShift);
       PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,MAPeriod-1);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[])
      {
       if(rates_total<MAPeriod-1)
          return(0);
    
       int first,bar,iii;
       double Sum,SMA;
    
       if(prev_calculated==0)
          first=MAPeriod-1+begin;
       else first=prev_calculated-1;
    
       for(bar=first; bar<rates_total; bar++)
         {
          Sum=0.0;
          for(iii=0; iii<MAPeriod; iii++)
             Sum+=price[bar-iii];
    
          SMA=Sum/MAPeriod;
    
          MA[bar]=SMA;
         }
    
    
    //Производная
       for(int i=0; i<=rates_total; i++)
         {
          ExtLineBuffer[i]=MA[i]-MA[i-1];
         }
    
    
    
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    

     


     ПЭ сэ...

    Yedelkin:

    Везёт Вам! Сразу с классов начали.

    Интересная идея - создать азбуку на основании собственного опыта обучения. ..Стилизатор кода: " Ctrl+, ".

     Великолепный трюк! Спасибо! 

     
    chtacK:

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

    Это также есть в статьях. Например, посмотрите https://www.mql5.com/ru/articles/190#Blau_MACD
    Индикаторы и торговые системы Уильяма Блау на MQL5. Часть 1: Индикаторы
    Индикаторы и торговые системы Уильяма Блау на MQL5. Часть 1: Индикаторы
    • 2011.04.22
    • Andrey N. Bolkonsky
    • www.mql5.com
    В статье представлено описание разработанных на MQL5 индикаторов по книге Уильяма Блау (William Blau) "Моментум, направленность и расхождение". Подход Уильяма Блау позволяет достаточно точно и с минимальным запаздыванием аппроксимировать колебания ценовой кривой, выделять тенденцию ценового движения и поворотные точки и устранять ценовой шум. При этом мы можем также получать сигналы о перекупленности/перепроданности рынка, сигналы об окончании тренда и о развороте ценового движения.
     
    chtacK: Сразу возникли мысли по поводу реализации чего то более осмысленного, а именно получить производную от простой скользящей средней, первую и вторую. Вроде как простая производная от значения индикатора мне не встречалась как индикатор, а по идее это может оказаться важным индикатором, как никак первая производная от МА может показывать скорость тренда, а вторая его ускорение, которое есть вероятный признак разворота, что по идее замечательно. То есть нужно вычислить разность (iМА(bar) - iMA(bar-1))/timestep. То есть массив скользящей средней в цикле перебрать и записать в буфер разность соседних элементов, всё без ошибок вроде как в коде, но на графике фигня(((( не могу понять в чем баг пока...

    Значения МА и её "производной" могут оказаться совершенно разного порядка. И с  трудом помещаться на один график (в одном окне). Выводить график "производной" в отдельное окно не пробовали?

    А вот это

       int first,bar,iii; 
       double Sum,SMA;
    можно вообще вынести на глобальный уровень программы.
    Причина обращения: