Технический анализ один из самых популярных методов в попытке спрогнозировать цену финансовых активов, или же найти наиболее вероятную точку для входа/выхода в/из них. По нему написано масса книг, придумано огромное количество индикаторов и еще больше объяснений как ими пользоваться. Конечно, определенная простота методов ТА не может не привлекать людей, а смотря как он ведет себя на истории, у многих создается реальное впечатление, что ТА обладает некоторой предсказательной силой.
Взглянув на следующий график котировок, даже без методов технического анализа, создается впечатление, что перед нами интересные акции, у которых есть постоянный рост. За 5 лет она выросла в 2,86 раза, что эквивалентно 30% годовых, если считать по методу сложного процента.
Технические аналитики или инвесторы, размышляя над тем, стоит ли купить данную акцию или продать ее (например, в шорт), конечно нанесут на данный график индикаторы, уровни и все те методы, которые они используют и интерпретируют для себя как сигналы в принятии решений. Выглядеть это может по-разному, например так как показано на следующем графике. В любом случае по итогу этих построений, кто-то увидит хороший момент покупки, кто-то хороший момент для продажи, а кто-то решит, что еще не пришло время ни для одного ни для другого.
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()И вот результат прогнозирования:
Думай медленно — предсказывай точно. Искусство и наука предвидеть опасность. ФилипТетлок, ДэнГарднер
Думай медленно — предсказывай точно. Искусство и наука предвидеть опасность. ФилипТетлок, ДэнГарднер
Думай медленно — предсказывай точно. Искусство и наука предвидеть опасность. ФилипТетлок, ДэнГарднер
Электронная книга https://t.me/kudaidem/1808