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

 
Aleksey Vyazmikin #:

之前发布的代码脚本也停止工作了。

library(patchwork)

安装了吗?

 
Aleksey Vyazmikin #:

在一般更新中,即使错误没有写入,但结果也是一样的--几乎都是向上的。

运行它,我得到了相同的图片))


我意识到了错误,在目标中我窥视到了未来......是的......我们失去了控制。

这一行应替换为

dp <- с(diff(close),0)   

dp <- tail(c(diff(close),0),nrow(X))


我重写了代码,使其更易读一些。

close <- cumsum(rnorm(10000,sd = 0.00001))+100
par(mar=c(2,2,2,2))  ; plot(close,t="l")


D <- make_data(close)
tr <- 1:500
R <- make_rules(y = D$Y[tr] , x = D$X[tr,])
# head(R)
buy_rules <- R$condition[ R$pred==1 ]



plot(x = 1:2000,y = rep(NA,2000), ylim = c(-0.001,0.001)) 
for(i in 1:length(buy_rules)){
  cum_profit <- cumsum( D$diff_price[  eval(str2expression(buy_rules[i]))  ] )
  lines(cum_profit,col=8,lwd=1)}
for(i in 1:length(buy_rules)){
  cum_profit <- cumsum( D$diff_price[  eval(str2expression(buy_rules[i]))  ] )
      
      if(length(cum_profit)>30){
      ccor <- cor(cum_profit, 1:length(cum_profit))
      if(ccor>=0.95)  lines(cum_profit,col=i,lwd=2)
      }
}
abline(h = 0,col=2,lty=2)
gc(T,T)

辅助函数

make_rules <- function(y, x){
  library(inTrees)  # ?inTrees::getRuleMetric()
  library(RRF)
  rf <- RRF(x = x,y = y,ntree=100)
  rule <- getRuleMetric(unique(extractRules(RF2List(rf),x)),x,y)
  rule <- data.frame(rule,stringsAsFactors = F)
  for(i in c(1,2,3,5)) rule[,i] <- as.numeric(rule[,i])
  return(rule)}
make_data <- function(close){
  sw <- embed(x = close,dimension = 10)[,10:1] #  make slide window data
  X <- t(apply(sw,1,scale)) #  normalase data
  
  dp <- tail(c(diff(close),0),nrow(X)) #  diff prices
  Y <- as.factor( ifelse(dp>=0,1,-1) ) #  target for classification
  res <- list(Y=Y,X=X,diff_price=dp)
  return(res)
}


 
Maxim Dmitrievsky #:

好吧,如果没有其他评估标准,那么通过参数的稳定性

我们还可以将 TS 的输出值表示为时间信号,并测量其熵,将其与随机性进行比较。如果 TS 能够捕捉到某些周期性重复的规律,那么它就会得到反映。

对于定制 FF 的构建者来说,这可能很有用。

最好的衡量标准是时间和现实生活中的测试。任何 TC 都会停止工作。

我已经明白了为什么它在新数据上不起作用,甚至大致明白了该怎么做。

 
Aleksey Nikolayev #:

关于从 ONNX 到 ONNX 的问题,仅仅是由我遇到的两种说法并列产生的:1) 模型获取可以表示为一个流水线,2) 流水线可以转换为 ONNX 格式。

显然,这在实践中几乎是不可能的。事实上,我想了解究竟是什么阻碍了这种可能性的实现,从而认识到这项技术整体上的根本局限性。

无法写入文件是一回事,不支持数据类型(例如数据帧)又是另一回事。

这两种说法都对。获取包括预处理在内的模型是可能的。遗憾的是,并非所有框架都能做到,只有最简单的框架才能做到。TF/Keras 实现了执行预处理的第一个 NN 层。 scikit-learn 有最丰富的管道+模型选择。 参见 scl2onnx。

很高兴看到认真的贡献者意识到 ONNX 应包括从预处理开始的整个管道。生产中的新数据必须经过与训练中相同的预处理步骤。否则,ONNX 模型的结果将无法预测。

这个方向正在快速发展,我认为这个问题很快就会得到解决。目前,您应该先进行试验。

祝你好运

 
与本主题无关的评论已移至"不可接受的交流方式"。
 
mytarmailS #:

运行它,我得到了相同的图片 ))


我意识到我错了,我在目标中窥视了未来......是的......我失去了感觉。

应该替换这一行

改为


稍微改写一下代码,使其更易读

辅助功能


试用修改后的代码

close <- cumsum(rnorm(10000,sd = 0.00001))+100
par(mar=c(2,2,2,2))  ; plot(close,t="l")


D <- make_data(close)
tr <- 1:500
R <- make_rules(y = D$Y[tr] , x = D$X[tr,])
#  head(R)
buy_rules <- R$condition[ R$pred==1 ]



plot(x = 1:2000,y = rep(NA,2000), ylim = c(-0.001,0.001)) 
for(i in 1:length(buy_rules)){
  cum_profit <- cumsum( D$diff_price[  eval(str2expression(buy_rules[i]))  ] )
  lines(cum_profit,col=8,lwd=1)}
for(i in 1:length(buy_rules)){
  cum_profit <- cumsum( D$diff_price[  eval(str2expression(buy_rules[i]))  ] )
  
  if(length(cum_profit)>30){
    ccor <- cor(cum_profit, 1:length(cum_profit))
    if(ccor>=0.95)  lines(cum_profit,col=i,lwd=2)
  }
}
abline(h = 0,col=2,lty=2)
gc(T,T)

make_rules <- function(y, x){
  library(inTrees)  # ?inTrees::getRuleMetric()
  library(RRF)
  rf <- RRF(x = x,y = y,ntree=100)
  rule <- getRuleMetric(unique(extractRules(RF2List(rf),x)),x,y)
  rule <- data.frame(rule,stringsAsFactors = F)
  for(i in c(1,2,3,5)) rule[,i] <- as.numeric(rule[,i])
  return(rule)}
make_data <- function(close){
  sw <- embed(x = close,dimension = 10)[,10:1] #  make slide window data
  X <- t(apply(sw,1,scale)) #  normalase data
  
  dp <- tail(c(diff(close),0),nrow(X)) #  diff prices
  Y <- as.factor( ifelse(dp>=0,1,-1) ) #  target for classification
  res <- list(Y=Y,X=X,diff_price=dp)
  return(res)
}

出现错误

> D <- make_data(close)
Error in make_data(close) : could not find function "make_data"
> source('~/.active-rstudio-document', echo=TRUE)

> close <- cumsum(rnorm(10000,sd = 0.00001))+100

> par(mar=c(2,2,2,2))  ; plot(close,t="l")

> D <- make_data(close)
Error in make_data(close) : could not find function "make_data"
> source('~/.active-rstudio-document', echo=TRUE)

> close <- cumsum(rnorm(10000,sd = 0.00001))+100

> par(mar=c(2,2,2,2))  ; plot(close,t="l")

> D <- make_data(close)
Error in make_data(close) : could not find function "make_data"
> 
 
Aleksey Vyazmikin #:

试用修改后的代码

出现错误

因为函数必须先声明后使用...

你是在耍我吗?
 
mytarmailS #:
因为函数必须先声明,然后使用...

你是在耍我还是怎么的?

我怎么知道

那么这个错误就是

> D <- make_data(close)
Error in h(simpleError(msg, call)) : 
  ошибка при оценке аргумента '.data' при выборе метода для функции 'embed': argument ".data" is missing, with no default
 
关于 RL 的有趣文章。https://habr.com/ru/articles/349800/
本主题的创建者与另一位成员在彗星馆中的有趣对话。
 
mytarmailS #:
关于 RL 的有趣文章。https:// habr.com/ru/articles/349800/
本主题的创建者与另一位成员在彗星馆中的有趣对话。

对于交易任务来说,RL 的概念不是多余的吗?我们有环境对代理的影响,但代理对环境有影响吗?也许可以人为地引入第二种影响,但这样做有意义吗?

文章中的两个(或三个)观点对我们来说一点也不多余--那就是损失函数应该准确反映我们的需求,而且应该是平滑的(单调的)。在我们的例子中,它应该是利润,而且应该平稳、单调地依赖于模型参数。

也许可以通过某种方法(例如,类似于核平滑法)实现利润的某种类似物的平滑性。但我很怀疑单调性。