Блог им. 3Qu

Проектирование ТС. 1

    • 15 августа 2021, 18:09
    • |
    • 3Qu
  • Еще
Обещал в Процесс рождения интрадей Грааля пошагово освещать процесс проектирования торговой системы — освещаю).
Итак, первым делом скачал с Финам 1м котировки нескольких фьючерсов за 3 последних месяца перед экспирацией и поместил их в БД SQLite — так проще работать. Код экспорта из CSV в SQLite приводил ранее, см. раздел Python моего блога.
Вот эти:

1 GAZR-6.21 GZM1
2 GAZR-9.21 GZU1
3 SBRF-6.21 SRM1
4 SBRF-9.21 SRU1
5 Si-6.21 SiM1
6 Si-9.21 SiU1
С фьючем РТС работать и отрабатывать технологии сложнее, если и нужен будет, то оч нескоро.
У меня заготовлено несколько новых индикаторов для этой ТС. Конечно я на что-то рассчитывал при их проектировании, но все это умозрительно, и о реальных свойствах индикаторов я, ровным счетом, ничего не знаю. Для начала хотелось бы выяснить их возможности.
Для этого на множестве 1м истории (~66000 свечей) генерируем ~6600 равномерно распределенных по интервалу истории случайных сделок продолжительностью 5 минут ( потом будет и 10 и 15 минут), пока только Лонг (потом и Шорт будет, рассматривается отдельно) и находим прибыль в каждой из этих сделок.
Выглядеть это будет вот так:
Проектирование ТС. 1 
Далее, эти сделки будут накладываться на индикатор, и будем смотреть как меняется распределение удачных и неудачных сделок относительно значений индикатора — это все называется: метод Монте-Карло. Но об этом в следующий раз.
Ну, и просили код. Вот он, полностью рабочий:

import matplotlib.pyplot as plt
import sqlite3 as sql
import MyPack.Filters as flt
import MyPack.StDevm as stdm
import numpy.random as rnd

sdata =[]
sql1= "select ticker, date, open, high, low, close, vol \
    from Hist_1m where ticker_id=1 order by Date;"

con=sql.connect('C:/Users/ubase/Documents/StockDB/StockDB21.sqlite')
cur=con.cursor()
cur.execute(sql1)
sdata=cur.fetchall()
con.commit()
con.close()
L = len(sdata)
N = 6628
Ld = 5

# Генерация случайных чисел
rng = rnd.default_rng()
rm=rng.integers(0, L, N )

class Candle:
    tr =0
    dt = 1
    o = 2
    h = 3
    l = 4
    c = 5
    v = 6
    
cl = Candle

# формируем сделки.
def DealsGenL(rm,ld):
   #Lm = len(rm)
   Pr =[]
   for i in range(0,N):
        if rm[i] + ld >= L:
            continue
        pr = sdata[rm[i]+ld][cl.c] - sdata[rm[i]][cl.c]
        Pr.append(pr)
   return Pr

Pr = DealsGenL(rm,Ld)
plt.plot(Pr)

Комментов к коду не будет. Заодно и в Python разберетесь.

ЗЫ Ну, вот и распределение наших случайных сделок по прибыли нарисовалось.
Проектирование ТС. 1
Все как и ожидалось, вполне симметричное распределение. Но, об этом уже в другой раз.

★19
72 комментария
Желаю успеха.Напомнил мне про начало 2000х годов когда я грыз Метасток 7.2.
avatar
ezomm, примерно тогда-же отказался от него примерно через 15 минут после первого запуска.)
avatar
Красиво

Однако во вселенной лимитных ордеров рандомным образом работающий в плюс индикатор подобрать нельзя. И угадать сложно.

С уважением
avatar
Мальчик Buybuy, ошибаетесь. Я всегда так деляю, по крайней мере, уже оч давно, и методой вполне удовлетворен.
Читайте - Почему не работают индикаторы.
avatar
3Qu, не ошибаюсь

До конца года выложу пост с подробным доказательством (и кодом)
Правда у меня моделирование на Matlab (продакшн на C#), но, думаю, с восприятием кода проблем не будет.

С уважением

P.S. Все, что я написал, относится только к лимитному исполнению. При маркетном исполнении это не так.
avatar
Мальчик Buybuy, код — нэ нада код, достаточно словесного описания принципов — короче и понятней.
avatar
Хммм. Интересно, делаю тоже на С++20/Debian/Postgres. за полгода столкнулся с таким количеством нюансов, хотя в основе своя система аналитики (аналитическая платформа на с++), что сомневаюсь я про питон… 
avatar
Даниил Лазарев, 
сомневаюсь я про питон… 
И в чем разница? Для моделирования-прототипирования самое оно.
avatar
3Qu, да я просто не совсем понимаю как на питоне анализировать на истории за 5-10 лет сложную ТС, оптимизировать ее параметры, да потом ещё пустить ее в бой на питоне. Возможно я архаичен, но как по мне если серьезно подходить к разработке то это только С++ на nix
avatar
Даниил Лазарев, вообще, у меня системы не на Питоне, а на С++.
А анализ на Питоне — хоть веками, если оно нужно.)
avatar
3Qu, не логично. Если есть система на с++ зачем питон? )
avatar
Даниил Лазарев, гораздо проще моделирование. Наверное на порядок.
Собственно, сейчас все так делают, включая NASA и пр.))
Питон оч хорош для бигдата.
avatar
3Qu, не соглашусь, но пусть 😀 
avatar
Даниил Лазарев, в чем, собственно, проблема? Если только в скорости счета, то это всегда можно обойти, если с умом писать. А библиотеки там потрясные. 
avatar
SergeyJu, ну а я не смог (((

Если писать быстрый векторизованный код, то на Matlab это получается лаконично и изящно, а на Питоне — через ж… (IMHO)

С уважением
avatar
Мальчик Buybuy, вообще, в Питон с матрицами все в порядке.) В два притопа.)
avatar
3Qu, я про синтаксис

Конкретно — библиотечных вызовов с векторизацией

С уважением
avatar
Мальчик Buybuy, честно, не знаю.)
Но, работал некогда с МатЛаб — это ужас — от синтаксиса до быстродействия — тягомотина. Питон с аналогичными задачами справляется в разы быстрее.
Однако, с МатЛаб работал давно, а на Питоне сейчас. Может что и поменялось.
avatar
3Qu, все поменялось

С 2020 есть даже оптимизация кода под AMD )))

С уважением
avatar
3Qu, расчет маркетной эквити в Матлаб

equity = cumsum(sgn(ind) .* diffMatrix(:, N + 1));

Как это будет на Питоне?

С уважением

ind — массив значений индикатора
diffMatrix — некая матрица приращений цен
avatar
Мальчик Buybuy, сдается, что примерно так же и будет выглядеть. кумсуммы и матрицы на самом Питоне никто не считает — на то либы есть.
avatar
SergeyJu, да вот в этом то и проблема 😀 когда анализируешь сотни миллионов записей … один из моих недавних проектов — онлайн (ночью) обработка структуры продаж одной крупной компании и формирование оптимальной структуры и KPI для коммерсов.  на питоне такое сделаешь? 😀 
avatar
Даниил Лазарев, да да

У меня в последнем проекте решаются СЛАУ (не разреженные) примерно 100,000 на 100,000. Матлаб пыхтит, но тянет… На Питоне пробовать не стал. На C#/C++ у меня только на устранение собственных ошибок ушел бы месяц, наверное (там не только матрицы).
Я делал тест на меньших размерах — C# не выигрывает у Матлаб вообще ничего (если код векторизованный и все массивы в статике в ОЗУ).

С уважением
avatar
Мальчик Buybuy, про ОЗУ плюсую, я использую редис
avatar
Даниил Лазарев, 
на питоне такое сделаешь? 😀 
Может сделаешь, а может и нет — от конкретики зависит.
Большинство либ Питона — это С++, и Питон отводится роль только языка сценариев, что на быстродействие влияет мало. В общем, вопрос быстродействия Питон — это, по большей части, вопрос использования библиотек.
avatar
3Qu, на все случаи жизни ты библиотеки не найдёшь, все равно рано или поздно придётся писать самому, а если задача нетривиальная, то на питоне и пробовать смысла не вижу. IMHO
avatar
Даниил Лазарев, на все не найду, но 1-2 либы написать не проблема — для этой штуки есть Питон API. Либа потом пригодится при переходе на С++.
avatar
3Qu, ну ок, мне интересно что получится )
avatar
3Qu, Кто тут в комментах хает питон, видимо, его толком не пробовали). Понятно, он не для всего, но с матрицами и таблицам питоновые библиотеки отлично работают — быстро и наглядно. Хочешь — можешь на видяхах в сотни ядер это обрабатывать — закачаешься от скорости — C++ отдыхает). А уже просто скрипты какие-нить писать — одно удовольствие — опять-таки C++ отдыхает).
avatar
Replikant_mih, просто не умеют его готовить.©
avatar
Даниил Лазарев, как насчет 10% кода, которые жрут 90% ресурсов? 
Надо писать на том, где быстрее пишется, а оптимизировать ровно там, где затык. Писать все на плюсах — в среднем  даром растрачивать свое время. 
avatar
Даниил Лазарев, 
я просто не совсем понимаю как на питоне
А какая разница на чём?
Ну если быстродействия хватает, а чаще чем реже хватает чего угодно.
avatar
Нувот Вчеранов, не обращай внимания, я ещё с Бейсика не перевариваю интерпретируемые языки ))
avatar
wistopus, этот не на приращениях, а на котировках.
avatar
wistopus, нет
avatar
Даниил Лазарев, ну нет так нет… я на миллисекундах не силен (интрадей)..
просто графики удивили своим сходством…
avatar
wistopus, там принцип другой
avatar
wistopus, не, не та же. Здесь сделки идут не последовательно, а в перемежку. Поздняя м.б. раньше предыдущей по времени.
avatar
Всем привет!

Подскажите, пож-та, если кто знает, где можно раздобыть исторические тики FORTS, с миллисекундами, номерами сделок и открытым интересом, т.е. такие как в Квике.
Сразу, про Финам знаю, но там не то, время урезано, ОИ нет, внебиржевых нет, спредов нет.

Нужно именно как в Квике, всего несколько дней не хватает из 2019 и 2020 года, но весь FORTS, по всем инструментам FUT и OPT.

Может у кого свой архив есть, но тоже не все данные, могу поменяться.
avatar
latrop, имхо, собрать самому.
Я сам собираю, если надо, но мне много не надо, архивы не держу.
avatar
3Qu, так само-то собирается с текущей сессии все тики биржи в архив.
Ищу всего нескольких прошлых дней — не хватает для корректной работа тестера.

Вы, очевидно, ПО на заказ пишете, архивы не нужны. Заказчики где тики добывают, если знаете? 
avatar
latrop, не, на заказ не пишу. Заказчик нынче жадный пошел — нет смысла заморачиваться.)
avatar
latrop, архивы qscalp смотрели?
http://erinrv.qscalp.ru
avatar
Jame Bonds, вот это спасибо! пошел смотреть
avatar
Jame Bonds, поле OI есть, но там нули. И время без мс. Как в Финаме.
Но спасибо!
avatar
latrop, 
поле OI есть, но там нули
auxinfo файлы смотрите
И время без мс.
здесь с мс ftp://ftp.zerich.com/pub/Terminals/QScalp/History/
avatar
Юрий Ч., спасибо! 
В auxinfo есть OI, правда это не тики, но соединить можно.

ftp://ftp.zerich.com/pub/Terminals/QScalp/History/
ордер-логи есть, правда, только до января 2021
avatar
Чем планируете зарабатывать? Неужели обработкой истории?))
avatar
$100, это вы кого спрашиваете?
avatar
3Qu, автора ТС… когож еще?))
avatar
$100, а я разве историю изучаю? Пока я свои индикаторы изучаю для построения ТС.
avatar
$100, а что есть другие варианты? ))
avatar
Даниил Лазарев, да… но частникам они недоступны… поэтому, частники на длинной дистанции всегда в минусе)
avatar
$100, инсайд? Зачем обсуждать сферического коня в вакууме?
avatar
У систем с положительным мат. ожиданием есть две проблемы: не системные риски и дисперсия — решение уже ищите?
Сергей Иваненко, дисперсия — наплевать и забыть. Несистемные риски — здесь посложнее.
avatar
Сергей Иваненко, а что Вы называете дисперсией? 
avatar
SergeyJu, Дисперсия — это дисперсия. Итоговое отклонение результата (прибыли) от расчётного значения.
Сергей Иваненко, уж если пишете слово дисперсия, заодно поясняйте, дисперсию чего именно Вы считаете и что именно Вам в это самой дисперсии не нравится. 
Если Вас смущает неравномерность дохода ТС во времени ( я, кстати, не использую дисперсию при оценке этого показателя), то тут уж ничего не поделать, не мы такие, рынок такой. Диверсификация по активам и по системам только частично решает эту проблему. 
avatar
Где грааль то не понял?)) 
avatar
GoodBargains, вам понимать и не надо. Грааль у меня, возможно. Вы только зритель этой пьесы.) Но у вас остается шанс повторить.)
avatar
Немного дополнил топик. Далее это распределение понадобится.
avatar
3Qu, сдается мне, что это распределение с точностью до шкалирования по времени совпадает с исходным 
avatar
wrmngr, в смысле?
avatar
А с чем связан такой подход и дает ли какие-то преимущества, а то какой-то он нестандартный по-моему ну или я не встречал, просто? — Я про «сначала рандомные тренды, потом накладывать индикатор» вместо классического «на основе разных сигналов индикатора смотреть че он нагенерит».
avatar
Replikant_mih, долго и муторно. А при предлагаемом подходе мы, по виду распределения, сразу видим область(и) работоспособности индикатора, и даже примерно можем оценить его эффективность.
avatar
3Qu, Спсб, надо попробовать).
avatar
Replikant_mih,
ЗЫ Подход, кстати, вполне типовой — метод Монте-Карло.
avatar
Мне представляется, что метод монте-карло тут лишний. Есть выборка, есть значения индикатора — ну и оцени результативность индикатора сразу по всей выборке, благо, она маленькая, чай не миллиарды минуток в квартале.
avatar
Присоединяюсь к предыдущему оратору: почему не совершить сделки сразу на всех барах из выборки?
avatar

теги блога 3Qu

....все тэги



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