3Qu
3Qu личный блог
15 августа 2021, 18:09

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

Обещал в Процесс рождения интрадей Грааля пошагово освещать процесс проектирования торговой системы — освещаю).
Итак, первым делом скачал с Финам 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
Все как и ожидалось, вполне симметричное распределение. Но, об этом уже в другой раз.

72 Комментария
  • ezomm
    15 августа 2021, 18:21
    Желаю успеха.Напомнил мне про начало 2000х годов когда я грыз Метасток 7.2.
  • Мальчик buybuy
    15 августа 2021, 18:27
    Красиво

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

    С уважением
      • Мальчик buybuy
        15 августа 2021, 18:32
        3Qu, не ошибаюсь

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

        С уважением

        P.S. Все, что я написал, относится только к лимитному исполнению. При маркетном исполнении это не так.
  • Даниил Лазарев
    15 августа 2021, 18:29
    Хммм. Интересно, делаю тоже на С++20/Debian/Postgres. за полгода столкнулся с таким количеством нюансов, хотя в основе своя система аналитики (аналитическая платформа на с++), что сомневаюсь я про питон… 
      • Даниил Лазарев
        15 августа 2021, 18:51
        3Qu, да я просто не совсем понимаю как на питоне анализировать на истории за 5-10 лет сложную ТС, оптимизировать ее параметры, да потом ещё пустить ее в бой на питоне. Возможно я архаичен, но как по мне если серьезно подходить к разработке то это только С++ на nix
          • Даниил Лазарев
            15 августа 2021, 18:55
            3Qu, не логично. Если есть система на с++ зачем питон? )
        • SergeyJu
          15 августа 2021, 19:01
          Даниил Лазарев, в чем, собственно, проблема? Если только в скорости счета, то это всегда можно обойти, если с умом писать. А библиотеки там потрясные. 
          • Мальчик buybuy
            15 августа 2021, 19:05
            SergeyJu, ну а я не смог (((

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

            С уважением
              • Мальчик buybuy
                15 августа 2021, 19:12
                3Qu, я про синтаксис

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

                С уважением
                  • Мальчик buybuy
                    15 августа 2021, 19:21
                    3Qu, все поменялось

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

                    С уважением
                  • Мальчик buybuy
                    15 августа 2021, 19:27
                    3Qu, расчет маркетной эквити в Матлаб

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

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

                    С уважением

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

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

              С уважением
              • Даниил Лазарев
                15 августа 2021, 19:29
                Мальчик Buybuy, про ОЗУ плюсую, я использую редис
              • Даниил Лазарев
                15 августа 2021, 19:42
                3Qu, на все случаи жизни ты библиотеки не найдёшь, все равно рано или поздно придётся писать самому, а если задача нетривиальная, то на питоне и пробовать смысла не вижу. IMHO
              • Replikant_mih
                15 августа 2021, 22:58
                3Qu, Кто тут в комментах хает питон, видимо, его толком не пробовали). Понятно, он не для всего, но с матрицами и таблицам питоновые библиотеки отлично работают — быстро и наглядно. Хочешь — можешь на видяхах в сотни ядер это обрабатывать — закачаешься от скорости — C++ отдыхает). А уже просто скрипты какие-нить писать — одно удовольствие — опять-таки C++ отдыхает).
            • SergeyJu
              16 августа 2021, 10:16
              Даниил Лазарев, как насчет 10% кода, которые жрут 90% ресурсов? 
              Надо писать на том, где быстрее пишется, а оптимизировать ровно там, где затык. Писать все на плюсах — в среднем  даром растрачивать свое время. 
        • Нувот Вчеранов
          15 августа 2021, 21:18
          Даниил Лазарев, 
          я просто не совсем понимаю как на питоне
          А какая разница на чём?
          Ну если быстродействия хватает, а чаще чем реже хватает чего угодно.
          • Даниил Лазарев
            15 августа 2021, 21:39
            Нувот Вчеранов, не обращай внимания, я ещё с Бейсика не перевариваю интерпретируемые языки ))
  • latrop
    15 августа 2021, 19:15
    Всем привет!

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

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

    Может у кого свой архив есть, но тоже не все данные, могу поменяться.
      • latrop
        15 августа 2021, 19:42
        3Qu, так само-то собирается с текущей сессии все тики биржи в архив.
        Ищу всего нескольких прошлых дней — не хватает для корректной работа тестера.

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

            ftp://ftp.zerich.com/pub/Terminals/QScalp/History/
            ордер-логи есть, правда, только до января 2021
  • GOLD
    15 августа 2021, 20:31
    Чем планируете зарабатывать? Неужели обработкой истории?))
      • GOLD
        15 августа 2021, 21:16
        3Qu, автора ТС… когож еще?))
    • Даниил Лазарев
      15 августа 2021, 22:20
      $100, а что есть другие варианты? ))
      • GOLD
        16 августа 2021, 11:51
        Даниил Лазарев, да… но частникам они недоступны… поэтому, частники на длинной дистанции всегда в минусе)
        • Даниил Лазарев
          16 августа 2021, 11:57
          $100, инсайд? Зачем обсуждать сферического коня в вакууме?
  • Сергей Иваненко
    15 августа 2021, 21:40
    У систем с положительным мат. ожиданием есть две проблемы: не системные риски и дисперсия — решение уже ищите?
    • SergeyJu
      16 августа 2021, 10:18
      Сергей Иваненко, а что Вы называете дисперсией? 
      • Сергей Иваненко
        16 августа 2021, 10:56
        SergeyJu, Дисперсия — это дисперсия. Итоговое отклонение результата (прибыли) от расчётного значения.
        • SergeyJu
          16 августа 2021, 11:01
          Сергей Иваненко, уж если пишете слово дисперсия, заодно поясняйте, дисперсию чего именно Вы считаете и что именно Вам в это самой дисперсии не нравится. 
          Если Вас смущает неравномерность дохода ТС во времени ( я, кстати, не использую дисперсию при оценке этого показателя), то тут уж ничего не поделать, не мы такие, рынок такой. Диверсификация по активам и по системам только частично решает эту проблему. 
  • GoodBargains
    15 августа 2021, 21:51
    Где грааль то не понял?)) 
    • wrmngr
      16 августа 2021, 14:30
      3Qu, сдается мне, что это распределение с точностью до шкалирования по времени совпадает с исходным 
  • Replikant_mih
    15 августа 2021, 22:53
    А с чем связан такой подход и дает ли какие-то преимущества, а то какой-то он нестандартный по-моему ну или я не встречал, просто? — Я про «сначала рандомные тренды, потом накладывать индикатор» вместо классического «на основе разных сигналов индикатора смотреть че он нагенерит».
      • Replikant_mih
        15 августа 2021, 23:04
        3Qu, Спсб, надо попробовать).
  • SergeyJu
    16 августа 2021, 10:21
    Мне представляется, что метод монте-карло тут лишний. Есть выборка, есть значения индикатора — ну и оцени результативность индикатора сразу по всей выборке, благо, она маленькая, чай не миллиарды минуток в квартале.
  • Xaba3abr
    04 сентября 2021, 22:10
    Присоединяюсь к предыдущему оратору: почему не совершить сделки сразу на всех барах из выборки?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн