В этой заметке я начинаю сказ о своем языке программирования торговых стратегий роботов- 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

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

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

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

Цель создания конструктора -максимально упростить разработку торговых роботов на основе торгового терминала QUIK и библиотеки QLUA.

Какие задачи можно решать на этом конструкторе.

  1. Написание алгоритмов торговых сигналов
  2. Тестирование алгоритма
  3. Оптимизация параметров
  4. Подключение в режиме реальных торгов

———————————
Конструктор выполнен в виде индикатора и минимум одного скрипта и предназначен для торговли акциями.
индикатор имеет имя nk_bot.

На его основе реализуются первые три пункта указанные выше.
Подключение к реальным торгам осуществляется с помощью специального скрипта.
В данной заметке я расскажу и покажу как написать алгоритм( генератор) торговых сигналов и посмотреть результаты его работы.
—————————
Для программирования любого алгоритма есть два файла
файл  initS.lua —  инициализация параметров робота
имя второго файла задается в файле initS.lua. По умолчанию его имя nk_test_sig.lua.
Этот файл содержит собственно алгоритм генерации торговых сигналов.
—————————-
Для примера напишем робот на основе алгоритма пересечения двух скользящих.
т е алгоритм генерации сигналов будет такой:
Берем две скользящие, назовем их Y1  и Y2 , с периодами N1 и N2 соответственно.
Если Y1 пересекает Y2 снизу вверх, то покупаем.
Если сверху вниз, то продаем.
Имена наших индикаторов должны начинаться с  символа подчеркивания  и далее любые алфавитно цифровые символы.
———————————
Рассмотрим подробнее содержимое файлов и добавим в них необходимые изменения для реализации нашего торгового алгоритма.
—————————————
файл initS.lua Имеет следующий вид:
Settings.nki=’EMA(Y1,C,N1);EMA(Y2,C,N2)’; — описание  индикаторов, через символ «;»
Settings.nks=’nk_test_sig.lua’; —генератор сигналов
———————-

EMA -индикатор скользящего среднего,

N1 — интервал расчета индикатора,

C  — параметр свечи, по которому вычисляется индикатор. В данном примере это close последней закрытой свечи.

В этот файл нам необходимо добавить периоды наших скользящих.
Для этого любым редактором текста (рекомендую SCITE) добавляем в конец файла следующие две строчки:
Settings.N1 =20; — период первой скользящей по умолчанию
Settings.N2 =100; — период второй скользящей по умолчанию
————————
Содержимое этого файла будет отображаться как параметры индикатора nk_bot.
Таким образом, в процессе работы можно их изменять и наблюдать влияние на результаты работы торговой стратегии.
Все индикаторы автоматически отображаются на графике
————————————
В файле initS.lua есть такая строка:
Settings.nks=’nk_test_sig.lua’; —генератор сигналов
т е свой алгоритм мы поместим в файл с именем nk_test_sig.lua.
Мы можем изменить имя файла, указав любой другой файл с новым алгоритмом.
————————-
В любом редакторе текста в файле nk_test_sig.lua пишем следующий текст нашего алгоритма:

=Cross(Y1,Y2); — пересечение. результат -1,0,1
Алгоритм записывается следующим образом. Пишем знак «=» и далее функцию или арифметическое выражение значения торгового сигнала.

Если выражение является логическим, то после знака равно пишем сначала значение сигнала, например 1, потом через запятую логику вычисления сигнала.

Например,  =1, x>20  — означает, что сигнал равен 1, если x>20, иначе равен 0.
В тексте программы может быть комментарий, который должен начинаться   двумя знаками минус.
Выше все комментарии  выделены зеленым цветом.
Вот и весь наш алгоритм.

Теперь посмотрим, что получилось:

160503_000

160503_001

 

 

 

 

 

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

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

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

Свеча, на которой совершается сделка, отмечается стрелкой

зеленая стрелка — продажа

красная стрелка — покупка

Сделки совершаются на открытии свечи ,

на основе информации о закрытых свечах.

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

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