交易中的机器学习:理论、模型、实践和算法交易 - 页 21 1...141516171819202122232425262728...3399 新评论 СанСаныч Фоменко 2016.06.20 06:43 #201 Dr.Trader:我也试了一下Y尺度,两种情况下的R^2(有Y尺度和没有Y尺度)得出的结果是一样的(尽管他们使用的是不同的软件包!)。我想,Y-scale可能会在主成分数量较少的情况下得到同样好的结果。但是,如果即使使用所有的组件,结果仍然不令人满意(就像我的情况一样)--那就没有什么区别了。另外,它的工作速度更快,这对我来说现在更重要。但我还没有通过理论或实践证明这种方法是否适合于选择预测因子......起初我有一个想法,在所有预测因子上建立主要成分模型,通过观察成分的系数来选择预测因子。但后来我注意到,随着添加垃圾--模型的R^2下降了。尝试不同的预测因子集并寻找那些具有较高R^2的预测因子是有意义的,但这只是一个理论。我经常在这里提出以下建议:如果你把你的作品集蒸馏给我,我们就把我的结果和你的进行比较。对我来说,最理想的是.RData。一个框架,其中目标是二进制的,预测器最好是实数。 Alexey Burnakov 2016.06.20 08:58 #202 Dr.Trader:我用来训练森林并在验证样本上返回一个错误。原则上,它是有效的--如果森林过度训练,哪怕是一点点,误差都会趋于50%。现在我使用GetPCrsquared(),即上面那段代码。我也有你在feature_selector_modeller.txt中的例子,但我必须弄清楚并得到需要的代码片段,所以我还没有检查我的数据。以下是你需要带去的东西。library(infotheo) # measured in nats, converted to bitslibrary(scales)library(GenSA)#get datasampleA <- read.table('C:/Users/aburnakov/Documents/Private/dummy_set_features.csv' , sep= ',' , header = T)#calculate parameterspredictor_number <- dim(sampleA)[2] - 1sample_size <- dim(sampleA)[1]par_v <- runif(predictor_number, min = 0, max = 1)par_low <- rep(0, times = predictor_number)par_upp <- rep(1, times = predictor_number)#load functions to memoryshuffle_f_inp <- function(x = data.frame(), iterations_inp, quantile_val_inp){ mutins <- c(1:iterations_inp) for (count in 1:iterations_inp){ xx <- data.frame(1:dim(x)[1]) for (count1 in 1:(dim(x)[2] - 1)){ y <- as.data.frame(x[, count1]) y$count <- sample(1 : dim(x)[1], dim(x)[1], replace = F) y <- y[order(y$count), ] xx <- cbind(xx, y[, 1]) } mutins[count] <- multiinformation(xx[, 2:dim(xx)[2]]) } quantile(mutins, probs = quantile_val_inp) }shuffle_f <- function(x = data.frame(), iterations, quantile_val){ height <- dim(x)[1] mutins <- c(1:iterations) for (count in 1:iterations){ x$count <- sample(1 : height, height, replace = F) y <- as.data.frame(c(x[dim(x)[2] - 1], x[dim(x)[2]])) y <- y[order(y$count), ] x[dim(x)[2]] <- NULL x[dim(x)[2]] <- NULL x$dep <- y[, 1] rm(y) receiver_entropy <- entropy(x[, dim(x)[2]]) received_inf <- mutinformation(x[, 1 : dim(x)[2] - 1], x[, dim(x)[2]]) corr_ff <- received_inf / receiver_entropy mutins[count] <- corr_ff } quantile(mutins, probs = quantile_val) }############### the fitness functionfitness_f <- function(par){ indexes <- c(1:predictor_number) for (i in 1:predictor_number){ if (par[i] >= threshold) { indexes[i] <- i } else { indexes[i] <- 0 } } local_predictor_number <- 0 for (i in 1:predictor_number){ if (indexes[i] > 0) { local_predictor_number <- local_predictor_number + 1 } } if (local_predictor_number > 1) { sampleAf <- as.data.frame(sampleA[, c(indexes[], dim(sampleA)[2])]) pred_entrs <- c(1:local_predictor_number) for (count in 1:local_predictor_number){ pred_entrs[count] <- entropy(sampleAf[count]) } max_pred_ent <- sum(pred_entrs) - max(pred_entrs) pred_multiinf <- multiinformation(sampleAf[, 1:dim(sampleAf)[2] - 1]) pred_multiinf <- pred_multiinf - shuffle_f_inp(sampleAf, iterations_inp, quantile_val_inp) if (pred_multiinf < 0){ pred_multiinf <- 0 } pred_mult_perc <- pred_multiinf / max_pred_ent inf_corr_val <- shuffle_f(sampleAf, iterations, quantile_val) receiver_entropy <- entropy(sampleAf[, dim(sampleAf)[2]]) received_inf <- mutinformation(sampleAf[, 1:local_predictor_number], sampleAf[, dim(sampleAf)[2]]) if (inf_corr_val - (received_inf / receiver_entropy) < 0){ fact_ff <- (inf_corr_val - (received_inf / receiver_entropy)) * (1 - pred_mult_perc) } else { fact_ff <- inf_corr_val - (received_inf / receiver_entropy) } } else if (local_predictor_number == 1) { sampleAf<- as.data.frame(sampleA[, c(indexes[], dim(sampleA)[2])]) inf_corr_val <- shuffle_f(sampleAf, iterations, quantile_val) receiver_entropy <- entropy(sampleAf[, dim(sampleAf)[2]]) received_inf <- mutinformation(sampleAf[, 1:local_predictor_number], sampleAf[, dim(sampleAf)[2]]) fact_ff <- inf_corr_val - (received_inf / receiver_entropy) } else { fact_ff <- 0 } return(fact_ff)}########## estimating threshold for variable inclusioniterations = 5quantile_val = 1iterations_inp = 1quantile_val_inp = 1levels_arr <- numeric()for (i in 1:predictor_number){ levels_arr[i] <- length(unique(sampleA[, i]))}mean_levels <- mean(levels_arr) optim_var_num <- log(x = sample_size / 100, base = round(mean_levels, 0))if (optim_var_num / predictor_number < 1){ threshold <- 1 - optim_var_num / predictor_number } else { threshold <- 0.5 }#run feature selectionstart <- Sys.time()sao <- GenSA(par = par_v, fn = fitness_f, lower = par_low, upper = par_upp , control = list( #maxit = 10 max.time = 1200 , smooth = F , simple.function = F))trace_ff <- data.frame(sao$trace)$function.valueplot(trace_ff, type = "l")percent(- sao$value)final_vector <- c((sao$par >= threshold), T)names(sampleA)[final_vector]final_sample <- as.data.frame(sampleA[, final_vector])Sys.time() - start在数据框架中,最右边的一列是目标列。所有列都应该是类别(整数、字符或因子)。而且你必须装载所有的围栏。一段代码显示了如何将数词转换为分类变量。disc_levels <- 3 # сколько равночастотных уровней переменной создаетсяfor (i in 1:56){ naming <- paste(names(dat[i]), 'var', sep = "_") dat[, eval(naming)] <- discretize(dat[, eval(names(dat[i]))], disc = "equalfreq", nbins = disc_levels)[,1] } Machine learning in trading: Programming tutorials Python in algorithmic trading mytarmailS 2016.06.20 09:47 #203 我在互联网上发现了这个有趣的功能data_driven_time_warp <- function (y) { cbind( x = cumsum(c(0, abs(diff(y)))), y = y ) } y <- cumsum(rnorm(200))+1000 i <- seq(1,length(y),by=10) op <- par(mfrow=c(2,1), mar=c(.1,.1,.1,.1)) plot(y, type="l", axes = FALSE) abline(v=i, col="grey") lines(y, lwd=3) box() d <- data_driven_time_warp(y) plot(d, type="l", axes=FALSE) abline(v=d[i,1], col="grey") lines(d, lwd=3) box() par(op)也许在这种形式下,算法会更好地识别数据?但有一个问题,函数的输出是一个变量 "d",它有一个有两列 "x "和 "y "的矩阵,其中一列表示价格,另一列表示算法所弯曲的时间,问题是如何将这个矩阵变成一个向量,使它不失去其属性。 Dr. Trader 2016.06.20 10:54 #204 桑桑尼茨-弗门科。我经常在这里提出以下建议:如果你把你的套装分给我,我们将把我的结果与你的结果进行比较。对我来说,最理想的是.RData。一个框架,其中的二进制目标和预测器最好是实数。附着力是我最好的一组预测因素。TrainData是2015年eurusd的D1,fronttestData是从2016年1月1日到6月。前期测试有点长,在实际交易中,我不太可能在相同的设置下交易超过一个月,只是想看看这个模型的盈利能力到底能持续多久。FronttestData1、fronttestData2、fronttestData3是从fronttestData中单独切割出来的,只针对1月,只针对2月,只针对3月。我只对降低fronttestData1的误差感兴趣,其他的只是为了研究。预测器组主要包含指标和它们之间的不同计算方法。在fronttest上的nnet错误,我在fronttestData1上有30%,用迭代控制和拟合内部神经元的数量进行训练。我认为这里的30%只是一个机会问题,该模型从2015年3月到2016年2月在市场上抓住了一些趋势。但其他时期也没有合并,这已经很不错了。这是一张来自mt5测试器2014.01-2016.06的图片,我用一个框架标记了训练期。它已经比以前好了:)。目前这是我的极限,我必须解决指标的许多问题,即它们的默认设置与时间框架严格挂钩,例如在H1上我的经验完全没有用,在H1上选择指标的相同算法认为一切都很垃圾。我应该在最初的指标集中加入一堆它们的不同参数的变化,或者自己从ohlc中生成随机指标。 附加的文件: ohlc1timewindic_d1_2015.zip 66 kb Dr. Trader 2016.06.20 11:02 #205 阿列克谢-伯纳科夫。有这个可以拿。这就更有意义了,谢谢你。在我看来,每个指标只有3个类别是不行的。从逻辑上讲,我至少要做100个级别,但这样做会不会更好,或者说会不会失去算法的意义? Alexey Burnakov 2016.06.20 12:07 #206 Dr.Trader:这就更有意义了,谢谢你。在我看来,每个指标只有3个类别是不行的。从逻辑上讲,我至少要做100个级别,但这是更好的,还是会使算法失去意义?该算法将失去其意义。该算法计算输入变量的总水平,并按这些水平的反应水平分布。因此,如果每个输入水平的响应值的数量很低,就不可能评估概率倾斜的统计意义。如果你做100个级别,是的,会有很多变数。那么该算法将对任何子集返回零显著性,鉴于样本量有限,这是合理的。例子是一个很好的例子。输入水平 | 观察数1 1502 120...9 90在这里,我们可以估计出一个反应中的重要性例子--不好。输入水平112 5...357 2...1045 1在此无法估计反应内的重要性 Alexey Burnakov 2016.06.20 12:11 #207 Dr.Trader:附着力是我最好的一组预测因素。TrainData是2015年eurusd的D1,fronttestData是从2016年1月1日到6月。前期测试有点长,在实际交易中,我不太可能在相同的设置下交易超过一个月,我只是想看看这个模型的盈利能力到底能持续多久。FronttestData1、fronttestData2、fronttestData3是从fronttestData中单独切割出来的,只针对1月,只针对2月,只针对3月。我只对降低fronttestData1的误差感兴趣,其他的只是为了研究。预测器组主要包含指标和它们之间的不同计算方法。在fronttest上的nnet错误,我在fronttestData1上有30%,用迭代控制和拟合内部神经元的数量进行训练。我认为这里的30%只是一个机会问题,该模型从2015年3月到2016年2月在市场上抓住了一些趋势。但事实上,其余的时期不合并已经很好了。这是一张来自mt5测试器2014.01-2016.06的图片,我用一个框架标记了训练期。它已经比以前好了:)。目前这是我的极限,我必须解决指标的许多问题,即它们的默认设置与时间框架严格挂钩,例如在H1上我的经验完全没有用,在H1上选择指标的相同算法认为一切都很垃圾。我需要在原来的指标集上添加一堆不同参数的变化,或者以某种方式从ohlc生成随机指标。还不错,但样本外的时期本身很小。也不清楚有多少交易属于样本之外。有几十个,几百个,顺序是什么? СанСаныч Фоменко 2016.06.20 12:22 #208 Dr.Trader:附着力是我最好的一组预测因素。TrainData是2015年eurusd的D1,fronttestData是从2016年1月1日到6月。前期测试有点长,在实际交易中,我不太可能在相同的设置下交易超过一个月,我只是想看看这个模型的盈利能力到底能持续多久。FronttestData1、fronttestData2、fronttestData3是从fronttestData中单独切割出来的,只针对1月,只针对2月,只针对3月。我只对降低fronttestData1的误差感兴趣,其他的只是为了研究。预测器组主要包含指标和它们之间的不同计算方法。在fronttest上的nnet错误,我在fronttestData1上有30%,用迭代控制和拟合内部神经元的数量进行训练。我认为这里的30%只是一个机会问题,该模型从2015年3月到2016年2月在市场上抓住了一些趋势。但事实上,其余的时期不合并已经很好了。这是一张来自mt5测试器2014.01-2016.06的图片,我用一个框架标记了训练期。它已经比以前好了:)。目前这是我的极限,我必须解决指标的许多问题,即它们的默认设置与时间框架严格挂钩,例如在H1上我的经验完全没有用,在H1上选择指标的相同算法认为一切都很垃圾。我需要在原来的指标集上添加一堆不同参数的变化,或者以某种方式从ohlc生成随机指标。我已经看了。我的理解是否正确,在总的数据集中有107条线(107个观测值)? Dr. Trader 2016.06.20 12:37 #209 桑桑尼茨-弗门科。看了看。我是否正确理解了总的数据集有107行(107个观测值)?不,训练集有250多行(2015年的交易日数)。我在trainData表上训练了这个模型。我在fronttestData1上测试了它。其他都是用于额外的检查,你可以忽略它们。trainData--2015年全年。 fronttestData1 - 2016年1月 fronttestData2 - 2016年2月 fronttestData3 - 2016年3月 fronttestData - 2016年1月 - 2016年6月 СанСаныч Фоменко 2016.06.20 13:05 #210 Dr.Trader:不,训练集有250多行(2015年的交易日数)。我在trainData表上训练了模型。我在fronttestData1上测试了它。其他都是为了额外的检查,你可以忽略它们。trainData--2015年全年。 fronttestData1 - 2016年1月 fronttestData2 - 2016年2月 fronttestData3 - 2016年3月 fronttestData - 2016年1月 - 2016年6月对我来说,这很少--我使用统计数据。即使对于目前的窗口,107行对我来说也是非常小的。我为当前的窗口使用了400多个。一般来说,在你的集合中,观察值的数量与预测因子的数量相当。这些是非常具体的套装。不知何故,我看到这种套装需要特殊的方法。没有参考资料,因为我没有这样的问题。 不幸的是,我的方法并不适合你的数据。 1...141516171819202122232425262728...3399 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我也试了一下Y尺度,两种情况下的R^2(有Y尺度和没有Y尺度)得出的结果是一样的(尽管他们使用的是不同的软件包!)。
我想,Y-scale可能会在主成分数量较少的情况下得到同样好的结果。但是,如果即使使用所有的组件,结果仍然不令人满意(就像我的情况一样)--那就没有什么区别了。另外,它的工作速度更快,这对我来说现在更重要。但我还没有通过理论或实践证明这种方法是否适合于选择预测因子......起初我有一个想法,在所有预测因子上建立主要成分模型,通过观察成分的系数来选择预测因子。但后来我注意到,随着添加垃圾--模型的R^2下降了。尝试不同的预测因子集并寻找那些具有较高R^2的预测因子是有意义的,但这只是一个理论。
我经常在这里提出以下建议:如果你把你的作品集蒸馏给我,我们就把我的结果和你的进行比较。
对我来说,最理想的是.RData。一个框架,其中目标是二进制的,预测器最好是实数。
我用来训练森林并在验证样本上返回一个错误。原则上,它是有效的--如果森林过度训练,哪怕是一点点,误差都会趋于50%。
现在我使用GetPCrsquared(),即上面那段代码。我也有你在feature_selector_modeller.txt中的例子,但我必须弄清楚并得到需要的代码片段,所以我还没有检查我的数据。
以下是你需要带去的东西。
library(infotheo) # measured in nats, converted to bits
library(scales)
library(GenSA)
#get data
sampleA <- read.table('C:/Users/aburnakov/Documents/Private/dummy_set_features.csv'
, sep= ','
, header = T)
#calculate parameters
predictor_number <- dim(sampleA)[2] - 1
sample_size <- dim(sampleA)[1]
par_v <- runif(predictor_number, min = 0, max = 1)
par_low <- rep(0, times = predictor_number)
par_upp <- rep(1, times = predictor_number)
#load functions to memory
shuffle_f_inp <- function(x = data.frame(), iterations_inp, quantile_val_inp){
mutins <- c(1:iterations_inp)
for (count in 1:iterations_inp){
xx <- data.frame(1:dim(x)[1])
for (count1 in 1:(dim(x)[2] - 1)){
y <- as.data.frame(x[, count1])
y$count <- sample(1 : dim(x)[1], dim(x)[1], replace = F)
y <- y[order(y$count), ]
xx <- cbind(xx, y[, 1])
}
mutins[count] <- multiinformation(xx[, 2:dim(xx)[2]])
}
quantile(mutins, probs = quantile_val_inp)
}
shuffle_f <- function(x = data.frame(), iterations, quantile_val){
height <- dim(x)[1]
mutins <- c(1:iterations)
for (count in 1:iterations){
x$count <- sample(1 : height, height, replace = F)
y <- as.data.frame(c(x[dim(x)[2] - 1], x[dim(x)[2]]))
y <- y[order(y$count), ]
x[dim(x)[2]] <- NULL
x[dim(x)[2]] <- NULL
x$dep <- y[, 1]
rm(y)
receiver_entropy <- entropy(x[, dim(x)[2]])
received_inf <- mutinformation(x[, 1 : dim(x)[2] - 1], x[, dim(x)[2]])
corr_ff <- received_inf / receiver_entropy
mutins[count] <- corr_ff
}
quantile(mutins, probs = quantile_val)
}
############### the fitness function
fitness_f <- function(par){
indexes <- c(1:predictor_number)
for (i in 1:predictor_number){
if (par[i] >= threshold) {
indexes[i] <- i
} else {
indexes[i] <- 0
}
}
local_predictor_number <- 0
for (i in 1:predictor_number){
if (indexes[i] > 0) {
local_predictor_number <- local_predictor_number + 1
}
}
if (local_predictor_number > 1) {
sampleAf <- as.data.frame(sampleA[, c(indexes[], dim(sampleA)[2])])
pred_entrs <- c(1:local_predictor_number)
for (count in 1:local_predictor_number){
pred_entrs[count] <- entropy(sampleAf[count])
}
max_pred_ent <- sum(pred_entrs) - max(pred_entrs)
pred_multiinf <- multiinformation(sampleAf[, 1:dim(sampleAf)[2] - 1])
pred_multiinf <- pred_multiinf - shuffle_f_inp(sampleAf, iterations_inp, quantile_val_inp)
if (pred_multiinf < 0){
pred_multiinf <- 0
}
pred_mult_perc <- pred_multiinf / max_pred_ent
inf_corr_val <- shuffle_f(sampleAf, iterations, quantile_val)
receiver_entropy <- entropy(sampleAf[, dim(sampleAf)[2]])
received_inf <- mutinformation(sampleAf[, 1:local_predictor_number], sampleAf[, dim(sampleAf)[2]])
if (inf_corr_val - (received_inf / receiver_entropy) < 0){
fact_ff <- (inf_corr_val - (received_inf / receiver_entropy)) * (1 - pred_mult_perc)
} else {
fact_ff <- inf_corr_val - (received_inf / receiver_entropy)
}
} else if (local_predictor_number == 1) {
sampleAf<- as.data.frame(sampleA[, c(indexes[], dim(sampleA)[2])])
inf_corr_val <- shuffle_f(sampleAf, iterations, quantile_val)
receiver_entropy <- entropy(sampleAf[, dim(sampleAf)[2]])
received_inf <- mutinformation(sampleAf[, 1:local_predictor_number], sampleAf[, dim(sampleAf)[2]])
fact_ff <- inf_corr_val - (received_inf / receiver_entropy)
} else {
fact_ff <- 0
}
return(fact_ff)
}
########## estimating threshold for variable inclusion
iterations = 5
quantile_val = 1
iterations_inp = 1
quantile_val_inp = 1
levels_arr <- numeric()
for (i in 1:predictor_number){
levels_arr[i] <- length(unique(sampleA[, i]))
}
mean_levels <- mean(levels_arr)
optim_var_num <- log(x = sample_size / 100, base = round(mean_levels, 0))
if (optim_var_num / predictor_number < 1){
threshold <- 1 - optim_var_num / predictor_number
} else {
threshold <- 0.5
}
#run feature selection
start <- Sys.time()
sao <- GenSA(par = par_v, fn = fitness_f, lower = par_low, upper = par_upp
, control = list(
#maxit = 10
max.time = 1200
, smooth = F
, simple.function = F))
trace_ff <- data.frame(sao$trace)$function.value
plot(trace_ff, type = "l")
percent(- sao$value)
final_vector <- c((sao$par >= threshold), T)
names(sampleA)[final_vector]
final_sample <- as.data.frame(sampleA[, final_vector])
Sys.time() - start
在数据框架中,最右边的一列是目标列。
所有列都应该是类别(整数、字符或因子)。
而且你必须装载所有的围栏。
一段代码显示了如何将数词转换为分类变量。
disc_levels <- 3 # сколько равночастотных уровней переменной создается
for (i in 1:56){
naming <- paste(names(dat[i]), 'var', sep = "_")
dat[, eval(naming)] <- discretize(dat[, eval(names(dat[i]))], disc = "equalfreq", nbins = disc_levels)[,1]
}
我在互联网上发现了这个有趣的功能
也许在这种形式下,算法会更好地识别数据?但有一个问题,函数的输出是一个变量 "d",它有一个有两列 "x "和 "y "的矩阵,其中一列表示价格,另一列表示算法所弯曲的时间,问题是如何将这个矩阵变成一个向量,使它不失去其属性。
我经常在这里提出以下建议:如果你把你的套装分给我,我们将把我的结果与你的结果进行比较。
对我来说,最理想的是.RData。一个框架,其中的二进制目标和预测器最好是实数。
附着力是我最好的一组预测因素。TrainData是2015年eurusd的D1,fronttestData是从2016年1月1日到6月。前期测试有点长,在实际交易中,我不太可能在相同的设置下交易超过一个月,只是想看看这个模型的盈利能力到底能持续多久。FronttestData1、fronttestData2、fronttestData3是从fronttestData中单独切割出来的,只针对1月,只针对2月,只针对3月。我只对降低fronttestData1的误差感兴趣,其他的只是为了研究。预测器组主要包含指标和它们之间的不同计算方法。在fronttest上的nnet错误,我在fronttestData1上有30%,用迭代控制和拟合内部神经元的数量进行训练。我认为这里的30%只是一个机会问题,该模型从2015年3月到2016年2月在市场上抓住了一些趋势。但其他时期也没有合并,这已经很不错了。
这是一张来自mt5测试器2014.01-2016.06的图片,我用一个框架标记了训练期。它已经比以前好了:)。目前这是我的极限,我必须解决指标的许多问题,即它们的默认设置与时间框架严格挂钩,例如在H1上我的经验完全没有用,在H1上选择指标的相同算法认为一切都很垃圾。我应该在最初的指标集中加入一堆它们的不同参数的变化,或者自己从ohlc中生成随机指标。
有这个可以拿。
这就更有意义了,谢谢你。在我看来,每个指标只有3个类别是不行的。从逻辑上讲,我至少要做100个级别,但这样做会不会更好,或者说会不会失去算法的意义?
这就更有意义了,谢谢你。在我看来,每个指标只有3个类别是不行的。从逻辑上讲,我至少要做100个级别,但这是更好的,还是会使算法失去意义?
该算法将失去其意义。该算法计算输入变量的总水平,并按这些水平的反应水平分布。因此,如果每个输入水平的响应值的数量很低,就不可能评估概率倾斜的统计意义。
如果你做100个级别,是的,会有很多变数。那么该算法将对任何子集返回零显著性,鉴于样本量有限,这是合理的。
例子是一个很好的例子。
输入水平 | 观察数
1 150
2 120
...
9 90
在这里,我们可以估计出一个反应中的重要性
例子--不好。
输入水平
112 5
...
357 2
...
1045 1
在此无法估计反应内的重要性
附着力是我最好的一组预测因素。TrainData是2015年eurusd的D1,fronttestData是从2016年1月1日到6月。前期测试有点长,在实际交易中,我不太可能在相同的设置下交易超过一个月,我只是想看看这个模型的盈利能力到底能持续多久。FronttestData1、fronttestData2、fronttestData3是从fronttestData中单独切割出来的,只针对1月,只针对2月,只针对3月。我只对降低fronttestData1的误差感兴趣,其他的只是为了研究。预测器组主要包含指标和它们之间的不同计算方法。在fronttest上的nnet错误,我在fronttestData1上有30%,用迭代控制和拟合内部神经元的数量进行训练。我认为这里的30%只是一个机会问题,该模型从2015年3月到2016年2月在市场上抓住了一些趋势。但事实上,其余的时期不合并已经很好了。
这是一张来自mt5测试器2014.01-2016.06的图片,我用一个框架标记了训练期。它已经比以前好了:)。目前这是我的极限,我必须解决指标的许多问题,即它们的默认设置与时间框架严格挂钩,例如在H1上我的经验完全没有用,在H1上选择指标的相同算法认为一切都很垃圾。我需要在原来的指标集上添加一堆不同参数的变化,或者以某种方式从ohlc生成随机指标。
还不错,但样本外的时期本身很小。
也不清楚有多少交易属于样本之外。有几十个,几百个,顺序是什么?
附着力是我最好的一组预测因素。TrainData是2015年eurusd的D1,fronttestData是从2016年1月1日到6月。前期测试有点长,在实际交易中,我不太可能在相同的设置下交易超过一个月,我只是想看看这个模型的盈利能力到底能持续多久。FronttestData1、fronttestData2、fronttestData3是从fronttestData中单独切割出来的,只针对1月,只针对2月,只针对3月。我只对降低fronttestData1的误差感兴趣,其他的只是为了研究。预测器组主要包含指标和它们之间的不同计算方法。在fronttest上的nnet错误,我在fronttestData1上有30%,用迭代控制和拟合内部神经元的数量进行训练。我认为这里的30%只是一个机会问题,该模型从2015年3月到2016年2月在市场上抓住了一些趋势。但事实上,其余的时期不合并已经很好了。
这是一张来自mt5测试器2014.01-2016.06的图片,我用一个框架标记了训练期。它已经比以前好了:)。目前这是我的极限,我必须解决指标的许多问题,即它们的默认设置与时间框架严格挂钩,例如在H1上我的经验完全没有用,在H1上选择指标的相同算法认为一切都很垃圾。我需要在原来的指标集上添加一堆不同参数的变化,或者以某种方式从ohlc生成随机指标。
我已经看了。
我的理解是否正确,在总的数据集中有107条线(107个观测值)?
看了看。
我是否正确理解了总的数据集有107行(107个观测值)?
不,训练集有250多行(2015年的交易日数)。我在trainData表上训练了这个模型。我在fronttestData1上测试了它。其他都是用于额外的检查,你可以忽略它们。
trainData--2015年全年。
fronttestData1 - 2016年1月
fronttestData2 - 2016年2月
fronttestData3 - 2016年3月
fronttestData - 2016年1月 - 2016年6月
不,训练集有250多行(2015年的交易日数)。我在trainData表上训练了模型。我在fronttestData1上测试了它。其他都是为了额外的检查,你可以忽略它们。
trainData--2015年全年。
fronttestData1 - 2016年1月
fronttestData2 - 2016年2月
fronttestData3 - 2016年3月
fronttestData - 2016年1月 - 2016年6月
对我来说,这很少--我使用统计数据。即使对于目前的窗口,107行对我来说也是非常小的。我为当前的窗口使用了400多个。
一般来说,在你的集合中,观察值的数量与预测因子的数量相当。这些是非常具体的套装。不知何故,我看到这种套装需要特殊的方法。没有参考资料,因为我没有这样的问题。
不幸的是,我的方法并不适合你的数据。