Избранное трейдера cerberus

Алгоритмическая торговля на Московской бирже с помощью терминала QUIK остаётся популярным способом автоматизировать стратегии. В этой статье мы напишем грид-бота, который выставляет ордера сеткой вокруг текущей цены и зарабатывает на колебаниях.
Грид-бот (от англ. grid — сетка) — это торговый алгоритм, который выставляет ордера (лимитки) на покупку и продажу через равные интервалы цены.
Простейший сценарий:
Цена идёт вниз — бот набирает позицию по мере снижения.
Цена возвращается вверх — бот закрывает покупки продажами, фиксируя прибыль на каждом «шаге сетки».
Таким образом бот «ловит пилу», зарабатывая на флэте и колебаниях.
В коде ниже реализована версия с:
стопом/тейком для бота.
Пересчётом средней цены позиции.
Подсчётом реализованного и нереализованного PnL.
Чтобы Python «видел» терминал QUIK, нужен связующий слой. Есть несколько способов:
QUIK LUA scripts (QLua) — встроенные скрипты на Lua.
Каждый инвестор рано или поздно сталкивается с необходимостью ведения учёта своего портфеля, особенно если брокеров несколько. В первом приближении для этого подходит Excel: многим знаком, работает локально и почти всегда установлен на компьютере. Подходит для расчета доходности, учета дивидендов.

Однако механическая работа со временем утомляет, а возможности Excel для автоматизации онлайн получения котировок ограничены. Google Таблицы решают эту проблему: это изначально облачный инструмент. Чтобы получить актуальную цену акций, достаточно одной формулы.
В этой статье мы разберём, как Google Таблицы могут дать инвестору больше свободы. Я покажу на примерах, как с помощью встроенных инструментов и простых гугл скриптов (Google Apps Script) превратить таблицу в полноценную платформу для анализа и автоматизации вашего портфеля. А ещё разберем получение котировок в обоих инструментах.
Всем привет, пишу свои мысли продолжении поста «Как я случайно частично вышел на самой верхушке и инвестировал в машину-звездолет и вот почему ?».
В итоге машина пришла в Екатеринбург через Хоргос за 3 недели с момента предоплаты, заказывал самостоятельно без посредников/компаний
«помогаяк», которые берут от 100 до 300 тыс. руб за свои услуги и обошлась выгоднее на 50%, чем аналогичная машина в салоне дилера.


function main()
local Trades = {}
local comission = 0
SearchItems('trades', 0, getNumberOf('trades')-1,
function (class_code, trade_num, flags, exchange_comission)
if class_code == 'SPBFUT' or class_code == 'SPBOPT' then -- Учитываем только сделки на срочной секции
comission = comission + exchange_comission
local t = {flags & 0x4, exchange_comission}
if Trades[class_code] then
Trades[class_code][trade_num] = t
else
Trades[class_code] = {[trade_num] = t}
end
end
return false
end,
'class_code,trade_num,flags,exchange_comission')
local total = 0
local maker = 0
local taker = 0
local comission2 = 0
SearchItems('all_trades', 0, getNumberOf('all_trades')-1,
function (class_code, trade_num, flags, sec_code)
if Trades[class_code] then
local t = Trades[class_code][trade_num]
if t then
total = total + 1
if flags & 0x1 ~= 0 then
if t[1] == 0 then
maker = maker + 1
else
taker = taker + 1
comission2 = comission2 + t[2]
end
elseif flags & 0x2 ~= 0 then
if t[1] == 0 then
taker = taker + 1
comission2 = comission2 + t[2]
else
maker = maker + 1
end
else
comission2 = comission2 + t[2]
end
end
end
return false
end,
'class_code,trade_num,flags,sec_code')
message(string.format('total: %u\nmaker: %u\ntaker: %u\n\ncomission\nсейчас: %.2f\nскальпинг: %.2f\nстанет: %.2f', total, maker, taker, comission, comission / 2, comission2 * 3))
end
docs.google.com/spreadsheets/d/1BJajji0Z5-QFoH0gH4hgjJaCqOJGmDCz_1f8cCi3Fj8/edit?usp=sharing
Можно скопировать таблицу и более подробно разобраться в формулах.
Если вдруг, найдете неточность или ошибку, пишите в комментах, поправлю.
Если вдруг, поддержка какого либо брокера, утверждает, что у вас нарисовался минус по вариационке, потому что прошла валютная переоценка контракта, можете проверить их слова используя этот файл. Из практики, это касается одного желтого брокера, возможно другие тоже несут дичь.

