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

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

★34
32 комментария
Как в анекдоте — Грааль после сборки, нужно тщательно обработать напильником!
avatar
Matrica, где вы увидели Грааль? )) Это шаблон для обучения и работы с НС, не более того.
Да, дальше каждый из этого может вырезать своего Буратино. Или не вырезать.)
avatar
3Qu, ну а я про что, что обрабатывать напильником, что вырезать Буратино, трудозатраты те же! ))
avatar
Matrica, Нет -после сборки останутся лишние детали и придётся читать инструкцию!
avatar
а инструкции не будет, разбирайтесь сами методом тыка
avatar
petr71, не будет. В коде абсолютно все написано. Если вы его не понимаете, то по любому он вам не понадобится, с инструкцией или без нее.
avatar
Отличный пост! Народ, давайте обсуждать. В примере вероятность роста выше. Так что, лонгуем? Через 20 свечей если растет, держим лонг, а если падает — шортим… потому что вероятность будет в другую сторону… ТС — ты не пали так граали то)))
avatar
Laukar, вы сами такой «Грааль» получите через 15 минут.))
Сейчас покажу вам Грааль пятилетней давности.

Вот это Грааль.)) Ага, тоже прогнозирование.
avatar
3Qu, 
Смешно, но многие и правда делают наоборот…
avatar
3Qu, это результаты на тестовой выборке которую сеть никогда не видела или результаты по обучающей выборке?
avatar
Михаил Дунаев, в топике прямо на обучающей, по любому ничему не научилась. В комментах на тестовой.
avatar

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

avatar
Laukar, эт типичное представление инвесторов об окружающей действительности.))
avatar
а что должно получиться на выходе? заглядывание вперёд?
avatar
Tуземец, да, и такой график вы уже видите в комментах. Старый график.
Вполне успешно заглядывает.)
avatar
А зачем там генератор случайных чисел? Это же сплошной генератор случайных чисел)))
avatar

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

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

павел петрович попов, Можно почитать A Thousand Brains, by Jeff Hawkins довольно новая и очень гармоничная теория о то как, зачем и почему. 
Для более любопытных у них даже есть наработки для проверки этой самой теории, можно посмотреть на гитхабе.
avatar

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

 

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

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

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

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

Я понял что это просто шаблон, просто интересно почему именно такая конфигурации сети выбрана и чем обоснован выбор такой функцией активации?
avatar
CloseToAlgoTrading, можно и сигмоид, немного повлияет на скорость обучения, не более.
Конфигурация сети выбрана из прошлого опыта. Скорректировать конфигурацию можно по результатам.
avatar
C:/Users/ubase/Documents/StockDB/StockDB21.sqlite

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

avatar
Александр non, база данных с историей по инструменту.
avatar
Ага, результат никакой. Так и должно быть, мы попытались научить прогнозировать нейросеть котировки через 5 минут по Close 20 предыдущих свечей.
    А если в коде сделать так >>   котировки через 1 день по Close 20 предыдущих (дней) свечей?
avatar
Вельвет, пробуйте. Могу только сказать, что если НС ничего не найдет, то там ничего явного и нет.
avatar
Игрался по молодости в такие штуки.
Основное правило которое сети находили — завтра будет то же что и сегодня.
Впрочем, на тренде это позволяет зарабатывать :)
avatar
Врач-бондиатОр, не совсем так. График в комментах посмотрите — находит в большинстве случаев. Жаль тогда до реала не дошло, смысла не было, действующая была не хуже, а дальнейшей разработкой темы было долго заниматься.
avatar
3Qu,  а какая была средняя ошибка прогноза?
Для успешной торговли ошибка должна быть небольшой, а смогут ли ее дать автокорреляции — большой вопрос.
avatar
Врач-бондиатОр, ошибки не считал. Впрочем, вы сами можете оценить ошибки по графику.
Прогноз около нуля нас не интересует, а дальше от нуля, там и ошибок особо нет. Ну, и стопы никто не отменял.
avatar
Сорри — а можно для тупых?

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

С уважением
avatar
Мальчик Buybuy, 
Сорри — а можно для тупых?

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

С уважением
Можно.)) Вам лично это уже однажды АГ объяснял. Кстати, делал это неоднократно.
Я, кстати, тоже.) Здесь наши позиции с АГ совпадают.
avatar

теги блога 3Qu

....все тэги



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