Обсуждение статьи "Ордерные стратегии. Универсальный автомат"

 

Опубликована статья Ордерные стратегии. Универсальный автомат:

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

Ордерные стратегии. Универсальный автомат

Кроме этого, стратегии могут требовать и другого типа анализа. Назовем его анализом текущей торговой ситуации. Он включает в себя анализ состояния торговой позиции и анализ наличия/отсутствия отложенных ордеров (если они используются в стратегии). В результате этого анализа принимается решение о необходимости выполнения каких-либо действий с позицией или ордерами, например - закрытие, перенос Стоп Лосса, установка отложенных ордеров или их удаление и т.п. Другими словам, в этот анализ входит изучение того, что мы выполняем на рынке, и действия в соответствии с созданной нами (или экспертом) ситуацией и правилами применяемой стратегии.

Известный всем трейлинг стоп в какой-то мере можно отнести ко второму типу элементов торговой стратегии. Выполняется анализ: если есть открытая позиция, ее прибыль выше установленной в настройках, а Стоп Лосс отсутствует или дальше указанной в настройках дистанции от текущей цены, то выполняется перенос Стоп Лосса.

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

  1. Анализ рыночной ситуации и выполнении действий на его основе.

  2. Анализ торговой ситуации и выполнение действий на его основе.

  3. Сопровождение позиции.

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

Автор: Дмитрий

 

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

можете ли вы для всех объяснить цель происходящего в коде? (применение пока не интересует, а только организация MQL алгоритмов)

 
поддерживаю, нужен пример как запрограммировать простейшую ТС, хотя бы торговлю по пересечениям медленной и быстрой МА
 
Статья, видимо, не для средних умов. ;-) Цель похвальна - избавить пользователя от необходимости разбираться, что там происходит в коде MQL, и уйти от программирования рутины. Примеров ТС (на мета-языке) вроде предоставлено достаточно. Но сам мета-язык может потребовать времени в освоении. Может быть со временем удастся его упростить или дорастить визуальным дизайнером стратегий, тогда недовольных станет поменьше или они начнут жаловаться на то, что кнопочки размещены не в том месте. ;-)
 

Кхм...
Похоже на статью "от программиста для программистов". Только не понятно кто (кроме автора) этим будет пользоваться. "Выучить mql5" vs "Выучить eIntepretar".

А работа проделана просто колоссальная, вызывает восхищение. 

 
sergeev:

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

можете ли вы для всех объяснить цель происходящего в коде? (применение пока не интересует, а только организация MQL алгоритмов)

Справочных там 3 или 4-ре таблицы. Остальные, это макросы с комментариями. Статья очень информационно насыщена, ее нужно читать не пропуская ни одного слова, не переходить к следующему, если осталась хоть одна непонятная мысль (конечно, если надо и если хочется). Вероятно, однократное прочтение не поможет. Если постараться выделить центральную мысль, она не такая уж большая и сложная: любую стратегию на ордерах надо разложить на все возможные фазы состояний, но это уже личный творческий процесс, не формализуемый. Хотя, при желании, можно и его формализовать, только писанины много будет.

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

Примеры кода. Функции StringFind() и StringSubstr(). Вообще, может быть полезным поизучать строковые функции в PHP - это может очень расширить творческий потенциал...

Если постараться изложить весь объем информации представленный в статье как-то иначе, она бы могла поучиться раз в 5-10 объемней...

Происходящее в коде... Прочитать файл по строкам известно как, отделить комментарий по знаку "#", разбить на поле фазы и действий по знаку "|".Разделить команды по знаку ";". Потом в выражениях сравнения ищутся подстроки <, >, <=, <= и т.п. Какая нашлась засекаем ее индекс, и по ней выражение разделяется на левую и правую части. Остается арифметическое выражение. Если оно начинается с + или -, делаем отступ на один знак и ищем + или - перед которым нет знака *. По этому + или - разбиваем на подстроки, а эти две подстроки разбиваем по знаку *. После этого имеем четыре аргумента (и еще один с левой стороны выражения). Эти аргументы могут быть командами. Проверяем число ли это, или число с буквой p на конце, или пользовательская переменная или пользовательская переменная с p на конце, если так, то заменяем на число. Если нет - значит команда. У команды отделяем саму команду и аргументы по знаку (.

Самое интересное - вычисление выражений. Есть структуры, в структуре по пять структур со значениями, в структуре значений указано, является ли значение непосредственно числовым или командой. Для каждой структуры со значением вызывается функция для вычисления значения. Если значение числовое, функция ничего не делает, если команда, то вызывается соответствующая функция (выбирается через switch). После заполнения значений выполняется вычисление арифметическго выражение, там в структуре указаны знаки для значений и арифметическое действие... Только все указано числами (индексами), а необходимое действие выбирается через switch.

Сам процесс рабочей интерпретации - это два уровня switch: команда и вложенные для идентификатора получаемых о команде данных. Если интересно, покопайтесь в коде от функции OnTick(), от нее не много отходит. Наибольшее количество кода от функции OnInit() отходит, но там не так, чтобы сильно интересно, может быть сделано кому как удобней – исключительно функции StringFind() и StrSubstr().


Документация по MQL5: Строковые функции / StringFind
Документация по MQL5: Строковые функции / StringFind
  • www.mql5.com
Строковые функции / StringFind - Документация по MQL5
 
IgorM:
поддерживаю, нужен пример как запрограммировать простейшую ТС, хотя бы торговлю по пересечениям медленной и быстрой МА


Кхе...  Сначала надобы прочитать статью полностью. 

 
marketeer:
...дорастить визуальным дизайнером стратегий...

Хорошая мысль, одна проблема отпадет... но мелкая, всеравно надо будет обдумывать стратегию, анализировать ее, разбивать на фазы.

 

 
komposter:

Кхм...
Похоже на статью "от программиста для программистов". Только не понятно кто (кроме автора) этим будет пользоваться. "Выучить mql5" vs "Выучить eIntepretar".

А работа проделана просто колоссальная, вызывает восхищение. 

Ну есть немножко, аля "Crazy scientist"... В качестве утешительного приза представлено описание нескольких ордерных стратегий, пусть не очень подробное, но с картинками... Кому-нибудь, может быть, хоть это окажется полезным... 

 

 

Если постараться изложить весь объем информации представленный в статье как-то иначе, она бы могла поучиться раз в 5-10 объемней...

можно было бы справочные таблицы убрать в док и просто приложить к статье


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

Дмитрий поправь меня если я не прав.


Итак, работа эксперта будет заключаться в проверке состояний. Всех. По пунктам.
И если какое-то из состояний актуально в данный момент - то делаем то, что предписывает макрос для этого состояния. 
Задача в том, чтоб не создать противоречия - чтоб несколько макросов обрабатывали одно и то же состояние, или чтоб не конфликтовали два макроса (например один закрывает, а второй тут же открывает, и будет "драка")

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


Например, допустим  у нас есть просто стратегия (даже индикаторная). 
Нужно при пересечении МА открыть ордер. Потом потралить его. И при каком то прифите закрыть принудительно.

Что делает программист в таком случае.

Он пишет ТРИ функции (типа макросы в твоем случае)
- функцию проверки индикатора и открытия ордера, если индикатор дал добро и нет поз.
- функцию трала, при наличии позы
- функцию закрытия, при наличии ордера и наличии профита у него

Порядок вызова этих функций может быть любой. Достаточно их разместить на проверке в OnTick например

OnTick()
{
   OpenOrder()
   TralPos()
   CloseProfit()
}

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


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



типа так?


 
sergeev:

можно было бы справочные таблицы убрать в док и просто приложить к статье

Это вопрос вкуса, зато, если внутри статьи, не потеряютя.


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

Дмитрий поправь меня если я не прав.


Итак, работа эксперта будет заключаться в проверке состояний. Всех. По пунктам.

 Да. На каждом тике проверятся соответствие всем фазам. 


И если какое-то из состояний актуально в данный момент - то делаем то, что предписывает макрос для этого состояния. 

Да. Но есть некоторые нюансы. Если выполняется рыночное действие, оно должно быть одно и стоять на первом месте. Если установка отложенного ордера, то перед выполнением установки эксперт сам проверяется его существоание. 

Задача в том, чтоб не создать противоречия - чтоб несколько макросов обрабатывали одно и то же состояние, или чтоб не конфликтовали два макроса (например один закрывает, а второй тут же открывает, и будет "драка")

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

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

Да.

 


Например, допустим  у нас есть просто стратегия (даже индикаторная). 
Нужно при пересечении МА открыть ордер. Потом потралить его. И при каком то прифите закрыть принудительно.

Да. 

Что делает программист в таком случае.

Он пишет ТРИ функции (типа макросы в твоем случае)
- функцию проверки индикатора и открытия ордера, если индикатор дал добро и нет поз.

Это одна фаза: есть сигнал индикатора, нет позиции. В этом случае свое действие - открытиепозиции.

- функцию трала, при наличии позы

Это можно записать отделной фазой. Идентификация фазы - наличие рыночной позиции. Соответстующее действие - вызов функции трала. 


- функцию закрытия, при наличии ордера и наличии профита у него

Это третья фаза. Есть позиция и ее профит больше заданного значение. Действие - закрыть позицию. 


Порядок вызова этих функций может быть любой. Достаточно их разместить на проверке в OnTick например

И в файле с метапрограммой можно строки в разном порядке размещать. 



OnTick()
{
   OpenOrder()
   TralPos()
   CloseProfit()
}

То есть сами по себе функции независимы.

Получается, что и строки в файле с метапрограммой независимы.


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

Так же и одна строка метапрограммы самодостаточна.


Аналогично и CloseProfit самостоятельна.


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

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

типа так?

Один моментик, который может вызывать непонимание. У меня как-то смазана разница между действием и состоянием в статье. Если при идентификации какой-то фазы следует сделать какое-то рыночное действие, то это так и следует называть действием. А когда надо установить отложенные ордера, то это скоре будет называться описанием состояния. Фаза в основном идентифицируется по комментарию в рыночной позиции, а этой фазе соответствует или действие (открытие/закрытие рыночной позиции) или состояние (наличие каких-то отложенных ордеров). Если же рыночное действие, то подразумевается, что после его выполнения будет переход к другой фазе. Важно правильно маркировать ордера. Но и в одной фазе может быть и рыночное действие, и установка ордеров. Если рыночное действие неудачно, то все что после него не будет выпоняться.  А если удачно - то будет, это на случай, чтобы на одном тике постараться сделать как можно больше. Здесь надо иметь ввиду, что ордера могут не установиться, а рыночне действие вполнено, т.е. произошел переход к другой фазе. 

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