Избранное трейдера Радик Мингазов
Продолжаем разработку универсального робота!
Выкладываю код OUR-0.3, который в настоящий момент еще далеко не полный – это только основа, скачать можно здесь https://yadi.sk/d/l3uic67yruCxa
Код прокомментирован подробно, но дам дополнительное описание общего плана, чтобы логику работы робота можно было представить.
Итак, по порядку:
Робот состоит из двух файлов: OUR.lua содержит основные функции (OnInit, main, коолбэки – пока только один OnStop), FunOUR.lua содержит вспомогательные функции – все остальные. Дополнительно приложен файл с информацией и файл с образцом котировок.
Функция OnInit
1 Первоначально котировки с сервера поступают в источник – таблицу с барами TBar (там все заполняется автоматически при подключении источника).
2 Далее робот делает различные вычисления, результаты которых он помещает в таблицу с данными TDat (также туда копируются параметры баров из TBar), эту таблицу нужно заполнять самому, ключи таблицы на свое усмотрение, но конечно часть ключей в алгоритм уже заложены, это «key»,«O»,«H»,«L»,«C»,«V»,«T» от них идут все вычисления. TDat – это таблица, содержащая таблицы по каждому бару, ключ соответствует номеру бара в источнике. Структура такого типа:
TDat = { [1321] = {"O","H","L","C","SMAf","SMAs"…}, [1322] = {"O","H","L","C","SMAf","SMAs"…}, … }
Donald Bradley представил миру астрологическое исследование, которое широко используется и сегодня, в узких трейдерских кругах. И не только. Имеет отношение к Теории хаоса.
В своем астрологическом прогнозе Бредли учитывает фазу Луны, а также расположение планеты Земля к Солнцу. Суть его системы в том, что сайдограмма позволяет заранее определить РАЗВОРОТ, в ту или иную сторону. В какую — неизвестно, это точки неустойчивости рынка и это позволяет трейдеру добавить еще один инструмент в его арсенал.
Зная примерный день РАЗВОРОТА можно уберечь свои инвестиции от потрясений. Часто дни не совпадают -день в день, но корреляция в 70-80% заставляет нас принимать во внимание Сайдограф Бредли. Например Февральское лоу и сильнейший разворот рынка, 11 Февраля было заранее предсказано на 3 Февраля. Возможно это не лучший инструмент для интрадейщиков, но для среднечрочных и долгосрочных инвестиций вполне хороший результат.
# Created by SciFi, 2016 runUnluck <- function(n) { runArray <- numeric(10000) for(i in 1:10000) { runArray[i] <- sum(rle(sample(c(-1, 1), 1000, TRUE))$lengths == n) } hist(runArray, main="Гистограмма") mean(runArray) }
> source("D:\\Dropbox\\R\\RunUnluck.r") > runUnluck(6) [1] 7.8161 > runUnluck(2) [1] 125.2208 > runUnluck(3) [1] 62.4047 > runUnluck(4) [1] 31.179 > runUnluck(5) [1] 15.6559 > runUnluck(6) [1] 7.7635 > runUnluck(7) [1] 3.8831 > runUnluck(8) [1] 1.9382 > runUnluck(9) [1] 0.9738 > runUnluck(10) [1] 0.4922
Предыстория:
Мне, и думаю многим другим, нужны качественные исторические данные за максимальный промежуток времени — для изучения рынка, построения и тестирование торговых систем. Такие данные по фьючерсам, торгуемым на западе, в частности на CME, в свободном доступе (кроме дневок) практически не найти. Несколько месяцев назад я купил исторические данные по следующим фьючерсам CME: ES (фьючерс на индекс S&P), CL (фьючерс на нефть WTI), GC (фьючерс на золото), NQ (фьючерс на индекс NASDQ). Спецификацию по ним вы можете посмотреть тут: http://www.cmegroup.com/trading/equity-index/us-index/e-mini-sandp500_contract_specifications.html
Но осталась потребность в данных по многим другим интересным инструментам. И пару недель назад у меня появилась идея – т.к. исторические данные нужные не только мне, то вполне возможно приобретать их совместно (в складчину) (http://smart-lab.ru/blog/317451.php)
Суть идеи:
Для коллег, кто пользуется 5-минутками и выше, я решил выкладывать в свободный и бесплатный доступ 5 минутные OHLCV за всю историю и также выкладывать обновления по ним.
Продолжаю проект по популяризации языка R. Сегодня познакомимся с его историей. И заодно поймем, как так вышло, что он стал САМЫМ популярным языком алготрейдеров/квантов на западе.
Итак, жили-были красноглазые программисты, и спать не могли т.к. мысли роились в их огромных головах. Много чего они думали: о языках программирования, играх, операционных системах, биг-датах и конечно же больших и упругих сиськах.
Таким образом, в середине 80ых годов появился язык S. Да-да. Язык S(не R). Кто и зачем его так назвал, оставим за скобками. Язык S был быстр, красив и работал с бигДатой весьма хорошо. Но была и проблема. Язык S — был ПЛАТНЫМ (тьфу!).
Долго такой беспредел продолжаться не мог, и уже в 1993 году, появился Бесплатный аналог S — язык R.
Язык R вобрал в себя самое лучшее от своего платного собрата, и начал своё победное шествие по планете!
Как развивалсяРасширенная форма оператора for
В расширенной форме оператора for для последовательного получения значений переменной цикла используется вызов итератора. Цикл завершается, когда итератор возвращает nil.
Примечание
Под итератором понимается любая конструкция, позволяющая перебирать элементы некоторого набора. При каждом обращении к итератору он возвращает очередной элемент набора. В Lua итераторы обычно реализуются в виде функций.
Расширенная форма оператора for имеет следующий вид:
for var1, var2, …, varN in <explist> do
… — тело цикла
end
где:
var1, var2, ..., varN — список переменных, получающих значения на каждом шаге цикла. Список может состоять из одной или нескольких переменных, разделённых запятыми. Первую в списке переменную называют управляющей переменной цикла. Когда эта переменная получает возвращённое итератором значение nil, цикл завершается. Остальные переменные на ход выполнения цикла влияния не оказывают;
<explist> — список выражений, разделённых запятыми. Обычно список состоит из единственного выражения — вызова функции-фабрики итераторов. Такая функция возвращает функцию-итератор, состояние и начальное значение управляющей переменной цикла.
Скрипты на языке Lua
Написанный на Lua скрипт не имеет какой-либо специальной функции, с которой начиналось бы его выполнение. Скрипт можно рассматривать просто как набор команд (инструкций), который выполняется, начиная с первой инструкции.
Скрипт может быть как очень простым, состоящим всего из одной команды, так и весьма сложным, содержащим десятки, сотни и даже тысячи инструкций. Следующие друг за другом инструкции могут разделяться точкой с запятой (;). Однако это требование не является обязательным, поэтому весь приведённый ниже код является корректным с точки зрения синтаксиса:
a = 1; b = 2
a = 1 b = 2
a = 1;
b = 2;
a = 1
b = 2
Работа с переменными в Lua
Переменные используются для хранения значений в процессе выполнения скрипта.
Имена переменных в Lua
Именами (идентификаторами) переменных в Lua могут быть любые последовательности из букв, цифр и символа подчеркивания, начинающиеся не с цифры.
День добрый.
Хочу поделиться с вами программой для ограничения убытков на день. У меня как думаю и у многих, в торговом дне больше прибыльных сделок, но одна убыточная забирает всю полученную прибыль, оставляя только надежды на возвратное движение цены. Кажется, что сейчас цена развернется, но этого не происходит. Думаю многим знакомо это чувство.
Цель программы ограничить убыток и защитить трейдера от сделок при эмоциональном потрясении, если трейдер не может принять решение о закрытии убыточной позиции.
Суть программы безумно проста, не дать пользователю совершать сделки при превышении лимита потерь на день. При превышении лимита, программа снимет все ордера, стоп-ордера и тейки на рынке Фортс. Закроет все позиции по фьючерсам при наличии контрагентов в стакане. Закроет Quik. Не даст открыть Quik в этот день.
Как установить робота в Quik?