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
    Красиво

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

    С уважением
  • Даниил Лазарев
    15 августа 2021, 18:29
    Хммм. Интересно, делаю тоже на С++20/Debian/Postgres. за полгода столкнулся с таким количеством нюансов, хотя в основе своя система аналитики (аналитическая платформа на с++), что сомневаюсь я про питон… 

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

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