交易中的机器学习:理论、模型、实践和算法交易 - 页 2642

 
Maxim Dmitrievsky #:
与其他方法相结合,也许会有所收获。
怎么样?
 
mytarmailS #:
怎么了?
我还没做呢我有一个复杂的逻辑,我需要想好把它放在哪里。
 

这就是我得到的信号。相关,因为基数是数量级相近的增量


示例公式价格 - MA(n) * std(n) * coef,其中 MA 和 std - 移动平均值和任意阶的标准偏差,以及均衡系数,越大 - 序列越稳定。本例中为 50000。

由于某种原因,我的移动平均法比增量法显示出更好的稳定性。

系数为 20。

这与小数点差类似,但它是即时计算的。

也许有人能想到其他办法

 
Maxim Dmitrievsky #:

这就是我得到的信号。相关,因为基数是接近数量级的增量

这些曲线一般是怎样的?

Maxim Dmitrievsky#

Maybe someone will come up with other options

来了,符号回归来救场了

 
mytarmailS #:

这些曲线球到底是怎么回事?

好吧,符号回归来救你了。

公式如下
请提出一个变式,如何通过使用 cf
 
Maxim Dmitrievsky #:
公式如下
提出一个变式,说明如何通过 cf 使报价更接近静态数列

我会抛出一些东西,我会给你看一个不带 SR 的更简单的例子。

 
mytarmailS #:

我就随便拼凑一下,给大家看一个不带 SR 的简单例子。

这里不能只用一个变量,你需要构建属性,并对它们进行检查和训练。

不过,这些符号并不愚蠢,但至少要有一定的意义,否则你就会永远做不下去。
 
Maxim Dmitrievsky #:

使用 SR 需要花费更多时间进行编码和规划,因此,为了简单、快速和清晰,我将其简化...

我没有实时创建公式,而是创建了一个 "公式结果"--一条曲线,然后将其作为模型的目标。


我创建了一个拟合函数,使价格和模型输出之间的相关性最大化,但模型输出有一个限制:它只能在-1 和 1 之间。

也就是说,我们得到的序列应该与价格相关,但被 "箝制 "在静态值的范围内。如果你需要迪克-富勒(Dickie Fuller)等人所说的真正的静态性,你只需将拟合函数改为你所需的值即可。



创建数据,用遗传学训练模型

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

垂直线是训练、测试和验证的分隔线。


如图所示,模型已经学会将价格作为输入,而输出则是与价格相关的统计序列。

为了更加清晰,我们可以对模型输出进行累积求和。


如图 ))))你不需要发明任何东西,一切都可以自动完成。

 
mytarmailS #:

有了 SR,你需要更多的时间来编写代码和进行规划,因此为了简单、快速和清晰,我把它做得更简单了。

我没有实时创建公式,而是创建了一个 "公式结果"--一条曲线,然后将其作为模型的目标。


我创建了一个拟合函数,使价格和模型输出之间的相关性最大化,但模型输出有一个限制:它只能在 -1 和 1 之间。

也就是说,我们得到的序列应该与价格相关,但被 "箝制 "在静态值的范围内。如果我们需要迪基-富勒等人所说的真正静态值,我们只需将拟合函数改为我们所需的值即可。



创建数据并用遗传学训练模型

验证模型

垂直线表示训练、测试和验证的分离。


如图所示,模型已学会将价格作为输入,输出是一个与价格相关的统计序列

为了更加清晰,我们可以从模型输出中得出一个累积总和


像这样 ))))而且你什么都不用想,一切都可以在机器上完成

有意思,我稍后再想想,今天是血腥玛丽日,很难思考。
 
Maxim Dmitrievsky #:
有意思,我稍后再想想,我们今天喝的是血腥玛丽酒,很难思考。

我想知道在 python 中需要多少行.....

在 µl 中可能需要数千行))))))))))))))))))))))))))))