3Qu
3Qu личный блог
14 сентября 2021, 22:46

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

Итак, код обучения и прогнозирования нейросетью рыночных котировок на 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()
И вот результат прогнозирования:
Хотите попрогнозировать рыночные котировки? Нет проблем - вот код.
Ага, результат никакой. Так и должно быть, мы попытались научить прогнозировать нейросеть котировки через 5 минут по Close 20 предыдущих свечей.
Это было сделано для подготовки шаблона обучения. Дальше мы будем это усложнять.

ЗЫ комментов к программе не будет. Разбирайтесь, плиз, сами.

32 Комментария
  • Matrica
    14 сентября 2021, 22:55
    Как в анекдоте — Грааль после сборки, нужно тщательно обработать напильником!
      • Matrica
        15 сентября 2021, 00:55
        3Qu, ну а я про что, что обрабатывать напильником, что вырезать Буратино, трудозатраты те же! ))
    • Elcavaero
      14 сентября 2021, 23:09
      Matrica, Нет -после сборки останутся лишние детали и придётся читать инструкцию!
  • petr71
    14 сентября 2021, 23:14
    а инструкции не будет, разбирайтесь сами методом тыка
  • Laukar
    15 сентября 2021, 00:07
    Отличный пост! Народ, давайте обсуждать. В примере вероятность роста выше. Так что, лонгуем? Через 20 свечей если растет, держим лонг, а если падает — шортим… потому что вероятность будет в другую сторону… ТС — ты не пали так граали то)))
      • Laukar
        15 сентября 2021, 00:14
        3Qu, 
        Смешно, но многие и правда делают наоборот…
      • Михаил Дунаев
        18 сентября 2021, 15:33
        3Qu, это результаты на тестовой выборке которую сеть никогда не видела или результаты по обучающей выборке?
  • Laukar
    15 сентября 2021, 00:19

    Короче, если росло, то вероятно продолжит расти, представляете!
    Не падать, как мы обычно думаем, расти!
    А если быстро росло, то быстро расти!

  • ака Tуземец
    15 сентября 2021, 01:27
    а что должно получиться на выходе? заглядывание вперёд?
  • Laukar
    15 сентября 2021, 01:38
    А зачем там генератор случайных чисел? Это же сплошной генератор случайных чисел)))
  • Игорь Калинин
    15 сентября 2021, 07:05

    Ух как громко- нейросеть. Нейроны? Намек на мозг. А как эти нейроны в мозгу образовываются? А главное, как, зачем и почему между собой связываются?

    ИИ из той же серии, как и квантовый компьютер.

    • CloseToAlgoTrading
      15 сентября 2021, 11:50
      павел петрович попов, Можно почитать A Thousand Brains, by Jeff Hawkins довольно новая и очень гармоничная теория о то как, зачем и почему. 
      Для более любопытных у них даже есть наработки для проверки этой самой теории, можно посмотреть на гитхабе.
      • Игорь Калинин
        15 сентября 2021, 12:00

        CloseToAlgoTrading, новая и очень гармоничная теория о то как, зачем и почему. 

         

        Вы про мозг или про нейросети?

        Про мозг теории не нужны, там уже давно практика.

        А нейросети да, там одни теории и никакой практики.

  • CloseToAlgoTrading
    15 сентября 2021, 11:55
     3Qu, 
    regr = MLPRegressor(hidden_layer_sizes = [30,20,15,10,5], \
                        max_iter=500, activation = 'tanh')

    Я понял что это просто шаблон, просто интересно почему именно такая конфигурации сети выбрана и чем обоснован выбор такой функцией активации?
  • Александр non
    15 сентября 2021, 13:22
    C:/Users/ubase/Documents/StockDB/StockDB21.sqlite

    что за файлик?

  • Вельвет
    15 сентября 2021, 15:34
    Ага, результат никакой. Так и должно быть, мы попытались научить прогнозировать нейросеть котировки через 5 минут по Close 20 предыдущих свечей.
        А если в коде сделать так >>   котировки через 1 день по Close 20 предыдущих (дней) свечей?
  • Врач-бондиатОр
    15 сентября 2021, 22:36
    Игрался по молодости в такие штуки.
    Основное правило которое сети находили — завтра будет то же что и сегодня.
    Впрочем, на тренде это позволяет зарабатывать :)
      • Врач-бондиатОр
        16 сентября 2021, 21:11
        3Qu,  а какая была средняя ошибка прогноза?
        Для успешной торговли ошибка должна быть небольшой, а смогут ли ее дать автокорреляции — большой вопрос.
  • Мальчик buybuy
    21 сентября 2021, 03:29
    Сорри — а можно для тупых?

    Зачем вообще пытаться прогнозировать будущие цены?

    С уважением

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

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