Немного теории

При программировании торговых роботов мы имеем дело с событиями, которые либо уже произошли, либо ожидаем их наступления в будущем по определенным нами условиям, либо их появление мы не ожидаем и они наступают внезапно для нас.

События характеризуются своими признаками(параметрами).

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

Заявки содержат информацию о намерениях биржевых игроков.

Сделки содержат информацию об изменении рыночных позиций игроков.

Совершаемые роботом сделки приводят к изменению его позиции.

Введем следующее определения позиции.

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

Если должны нам , т е например мы купили что-то , то наша позиция по активам увеличилась на купленное количество,  если мы продали, т е должны мы , то позиция уменьшилась на проданное количество.

Если в результате наших торговых сделок наша позиция положительная , то она называется Long, если отрицательная — Short, если нулевая — то вне рынка.

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

Таким образом, конечная цель стратегии — увеличение собственного капитала.

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

 

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

Признаки событий

Все события хранятся в истории tHS, которая содержит определение и значения событий. Определение события состоит из описания первичных и вторичных признаков.

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

Все моменты времени наступления всех событий хранятся в календаре tDT.

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

Т е это признаки событий, которые даны нам свыше, т е с биржи.

Вторичные признаки — это результат любых функциональных либо интегральных преобразований первичных признаков.

Функциональное преобразование — это создание нового признака с помощью некоторой масштабирующей функции.

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

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

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

В результате последовательности таких преобразований мы получаем решение.

продолжение следует …

В этой заметке я начинаю сказ о своем языке программирования торговых стратегий роботов- Language of trade strategies robots (LTSR).

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

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

Скриптовые языки, такие как LUA, MT,AFL более просты в изучении.

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

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

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

Но проблема в том, что описание таких действий , как правило , носит умозрительный, субъективный характер.

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

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

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

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

 

продолжение следует …

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

Результат с произвольно выбранными периодами 20 и 100 соответственно,  для 3000 свечей с интервалом 5 минут составил:

успешных сделок 31.7%
прибыль  -0.16% (т е убыток)
сделок всего  41

—————————————

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

160503_002

 

 

 

 

 

 

 

———————————————————————————————

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

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

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

——————————————————-

Можно  существенно улучшить данный алгоритм.

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

Т е вместо двух скользящих применяем одну.

Вот один из моих простых алгоритмов генерации торговых сигналов
Если Low закрытой свечи выше скользящей и позиция short или вне рынка, то покупаем.
Если High ниже скользящей и позиция long или вне рынка, то продаем.
Кроме того, исключим генерацию сигналов вне торговой сессии.

——————————————————————

теперь запрограммируем этот алгоритм:

файл intS.lua:

Settings.nki =‘EMA(Y,C,N)’;
Settings.nks=’nk_test_sig.lua’; 
Settings.N =100;

———————————————————

файл nk_test_sig.lua
— S — последний торговый сигнал.
—L,H — Low,High последней закрытой свечи
 =1,  L>Y  and  S<=0
=-1,  H<Y  and  S>=0
————————————————————————

И вот что получилось в результате:

160503_003

 

 

 

 

 

 

 

——————————————————————————————

В результате получили:

успешных сделок 28.8%
прибыль  2.41%
сделок всего  59

—————————————————————————————-

продолжение следует …