トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 2064

 
アレクセイ・ニコラエフ

Di - その日のi番目の分の増分の平均二乗を探します。次に、すべての増分を対応するdi=sqrt(Di)で割る。二乗した増分を加算し、新しいシリーズでSBからの乖離を探す。値段は偏っているが、時間は変わらない。

1分間に2ヶ月というのはどういうことなのでしょうか?1分ごとの変化は小さく、計算は大きくなる。1分戻しか、1ヶ月戻しと1ヶ月戻しのどちらかです。1小節目のコード。

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時とすると、この時刻のバーm1についてDiを計算し、10時00分について(close[i] - open[i])/di と1分ごとに計算するというアルゴリズムだと理解しました。

 
Evgeniy Chumakov:


そんなことはないだろう。

10時だとすると、この時間のバーm1についてDiを計算し、10時の分について(close[i] - open[i])/di と1分ごとに計算するというアルゴリズムだと理解しました。

1小節目のコード。もっと奥に移動させないと、上に別のループが出来てしまうんです。
 
Evgeniy Chumakov:


そんなことはないだろう。

10時だとすると、この時間のバーm1についてDiを計算し、10時の分について(close[i] - open[i] )/di と1分ごとに計算する、このようなアルゴリズムだと理解しました。

これは正しい。サイズ1440=24*60の実数と整数の2つのアーカイブを作成します。1つ目は、増分の2乗を合計し、2つ目は、指定された分の小節数を計算し、1つ目を2つ目で割る(小節数が1より大きい場合)。そして、平方根を抽出し、増分を再正規化して累積和を組み立てただけの新しい系列を作り、それがSBと異なるかどうかを調査するのです。

 
アレクセイ・ニコラエフ

はい、これは正しいです。実数と整数の2つのアーカイブがあり、サイズは1440=24*60です。1つ目では増分の2乗を、2つ目では 与えられた分の小節数を 合計し、1つ目を2つ目で割る(小節数が1より大きい数値の場合)。その後、平方根を抽出し、増分を再正規化して新しい系列に累積し、SBとの差の観点から分析するのです。

つまり、24時間分のミニュチュアの二乗平均、そうして2ヶ月分のミニュチュアの二乗平均を算出する。ミニッツバーナンバー?二乗の和を1440で割るのか?

 
Valeriy Yastremskiy:

二乗の合計を1440で割るのか?


平方和を特定の分のバーの数で割って、根を抽出するのです。

 
アレクセイ・ニコラエフ

はい、これは正しいです。サイズ1440=24*60の実数と整数の2つのアーカイブを用意しました。


つまり、1日の累計=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;
理由: