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

 
Aleksey Nikolayev:

寻找Di--一天中第i分钟的增量的平均平方。然后用所有的增量除以其相应的di=sqrt(Di)。将增量的平方相加,寻找新系列中与SB的偏差。价格是倾斜的,但时间并没有改变。

每分钟2个月的意义何在?每分钟的变化都会很小,而计算结果会很大。要么倒退一分钟,要么倒退一个月,倒退一个月。第一条的代码。

for(int i = 1,i<= 43200*2, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
}
di=sqrt(Di);

新行

for(int i = 1,i<= 43200*2, i++);
{
NewClose[i]=iClose(NULL,1,i)/di;
NewOpen[i]=iOpen(NULL,1,i)/di ;
}

这是否正确?

 
Valeriy Yastremskiy:

可以了吗?


我想不会。

我是这样理解这个算法的:假设时间是10:00,你计算这个时间的条形图m1的Di,然后计算10:00-分钟(close[i]-open[i])/di,这样计算每分钟。

 
Evgeniy Chumakov:


我不这么认为。

我是这样理解这个算法的:假设现在是10:00,你计算这个时间的条形图m1的Di,然后计算10:00分钟(close[i]-open[i])/di,每分钟都是如此。

第一条的代码。你必须把它移到更深处,这是在上面的另一个循环。
 
Evgeniy Chumakov:


我不这么认为。

我是这样理解这个算法的:假设现在是10:00,你计算这个时间的条形图m1的Di,然后计算10:00分钟(close[i]-open[i])/di,每分钟都是如此。

这是正确的。我们创建两个档案--实数和整数,大小为1440=24*60。在第一种情况下,将增量的平方相加,在第二种情况下,将给定分钟的小节数相加,然后用第一种除以第二种(对于小节数大于1的数字)。然后我们提取平方根,只有这样才能重新规范增量,并将累积的总和组合起来--一个新的系列,然后我们调查它是否与SB不同。

 
Aleksey Nikolayev:

是的,这是正确的。我们有两个档案--实数和整数,大小为1440=24*60。在第一种情况下,将增量的平方相加,在第二种情况下,将 给定分钟的小节数 相加,然后将第一种情况除以第二种情况(对于小节数大于1的数字)。然后,我们提取平方根,只有在这之后,我们才对增量进行重新规范,并将它们累积成一个新的系列,我们用与SB的差异来分析。

换句话说,24小时内的细枝末节的平方平均值,因此,2个月的细枝末节。分钟条数?我们要用平方的总和除以1440吗?

 
Valeriy Yastremskiy:

你会用平方之和除以1440吗?


你用方格之和除以某一分钟的条数,然后提取根。

 
Aleksey Nikolayev:

是的,这是正确的。我们有两个档案,一个是实数,一个是大小为1440=24*60的整数。


也就是说,我们需要建立每日累计总和=1440分钟?

 
Evgeniy Chumakov:


你用方格之和除以某一分钟的条数,然后提取根。

那我就不明白了。对于第3条的深度,总和将是3,这个值将被计算到第3条或第1条。 我理解,平均数必须被计算到相同的条数,而不是累积。最好是马上就给配方。我们对词语的理解都是不同的)。

for(int i = 1,i<= 1440, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
di=sqrt(Di);
DVal[i]=(iClose(NULL,1,i) - iOpen(NULL,1,i)/di; 
}

在我看来,这并不正确。

 
Valeriy Yastremskiy:


在我看来,这是不对的。


错误的代码

 

假设历史上没有空隙,而且所有的日子都有1440分钟(星期五较少),那么代码应该是这样的

double di = 0;

int n = 40; // глубина 40 суток (два месяца)

int pos = 0; // текущий бар

int step = 0; // шаг


for(int i = 0; i < n; i++){

di += MathPow( close[pos + step] - open[pos + step],2);

step += 1440;
}

di = MathSqrt(di/n);

double x = (close[pos] - open[pos])/di;