Блог им. 3Qu |Хотите попрогнозировать рыночные котировки? Нет проблем - вот код.

    • 14 сентября 2021, 22:46
    • |
    • 3Qu
  • Еще
Итак, код обучения и прогнозирования нейросетью рыночных котировок на 5 минут.
import sqlite3 as sql
from scipy.stats import logistic
import math
import numpy as np
import numpy.random as rnd
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor

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()

Ldata = len(sdata)
N = 8000 # Количество сделок
ld = 5 #Продолжительность сделки
NNinterval = 20 # Количество входов NN

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

class Candle:
    tr = 0
    dt = 1
    o = 2
    h = 3
    l = 4
    c = 5
    v = 6
    
cl = Candle
DataC =[sdata[i][cl.c] for i in range(0,Ldata)]

# sigmoid линейность до 0.5
def sigmoidnorm(x, alfa = 0.9, xmin = -1.3, xmax = 1.3):
    return (xmax - xmin)*((1 / (1 + math.exp(-x*2.0*alfa))) - 1.0) + xmax

x = [0.002 * i - 3 for i in range(0,3000)]
y = [sigmoidnorm(x[i]) for i in range(len(x))]


plt.plot(x,y)
plt.grid()
plt.show()

# формируем сделки.
def DealsGenL(rm,ld):
   #Lm = len(rm)
   ix = []
   x = []
   pr = []
   
   for i in range(0,N):
        if rm[i] + ld < Ldata and rm[i] - NNinterval - 1 > 0:
            delta = (sdata[rm[i]+ld][cl.c] - sdata[rm[i]][cl.c])/sdata[rm[i]+ld][cl.c]*100
            x0 = [sigmoidnorm((sdata[rm[i] - j][cl.c] - sdata[rm[i]][cl.c])/sdata[rm[i]][cl.c]*100) \
                 for j in range(0, NNinterval)]
            ix.append(rm[i])
            x.append(x0)
            pr.append(delta)
   return ix, x, pr


Ix, X, Pr = DealsGenL(rm,ld)



Ib = 0
Ie = 100

plt.plot(X)
plt.legend()
plt.grid()
plt.show()


plt.plot(Pr, label = 'Prof')
plt.legend()
plt.grid()
plt.show()


regr = MLPRegressor(hidden_layer_sizes = [30,20,15,10,5], \
                    max_iter=500, activation = 'tanh')

regr.fit(X, Pr)
Out = regr.predict(X)

plt.plot(Pr, Out, '.')
plt.grid()
plt.show()
И вот результат прогнозирования:

( Читать дальше )

Блог им. 3Qu |Через 5 минут прогноз рассыпается. (с)

    • 05 августа 2021, 20:38
    • |
    • 3Qu
  • Еще
Был у меня на днях диалог с одним нашим форумчанином, и сказал он с некоторым сожалением — через 5 минут прогноз рассыпается. ©
Вообще, я с этим вполне согласен, это действительно близко к истине. Однако,
во первых: 5-ти минут часто вполне достаточно для сделки,
во вторых: по ходу пьесы можно прогнозировать и дальше, на следующие 5 минут, и, если все ОК, продлевать сделку на следующие 5 минут, потом на следующие и так далее.
Таким образом, мы поимеем систему, в которой, да, основные сделки будут не более 5 минут, но будут присутствовать и сделки более продолжительные, до 15 минут и более.
Только скажу, что из этого может получиться оч неплохая и весьма прибыльная система.

Блог им. 3Qu |Сегодня че-то много о нейросетях (НС)

    • 09 марта 2021, 16:04
    • |
    • 3Qu
  • Еще
Основной вопрос — может ли НС, и вообще методы МО, прогнозировать рынок?
Зададим более простой вопрос — можно ли НС обучить выполнять оператор if()… else? Ответ очевиден — конечно можно.
А обучить выполнению группы таких операторов? — Не вопрос, конечно можно.
Т.е., НС можно обучить практически любой логике. Вроде, сомнений не вызывает.

Теперь у нас есть заведомо работоспособная прибыльная торговая система (ТС), принимающая решения о покупке/продаже на основе некоторых данных, констант и логики. Решение — это своего рода прогноз. Решение: покупать — это прогноз роста цены актива, продавать — прогноз падения цены.

Итак, если ТС построена на логике, а НС можно успешно обучить любой логике, то НС можно обучить логике нашей прибыльной ТС. А так как решение ТС — это прогнозирование рынка, то НС и другие методы МО без всяких сомнений могут прогнозировать рынок.
Вот, мы с вами все и доказали:
НС и другие методы МО без всяких сомнений могут прогнозировать рынок.


Блог им. 3Qu |Как работает Machine Learning.

    • 01 января 2021, 22:30
    • |
    • 3Qu
  • Еще
Различных методов Machine Learning очень много, но все они работают примерно одинаково. Это и нейросети, и леса-деревья, и Байесовские классификаторы, и многое другое. Найти и прочитать как ходят-как сдают, как обучают и проверяют правильность обучения — не проблема.
Но пользователи часто забывают одно правило: мусор на входе — мусор на выходе. Для обучения недостаточно сделать обучающую последовательность с правильными ответами — результатом будут хорошие результаты на обучающей последовательности, и никакие на реальных данных.
Таким образом, мы должны четко себе представлять, чему именно мы учим, и это вовсе не правильные ответы, а правильные ответы на правильные вопросы. Если не хотите получать дурацкие ответы — не задавайте дурацкие вопросы.

Т.е., для обучения МЛ нам нужно сформулировать адекватные вопросы и ответы на них. Только в этом случае метод МЛ реально обучится и будет реально работать не только на обучающейся последовательности.
Вопрос ещё в том, что обычно мы не знаем и правильных вопросов.
Но это дело поправимое  Мы формируем какую либо гипотезу, например — три солдата показывают нам то-то и то-то. Мы как-то ищем этих трёх солдат на истории, там же находим ответы на них, обучаем на этом метод МЛ, проверяем на независимом отрезке истории, и выясняем — действительно ли эти 3 солдаты так важны для нашей торговли, или ну их на фиг.
Понятно, что и при обучении и на реале нам надо задавать МЛ только значимые вопросы, а именно, показывать МЛ не все данные подряд, а только наших трёх солдат.
Ну, а если солдаты воевать не желают, проверяем значимость вороны на шесте.) И так, пока действительно не найдем что-то стоящее.

Блог им. 3Qu |Классификация сделок в торговых системах 2 (пример).

    • 17 декабря 2020, 21:04
    • |
    • 3Qu
  • Еще
Был у меня топик  "Классификация сделок в торговых системах" — в общем, не зашел. Но некоторые плюсанули, вот, для некоторых и напишу пример конкретного применения. Рекомендую прочитать предыдущий, иначе можете не понять этот топик.
К счастью, у меня оказался рояль в кустах — вялотекущий проект системы прогнозирования котировок, вычисляющей прогноз изменения цены на интервале Т по значению и состоянию цены в момент t — dС(t+Т). Ну, и общая формула прогнозирующей системы:
                              dC(t+T) = C(t+T) — C(t),
где C(t) — цена в момент t.
График теста системы я показывал в комментариях к предыдущему топику вот он:

Классификация сделок в торговых системах 2 (пример).
По Х (Predict)  — прогноз изменение цены, по У (Real) — реальное изменение цены через время Т. Не обращайте внимание на значения осей, это не сами изменения цены, это нормированные к диапазону системы значения изменений цен.

( Читать дальше )

Блог им. 3Qu |О прогнозировании.

    • 16 декабря 2019, 16:36
    • |
    • 3Qu
  • Еще

Не было гвоздя -
Подкова пропала,
Не было подковы -
Лошадь захромала,
Лошадь захромала -
Командир убит,
Конница разбита,
Армия бежит!
Враг вступает в город,
Пленных не щадя,
Оттого, что в кузнице
Не было гвоздя!
Перевод с англ., Самуил Маршак


Хороший стишок. О том, что маленькие причины влекут большие последствия, взмах крыла бабочки порождает бурю и пр. Это происходит постоянно, каждый день, м.б. каждую минуту — цепь случайных событий порождает большие последствия. Все логично, причинно-следственные связи и выявленные закономерности налицо. Такая цепочка событий всегда строится постприори.
Вам ничего это не напоминает? Правильно — это типичный образец Технического Анализа (ТА). Теперь мы можем прогнозировать события, и если в следующий раз не будет гвоздя и упадет подкова, то дальнейший ход событий очевиден — шортить надо, акции неизбежно будут падать. Некоторые, более осторожные, прежде чем шортить, подождут когда захромает лошадь, или даже убьют командира. Ну, теперь-то точно упадут.
Однако, рассмотрим ситуацию детально.



( Читать дальше )

....все тэги
UPDONW