Блог им. Albus

Робот ContanGO! 2.0

    • 07 апреля 2017, 14:20
    • |
    • Albus
  • Еще
Робот ContanGO! 2.0
Месяц назад я написал пост Робот ContanGO! smart-lab.ru/blog/385513.php
В нём был изложен черновик торговой идеи. Между фьючерсом и акцией всегда есть разница в цене. Обычно фьючерс дороже акции. Это называется контанго. Контанго всё время меняется. Оно то больше, то меньше. С каждым днём контанго распадается и стремится к нулю. Контанго достигает нуля к дате экспирации.
Робот, выложенный в первом посте, был первым наброском. Он многое не учитывал. С тех пор он стал умнее, я полностью переписал код и обогатил его новыми аналитическими элементами.
1. Теперь роботу не нужно задавать код фьючерса. Он сам возьмёт новый список фьючерсов, когда до экспирации останется 5 дней.
2. Робот умеет учитывать то, что часть денег морозится во фьючерсах, заблокированная под ГО. Он уменьшает доходность на размер замороженных денег.
3. Робот учитывает комиссию биржи автоматически (ничего писать не нужно)
4. Робот учитывает комиссию брокера. Задаётся пользователем в файле ContanGO.lua
5. Робот вычитает из доходности налог НДФЛ 13%
6. Если вы знаете что делаете, вы можете вписать размер дивиденда по каждой акции. Вписав дивиденд, вы поднимете доходность до справедливого значения. Дивиденд считается с налогом 13%. После среза реестра дивиденд нужно обнулить , потому что он перестанет играть роль. Этот пункт — для продвинутых. Если он вам не понятен — поставьте в дивидендах нули.

Ещё раз пройдусь по значениям полей.
1. Share — базовый актив — акция. Под валюты робот не адаптирован, не пытайтесь вписать туда доллар рубль, будет глючить.
2. Nazvanie — название акции — базового актива.
3. Futures — фьючерс на эту акцию.
4. Expire_Days — сколько дней до экспирации.
5. GO % — размер ГО по сравнению с полной стоимостью фьючерса.
6. Div_rub — размер дивиденда на акцию в рублях. Пишется при условии, что срез реестра выпадает до экспирации. И при условии, что этого среза ещё не было. Если срез уже был, то в этом поле надо поставить 0.
7. spread — разница в процентах между фьючерсом и акцией.
8. profit % — это разница в процентах между фьючерсом и акцией за вычетом всех отрицательных моментов: замороженное ГО, комиссия биржи и брокера, налог 13%. В скобках показано насколько это больше или меньше, чем доходность депозита. Если больше 1, то выше, если меньше 1, то ниже.
9. max_profit — робот засекает какой максимальный размер принимал предыдущий параметр и запоминает его. В скобках показано, на сколько он обыгрывает банковский депозит.
10. Depozit_v_banke — средняя доходность годового депозита в российских банках. Я его беру на banki.ru в разделе Аналитика. Сейчас он равен 7,57% годовых. Робот считает какую доходность даст такой депозит за количество дней, оставшееся до экспирации фьючерса.

Робот лежит здесь. Вот ссылка:
yadi.sk/d/1K7lQEaA3FT7fy
В архиве сам робот ContanGO!.lua и библиотека QL.lua. В ней торговые функции, необходимые для работы робота.

А это платформа LuaForWindows. Она нужна для работы библиотеки QL
github.com/rjpcomputing/luaforwindows/releases/download/v5.1.5-51/LuaForWindows_v5.1.5-51.exe

1. Установите LuaForWindows
2. Перезагрузите комп.
3. Положите в отдельную папку файлы ContanGO и QL
4. Запускайте в КВИКе робота ContanGO.lua через Сервисы — Lua скрипты — добавить.

Вот часть файла ContanGO!.lua, которую может редактировать пользователь.
Робот ContanGO! 2.0
Примечание. Два таких дефиса — превращают строку в комментарий. Это позволяет писать после них любой текст.
★27
31 комментарий
а можно узнать почему прошлый пост про робота удалили? 
avatar

 а с какой годовой ставкой в банке вы сравниваете?  надо бы такое значение в таблице 

 

робот не торгует, только предоставляет информацию?

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

Благодарю. Очень хотел бы воспользоваться.

Скажите, почему при запуске Ваш скрипт начинает мне бешено спамить сообщение:

"ContanGO.lua:149: attempt to perform arithmetic on global 'crude_offer_sh' (a nil value)"

Я что-то не донастроил в Квике? Заказ котировок? Таблица текущих торгов?

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

Акции все заказаны из секции TQBR (289 штук).

Там на этой строчке написано

offer_sh=crude_offer_sh-div[sec]*(1-0.13)

 

Может, он дивиденды не может найти?..

avatar
ch5oh, значит вот тут стоят фильтры



avatar

Albus, Фильтры тоже сброшены.

Добавил логгирование принудительное всех значений на входе и получил виновника трагедии:

SEC: SBER; ValPriceStr: -1.#J

Потом добавил ещё и получил подозрение на багу в методе toPrice:

SEC: ROSN; offer_parval: 333.950000 # After toPrice: -1.#J

 

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

avatar
ch5oh, добавьте в код такие строчки:
message (sec.." "..tonumber(toPrice(sec, tableoffer_sh.param_value)),1)
message (sec.." "..type (crude_offer_sh),1)
и расскажите что он будет писать в окошке сообщений
Как у меня:


avatar

Albus, поставил вместо "toPrice(sec, tableoffer_sh.param_value)"

"tonumber(tableoffer_sh_param_value)"

вроде, полегчало...

avatar
Albus, а что за метод "toPrice"? Почему нельзя просто проверить, что строка не пустая и сделать tonumber?
avatar
ch5oh, это функция из библиотеки QL.
Да, можете и без toPrice но ругается не на неё.
Можете вот так написать:
crude_offer_sh=1*tableoffer_sh.param_value
это тоже превратит стринг в число
avatar

Albus, он ругается не на toPrice. Но только потому, что эта функция возвращает какой-то бред в виде строки.

И фактическая ругань идет в том месте, где этот бред мы пытаемся конвертнуть в tonumber.

 

Чисто впечатление: круто!

Но хотелось бы видеть доходности в виде "проценты годовых". Потому что человеческое сознание плохо понимает что такое "Депозит в банке 1.43 за 69 дней" ;-)

avatar
ch5oh, это не сложно. Пилите вот эту строчку
tbl:SetValue(line_count_table[sec],'profit %', string.format("%.4f", profit_pc[sec]).."    ("..string.format("%.4f", profit_pc[sec]/benchmark)..")")

profit[pc] делите на количество дней до экспирации days_till_exp и умножайте на 365 дней.
avatar
ch5oh, дивиденды заданы. Дело не в них.
avatar
Albus (Игорь Китаев), привет! этот скрипт ещё работает у вас? В новой 64-разрядной версии квика не запускается…
avatar
Алексей Киселев, Алексей, Добрый день, что то ответил автор? Не могу Вам насписать в Личку, рейтинга не хватает( 
avatar
Андрей, привет! Я сделал свой. Раздаю подписчикам группы VK DONUT «Арбитражный трейдинг»
vk.com/arbitr_trading

avatar
Albus (Игорь Китаев), Добрый день, скажите пожалуйста а под актуальную версию квика есть такой же? 
Очень нужно, или может сможете подсказать как можно подправить этого? 
avatar
А где деньги то? Там же в спреде просто безрисковая ставка заложена, плюс коммис, плюс проскальзывание…
Неужели за пять дней до экспира возникает ситуация, когда что-то можно заработать, сомнительно?

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

Или если у кого-то другая ставка налога.

Или если есть инсайд по дивам. =D

avatar
ch5oh, Вы уверены, что там что-то разойдется? Я не очень… Желающих получать безрисковые бабки выше ставки межбанка херова туча… На табличку посмотрите, где там расхождения? Только газ и то наверно, какая-нибудь ошибка…

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

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

Может, и вправду говорят: "Чистая доходность меньше 120% годовых — отстой и скука".

avatar
ch5oh, вы не учитываете такую чудную вещь как T+2 — бесплатные бабки на 2 дня, которую Вы как клиент брокера эксплуатировать не можете… А брокер может, хочет и делает это… Этот момент в таком виде арбитража нужно учитывать, т.к. у брокера бабки бесплатные и он может спокойно выполнять двухдневный арбитраж с доходностью ниже межбанка… Поэтому доходность таких операций всегда будет ниже банковского депозита…  И лезть в такие операции частнику не стоит, ну разве что попробовать, чтобы воочию убедится, что не катит.. 
Какие там 120%, 5-6% годовых дай бог…
спа
avatar
Результаты испытаний есть уже?
avatar
ё-моё… Сижу прикручиваю дивиденд к своей безрисковой стратегии. А вы уже всё сделали! Супер! Ещё раз спасибо!!! :)
avatar

теги блога Albus

....все тэги



UPDONW
Новый дизайн