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

 
elibrarius:
あなた方はロボットですか?
昼も夜も不眠不休で働く ))))

タイムゾーン...が、やはり印象的でした))))

 
elibrarius:

7桁で十分です。

新モデルが青、旧モデルが赤のバランスでヒストグラム化したものです。

すべての設定は同じです。

予測因子関連性



モデルは時間を最大限に活用する。良いとも悪いとも言い難いのですが、ある予測が相手との類似性を犠牲にして優位に立つのは、ちょっと嫌な感じですね。

リコール

高精度

もちろん大きな違いではありませんが、それでも結局は違いがあるのです。

バランスは悪くありません。


 
Aleksey Vyazmikin:

新モデルが青、旧モデルが赤のバランスでヒストグラム化したものです。

すべての設定は同じです。

予測因子関連性



モデルは時間を最大限に活用する良いとも悪いとも言い難いのですが、ある予測が相手との類似性を犠牲にして優位に立つのは、ちょっと嫌な感じですね。

リコール

高精度

もちろん大きな違いではありませんが、それでも結局は違いがあるのです。

悪くはないんですけどね。


では、サイン+コサインタイムは、数字だけよりも優れているのでしょうか?
旧バージョンでは、議事録のフィードを行うのですか?そうでない場合は、きちんと比較するために送り込んでください。サイン+コサインバージョンは、それらを考慮したものです。あるいは、その方が早ければ、syn+cosから分を削除します。
 
elibrarius:
では、サイン+コサインタイムは数字だけより良いのでしょうか?
旧バージョンでは、議事録のフィードを行うのですか?そうでない場合は、きちんと比較するために、それらを送り込んでください。サイン+コサインバージョンでは、それらが考慮されています。もしくはsyn+cosの方が早いなら分を取る。

私が提供した指標は、より悪く見えます。理性は、時間に関連する分割予測木を構築するために、予測子のランダムなセットをヒットさせる可能性が高くなります。

そう、昔のバージョンでは議事録を使わなかったんです。

 
Aleksey Vyazmikin:

私が提供した指標では......もっと悪く見えますね。その理由は、時間に関連する予測変数の分割木を構築するために、ランダムな予測変数の集合に当たる確率が高い からである。


ネコババしたんですか?そこには予測因子のランダムな選択はないはずです。ブーストはすべての予測子を使用しますが、浅い木は使用しません。

ランダムフォレストでは、そうですね。などで 設定されています。

max_features{"auto", "sqrt", "log2"}, int または float, default="auto".

最適なスプリットを探すために考慮すべき機能の数々。


Aleksey Vyazmikin:

そう、昔のバージョンでは議事録を使わなかったんです。

もしかしたら、結果を悪化させたのでは?新しいバージョンでは、それらを削除してみてください。

以上で、古いバージョンの完全なアナロジーとなるはずです。

if(nameInd[nInd]=="Hour")        {CopyTime        (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.hour)*360.0/24.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}

if(nameInd[nInd]=="WeekDay")     {CopyTime        (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.day_of_week)*360.0/7.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}


 
elibrarius:

キャットブーストをしたのですか?そこには予測因子のランダムな選択はないはずです。ブーストはすべての予測子を使用しますが、浅い木は使用しません。

ランダムフォレストでは、そうですね。などで 設定します。


もしかして、結果を悪くしてしまった?新しいバージョンでは、それらを削除してみてください。

そこでは、以前のバージョンと完全に類似しているはずです。

if(nameInd[nInd]=="Hour")        {CopyTime        (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.hour)*360.0/24.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}

if(nameInd[nInd]=="WeekDay")     {CopyTime        (sim,per,startDt,n_bar+1,dtm);TimeToStruct(dtm[0],dts);ArrayResize(tmp,1);tmp[0]=(double)(dts.day_of_week)*360.0/7.0;tmp[0]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));}


ランダム性については、十分なものがあります。

サインとコサインを別々に使っていたことに驚きましたか?今は、サインとコサインは1つでなければならないと理解していますが。

そこで、bufとは何か、なぜ0になるとコサインを 取るのか、という疑問が生じます。

 
Aleksey Vyazmikin:

ランダム性については、たくさんあります。

サインとコサインで別々の回があり、今理解すると1つのはずなのに、サインとコサインが使われていることに驚かなかったのですか?

そこで、bufとは何か、なぜ0になるとコサインを 取るのか、という疑問が生じます。

buf はバッファの番号である。
バッファが1つのインジケータと2つ以上のインジケータがあります。

トレーニングセットのカラムを構成する際に、バッファの数だけループしています。

サインとコサインは片方だけでなく、両方を供給する必要があります。説明については、https://megaobuchalka.ru/9/5905.html を参照してください。

数値 データはコーディングする必要がないと思われます。しかし、場合によっては、数値データも符号化することが合理的であることもある[22]。数値データを符号化する場合、データの意味、値の範囲内での位置、データの測定精度などを考慮する必要がある。これは例によって説明されています。例えば、コーディングによって、データの意味づけ を考慮することができます。ネットワークへの入力が風向きのような2つの方向間の角度である場合、角度(度またはラジアン)をネットワークに入力することは決して適切ではありません。このような入力は、0度と360度が同じものであることをネットワークに「学習」させることになる。その角度のサインとコサインを 入力として与える方が理にかなっている。入力ネットワーク信号の数は増えますが、近い入力値は近い入力信号で符号化されます。

Виды трансформации данных — Мегаобучалка
Виды трансформации данных — Мегаобучалка
  • megaobuchalka
  • megaobuchalka.ru
Трансформация данных — это преобразование данных к определенному представлению, формату или виду, оптимальному с точки зрения конкретного метода анализа [6]. Для разных задач анализа могут потребоваться разные методы трансформации. Типичными средствами трансформации данных являются следующие. Преобразование временны́х данных . Оптимизация...
 
elibrarius:

buf バッファ番号。
バッファが1つのインジケータと2つ以上のインジケータがあります。

トレーニングセットのカラムを構成する際に、バッファの数だけループさせています。

サインとコサインは片方だけでなく、両方を供給する必要があります。その理由の説明 - こちら https://megaobuchalka.ru/9/5905.html

だから、元々ちゃんとやっていたんですけどね......ただ、もう何をやっていたのか覚えていないんです......。

   double tmp[4];
   int nInd=0;
   MqlDateTime dts;
   double pi=3.1415926535897932384626433832795;
   for(int buf=0; buf<2; buf++)
   {
      TimeToStruct(iTime(Symbol(),PERIOD_CURRENT,0),dts);
      tmp[buf]=(double)(dts.hour*60+dts.min)*360.0/1440.0;
      //tmp[buf]=(double)(dts.hour*60+dts.min)*360.0/24.0;
      tmp[buf]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));

      TimeToStruct(iTime(Symbol(),PERIOD_CURRENT,0),dts);
      tmp[buf+2]=(double)(dts.day_of_week*1440+dts.hour*60+dts.min)*360.0/10080.0;
      //tmp[buf+2]=(double)dts.day_of_week*360.0/7.0;
      tmp[buf+2]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));
   }
 
4つの入力ではなく、1つの入力で済ませることはできないのでしょうか?
月曜日0:00からの分数だけ=。
dts.day_of_week*1440+dts.hour*60+dts.min
でも、悪い考えですね。各時間の最初の10分などにするためには、多くのスプリットを行う必要があります。
おそらくあなたのように、ほんの数日、数時間でいいんです。そして、たぶん数分。
 
elibrarius:
4つのエントリーが全くないのではなく、1つのエントリーで済ませることはできないのでしょうか?
月曜0:00からの分数だけ=はまずいけど。各時間の最初の10分間などを確保するためには、多くのスプリットを行わなければならないでしょう。
おそらくあなたのように、ほんの数日、数時間でいいんです。そして、たぶん数分。

すでに分刻みでトレーニングを開始している - 見てみよう。

今でも1/4バータイム、つまり時間、4時間、日数を使っています。