par(mar=c(2,2,2,2))
# для простоты Создаю цену
P <- cumsum(rnorm(300))
plot(P,t="l")
hankel <- function(x,n) embed(x, n)[ ,n:1]
# Создаю данные для обучения Х ,скользящее окно виде матрицы
X <- t(apply(hankel(P,11),1,function(x) cumsum(diff(x))))
P <- tail(P,nrow(X))
# Делаю разметку индексов для трейн и тест и валидации
tr <- 1:100
ts <- 1:200
al <- 1:nrow(X)
library(randomForest)
# Создаю фитнес сункцию , подбираем генетикой для фореста такой таргет чтобы
# на выходе был максимально коррелированый с ценой ряд
fit <- function(Y){
set.seed(123)
rf <- predict( randomForest(Y~.,X[tr,],ntree=100) , X[ts,])
return( cor(rf, P[ts]) )}
library(GA)
GA <- ga(type = "real-valued",
fitness = fit,
lower = rep(-1,100),
upper = rep(1,100),
popSize = 100,
maxiter = 100,
run = 40)
plot(GA)
GA_Y <- tail(GA@solution,1)[1,]
测试模型。
# Получаем нашу модель которая делает то что нужно
set.seed(123)
rf <- predict( randomForest(GA_Y~.,X[tr,],ntree=100) , X[al,])
layout(1:2)
plot(P,t="l",main="original price") ; abline(v=c(100,200),lty=2,col=c(3,4))
plot(rf,t="l",main="model out") ; abline(v=c(100,200),lty=2,col=c(3,4))
abline(h=0,col=3,lty=3)
layout(1:2)
plot(P,t="l",main="original price") ; abline(v=c(100,200),lty=2,col=c(3,4))
plot(cumsum(rf),t="l",main="model out cumsum") ; abline(v=c(100,200),lty=2,col=c(3,4))
与其他方法相结合,也许会有所收获。
怎么了?
这就是我得到的信号。相关,因为基数是数量级相近的增量
示例公式价格 - MA(n) * std(n) * coef,其中 MA 和 std - 移动平均值和任意阶的标准偏差,以及均衡系数,越大 - 序列越稳定。本例中为 50000。
由于某种原因,我的移动平均法比增量法显示出更好的稳定性。
系数为 20。
这与小数点差类似,但它是即时计算的。
也许有人能想到其他办法
这就是我得到的信号。相关,因为基数是接近数量级的增量
这些曲线一般是怎样的?
Maxim Dmitrievsky#:
Maybe someone will come up with other options
来了,符号回归来救场了
这些曲线球到底是怎么回事?
好吧,符号回归来救你了。
公式如下
我会抛出一些东西,我会给你看一个不带 SR 的更简单的例子。
我就随便拼凑一下,给大家看一个不带 SR 的简单例子。
使用 SR 需要花费更多时间进行编码和规划,因此,为了简单、快速和清晰,我将其简化...
我没有实时创建公式,而是创建了一个 "公式结果"--一条曲线,然后将其作为模型的目标。
我创建了一个拟合函数,使价格和模型输出之间的相关性最大化,但模型输出有一个限制:它只能在-1 和 1 之间。
也就是说,我们得到的序列应该与价格相关,但被 "箝制 "在静态值的范围内。如果你需要迪克-富勒(Dickie Fuller)等人所说的真正的静态性,你只需将拟合函数改为你所需的值即可。
创建数据,用遗传学训练模型
测试模型。
垂直线是训练、测试和验证的分隔线。
如图所示,模型已经学会将价格作为输入,而输出则是与价格相关的统计序列。
为了更加清晰,我们可以对模型输出进行累积求和。
如图 ))))你不需要发明任何东西,一切都可以自动完成。
有了 SR,你需要更多的时间来编写代码和进行规划,因此为了简单、快速和清晰,我把它做得更简单了。
我没有实时创建公式,而是创建了一个 "公式结果"--一条曲线,然后将其作为模型的目标。
我创建了一个拟合函数,使价格和模型输出之间的相关性最大化,但模型输出有一个限制:它只能在 -1 和 1 之间。
也就是说,我们得到的序列应该与价格相关,但被 "箝制 "在静态值的范围内。如果我们需要迪基-富勒等人所说的真正静态值,我们只需将拟合函数改为我们所需的值即可。
创建数据并用遗传学训练模型
验证模型
垂直线表示训练、测试和验证的分离。
如图所示,模型已学会将价格作为输入,输出是一个与价格相关的统计序列
为了更加清晰,我们可以从模型输出中得出一个累积总和
像这样 ))))而且你什么都不用想,一切都可以在机器上完成
有意思,我稍后再想想,我们今天喝的是血腥玛丽酒,很难思考。
我想知道在 python 中需要多少行.....
在 µl 中可能需要数千行))))))))))))))))))))))))))))