Самообучение языку MQL5 с полного нуля - страница 70

 
MrBrooklin:

Надо всё называть своими именами - в настоящий момент в программировании тупой, как пробка! Не понимаю элементарных вещей. Хотя вот в электронике знания, полученные в молодости, до сих пор помогают отремонтировать, например, дистанционную радиокнопку от квартирного звонка. В прошлые выходные с помощью мультиметра и дедовской лупы нашел неисправный SMD конденсатор, микроскопических размеров. Показывал пробой, короткое замыкание или "козу", как раньше называли от сокращения к.з., т.е. короткое замыкание. Вот фото "пробитого" SMD конденсатора с 4-х кратным увеличением на смартфоне и последующей обработкой в Paint, т.к. слишком микроскопичный элемент.


Решил немного отступить от темы и хоть чем-нибудь похвалиться!

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

С уважением, Владимир


Класс! Эти вещи все, кстати, рядом находятся...
У нас в ВУЗе, я учился в 90-х, эти кафедры находились на одном факультете информационных технологий.
 
Roman Shiredchenko:

Здесь - позвольте с вами не согласиться, можно и нужно кодом, что вам мешает вникать в его суть... разбираться и прочее... также ИМХО, есть статьи, есть роботы в кодобазе - читайте, разбирайте код уже готовый - учитесь стилистике написания сразу. Зачем вам изобретать велосипед? Учитесь сразу по грамотным кодам.

Вот уже трал от В. Карпутова - именно в РОБОТАХ выложен, смотрите - правьте под свои нужды (условия и ваши фантазии).

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

Спсб, за ветвь! :-) (без шуток)

Здравствуйте, Роман! Приятно читать про то, что созданная тема, ещё кому-то помогает, кроме меня самого. Спасибо!

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

В большей степени ищу и изучаю коды, которые написаны без включаемых файлов и классов. Для самообучения очень хороши советники, написанные Владимиром Хлыстовым. Ему отдельное и БОЛЬШОЕ СПАСИБО! Жаль, что на языке MQL5 у него слишком мало советников.

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

Ничего страшного в изучении языка MQL5 не вижу. Просто сейчас у меня в жизни примерно такой же этап, когда занимался электроникой и переходил от изучения одной элементной базы к изучению другой. Только разница в том, что в молодости всё легче воспринимается и усваивается, чем сейчас. Это уже прочувствовал.

Выражаю ВСЕМ искреннюю благодарность за слова поддержки и конструктивные советы! Изучение языка программирования MQL5 - продолжаю! На полдня "пропаду", т.к. нужно съездить по делам на другой конец Москвы, а затем продолжу.

С уважением, Владимир.

 
Aleksey Masterov:

Класс! Эти вещи все, кстати, рядом находятся...
У нас в ВУЗе, я учился в 90-х, эти кафедры находились на одном факультете информационных технологий.

 в 90-х, покупали дипломы. 

- разве не видно теперь, во всех кабинетах сидят эти кафедристы   

 
SanAlex:

 в 90-х, покупали дипломы. 

- разве не видно теперь, во всех кабинетах сидят эти кафедристы   

Дело даже не в возможности купить диплом в то время, дело в том, что за последние 30 лет технология шагнула так далеко, что тех знаний уже ОЧЕНЬ не хватает, мне например потом приходилось доучиваться автокаду которого тогда ещё просто не было, также сделал ОЧЕНЬ базовый С++. и так во всём, надо постоянно доучиваться, совершенствоваться, идти в ногу со временем)

 
VVT:

Дело даже не в возможности купить диплом в то время, дело в том, что за последние 30 лет технология шагнула так далеко, что тех знаний уже ОЧЕНЬ не хватает, мне например потом приходилось доучиваться автокаду которого тогда ещё просто не было, также сделал ОЧЕНЬ базовый С++. и так во всём, надо постоянно доучиваться, совершенствоваться, идти в ногу со временем)

за последние 30 лет технология шагнула так далеко - что использует ещё те разработки, времён 60

 

Всем добрый день!

Хотел немного добавить, тема интересна, мне кажется сама идея "Самообучение языку MQL5 с полного нуля" не совсем верна, если человек 0 в программировании, то ему для начала нужно научиться программировать. Если цель научиться программировать именно на MQL  с нуля, то нужно вначале научиться программировать на С, хотя-бы самый базис, а потом научиться писать на MQL, так как MQL это по сути С и есть, но специализированый, заточенный под определенную задачу, человек не понимает как циклы работают, а уже пытается во всю программы писать. Это все равно, что пытаться выучить феню не зная русского...

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

Чтобы научиться просто программировать с нуля, для базы, чтобы научиться говорить с компьютером на одном (неважно пока каком) языке, я бы посоветовал начать с Pascal'я,  самую простую книгу для начала прорешать на нем (недели 2-3 на расслабоне), потом С (тут после паскаля неделя максимум при усердии, освоить синтаксис, я про базовые знания языка!) а уже потом браться за специализированные языки типа MQL, потому, что MQL - это С, с небольшими заморочками но и упрощениями, так как заточен на одну задачу и очевидное компилятор знает сам. А С в свою очередь, это такой сжатый RARом паскаль, ну а паскаль почти английский =).

Теперь по циклам:

Мне когда учился программировать помогла аналогия с суммой в алгебре, где указываются начальное значение n, конечное значение n и формула с этим n для расчета. 

 
VVT:

Дело даже не в возможности купить диплом в то время, дело в том, что за последние 30 лет технология шагнула так далеко, что тех знаний уже ОЧЕНЬ не хватает, мне например потом приходилось доучиваться автокаду которого тогда ещё просто не было, также сделал ОЧЕНЬ базовый С++. и так во всём, надо постоянно доучиваться, совершенствоваться, идти в ногу со временем)



:-) автокад был. У нас были занятия на его базе учили схемотехнику и расположение слоев...печатных плат
 
Aleksey Masterov:
:-) автокад был. У нас были занятия на его базе учили схемотехнику и расположение слоев...печатных плат

У нас было всего 22 компьютера, которые загружались только к концу занятия) учитель их просто не выключал в течении дня, работать было невозможно, о каде речь даже и не шла...

 
MrBrooklin:

Здравствуйте, Роман! Приятно читать про то, что созданная тема, ещё кому-то помогает, кроме меня самого. Спасибо!

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

В большей степени ищу и изучаю коды, которые написаны без включаемых файлов и классов. Для самообучения очень хороши советники, написанные Владимиром Хлыстовым. Ему отдельное и БОЛЬШОЕ СПАСИБО! Жаль, что на языке MQL5 у него слишком мало советников.

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

Ничего страшного в изучении языка MQL5 не вижу. Просто сейчас у меня в жизни примерно такой же этап, когда занимался электроникой и переходил от изучения одной элементной базы к изучению другой. Только разница в том, что в молодости всё легче воспринимается и усваивается, чем сейчас. Это уже прочувствовал.

Выражаю ВСЕМ искреннюю благодарность за слова поддержки и конструктивные советы! Изучение языка программирования MQL5 - продолжаю! На полдня "пропаду", т.к. нужно съездить по делам на другой конец Москвы, а затем продолжу.

С уважением, Владимир

Да. Согласен - его коды тож гуд! Вы себя накручиваете на пустом месте. Спокойно разбирайтесь в коде без спешки и все. Вот же все элементарно здесь - выбрали и тралим: (куда уж проще - как раз ваша тема выбора НУЖНОЙ позиции... :-))

//--- при таком методе мы будет сюда попадать на каждом тике.
   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            //--- TrailingStop -> подтягивание StopLoss у ПРИБЫЛЬНОЙ позиции
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               //--- когда у позиции ещё нет StopLoss
               if(m_position.StopLoss()==0)
                 {
                  //--- пока StopLoss равен 0.0, TrailingStep не учитываем
                  if(m_symbol.Bid()-ExtTrailingStop>m_position.PriceOpen())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),m_position.PriceOpen(),0.0);
                    }
                 }
               //--- у позиции уже есть StopLoss
               else
                 {
                  //--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
                  //--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
                  if(m_symbol.Bid()-ExtTrailingStop-ExtTrailingStep>m_position.StopLoss())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),
                                            NormalizeDouble(m_symbol.Bid()-ExtTrailingStop,m_symbol.Digits()),0.0);
                    }
                 }
              }

            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               //--- когда у позиции ещё нет StopLoss
               if(m_position.StopLoss()==0)
                 {
                  //--- пока StopLoss равен 0.0, TrailingStep не учитываем
                  if(m_symbol.Ask()+ExtTrailingStop<m_position.PriceOpen())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),m_position.PriceOpen(),0.0);
                    }
                 }
               //--- у позиции уже есть StopLoss
               else
                 {
                  //--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
                  //--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
                  if(m_symbol.Ask()+ExtTrailingStop+ExtTrailingStep<m_position.StopLoss())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),
                                            NormalizeDouble(m_symbol.Ask()+ExtTrailingStop,m_symbol.Digits()),0.0);
                    }
                 }
              }
           }
  }

Кроме этого, включаемые файлы - это значит, что они у вас в коде типа также расположены в виде функций и все.

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
 

Вот еще статья - трал 2010 год - трал есть в советнике из стандартной поставки MACD.



Вот еще классно жует про объем позиций расчет!!! Сам углубился... :-)

Возможен другой способ определения общего объема позиции на символе - пройтись в цикле по всем позициям, количество позиций определяется функцией PositionsTotal(). Проверя при помощи функции PositionGetSymbol(), найти нужный символ и определить объем и направление позиции (PositionGetDouble() с идентификатором POSITION_VOLUME и PositionGetInteger() с идентификатором POSITION_TYPE).

В этом случае полностью готовая функция будет иметь вид: 

double fSymbolLots(string aSymbol)
  {
   double TmpLots=0;
   for(int i=0;i<PositionsTotal();i++) // Перебор всех позиций
     {
      if(PositionGetSymbol(i)==aSymbol) // Найдена позиция с заданным символом
        {
         TmpLots=PositionGetDouble(POSITION_VOLUME);
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            TmpLots*=-1; // В зависимости от направления позиции устанавливаем знак числа
           }
         break;
        }
     }
   TmpLots=NormalizeDouble(TmpLots,2);
   return(TmpLots);
  }
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • www.mql5.com
Перед тем как приступить к разговору на тему статьи, предлагаю расставить точки над i. Лишний раз не помешает определиться с понятиями "позиция" и "ордер": Позиция - это рыночное обязательство, количество купленных или проданных контрактов по финансовому инструменту. Позиция по одному инструменту может быть только одна. Ордер - это распоряжение...
Причина обращения: