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

 
Aleksey Vyazmikin:

分足バーの開始時に、直前のエントリーのOIを取得することに同意しますか?例 えば、10時のオープンを23時49分55秒とする。

M1でインジケータを使用し、ゼロバーから必要なすべての情報を取得し、インジケータバッファからの情報要求と必要なオフセットを考慮してExpert Advisorで異なる比較を行う方が良いと思います。

最初の値は日付、2番目はOM、3番目はOIですが、このファイルの3番目の値は何でしょうか?デルタかと思ったが、うまくいかない。

上に書いたようにインジケータを改造して みたところ、OMを読み取って表示するようになり、動作速度もかなり速くなりましたので、一度試してみてください。

はい、そしてファイルからの読み込みは、データ中断とファイル内のデータが存在する場合に動作するはずですが、マーケットが閉じているので確認していません。

そんなことはどうでもいいんです。書き込んだデータが常に正しくインジケーターに読み込まれることが重要です。問題は、学習ファイルが保存される前に、このようなエラーが許されることである。このルールを指定したら、そうなるように、実際のインジケータがこのルールを正しく実行することが最も重要です。

Alexeyさん、インジケーターをありがとうございます。しかし、リアルタイムのExpert Advisorについて質問があります。使用しない場合は、1分ごとに保存され、1分以内のOM変更ごとに保存されるわけではありません。

私の仕事では、ゼロバーを使うことはありません。しかも、最初のバーのシグナルから30秒後にすべての計算を行う。その結果、信号間の演算は行われない。しかし、30秒後の最初のバーでのシグナルは、モデルに参加しているすべての指標に適用され、理論的にはこれらの指標は、彼らがチャート内にないという条件で、最後の参照(信号)から現在のものまでの全体の履歴を計算する必要があります。これは、インジケータが正確に現在値を取得するために、ファイルから読み取るべき穴です。

ポイントは、歴史のギャップや穴に敏感な引用依存のデータ(自分でそう名付けました:-)を使っていることです。

私が使っている指標のコードを持ってくるのを手伝ってください。トレーニングキットを準備するときに、いくつかの重要なアイデアでお礼をします。+ 37ポンド(約4,000円)なら、問題なく渡せるよ。ただし、EAの実運用においてデータの信頼性が完全に確保されることが条件となる。

主な問題は、チャート上のAIでEAをフィードし、新鮮なシグナルを得るとき、私はそれを再コンパイルする必要があり、それは指標から十分なデータを要求することである。しかし、問題は指標にある。チャートに送ると、履歴が正しく表示され、データを提示し続けることができるのです。しばらくして再コンパイルすると、リアルアカウントに描かれていたTailの値が変わってしまう。

また、バーに対して正しく計算される累積デルタのインジケーターもあります。しかし、この指標の履歴が長く、М5で3ヶ月となると、コピチからデータを取るため、1サイクルの計算をする時間がなく、それ自体が何サイクルになるかを理解していることになるのです。

最近のアップデートは、トレーニングファイルを作成する際に、3~6ヶ月の履歴で14個の計測器を要求されるため、メモリを食うようになりました。その結果、8ギガのRAMでは足りなくなったのです。そしてこのツールは、私が必要としないゼロバーをリアルタイムで書き込むのです。ゼロバーが表示された時に最初の1枚だけ読み込めば十分です。

もし、あなたが何らかの手助けをしたいのであれば、遠慮なく私に連絡し、交渉してください。ありがとうございます!!!!

ファイル:
CumDelta.mq5  55 kb
 
Mihail Marchukajtes:

そんなことはどうでもいいんです。重要なのは、記録されたデータが常に正しくインジケーターに読み込まれることです。問題は、トレーニングファイルを保存する前に、このようなエラーが発生しても構わないということです。このルールを指定したら、そうなるように、実際のインジケータがこのルールを正しく実行することが最も重要です。

Alexeyさん、インジケーターをありがとうございます。しかし、リアルタイムのExpert Advisorについて質問があります。という場合は、1分間に1回マークして、1分間にOMが変わるたびにマークしないことでしょうか。

私の仕事では、ゼロバーを使うことはありません。しかも、最初のバーのシグナルから30秒後にすべての計算を行う。その結果、信号間の演算は行われない。しかし、30秒後の最初のバーでのシグナルは、モデルに参加しているすべての指標に適用され、理論的には、これらの指標は、彼らがチャート内にないという条件で、最後の参照(信号)から現在のものまで全体の履歴を計算する必要があります。これは、現在値を適切に取得するために、インジケータがファイルから読み取るべき穴です。

要は、特に高速市場においては、トレーニングやアプリケーションを完璧に再現することはできないのです。現在では、新しいデータに対して最大10秒の遅れがあり(履歴について言えば)、バーのオープニングだけを分析すれば、遅れは60秒以上となることが判明しています。バーのオープニングで得られたデータで作業すると(シフトしていない)、インジケータに誤差が生じる、つまり、未来を垣間見ることができるかもしれない。一般論として、今一度、思想について考える必要がある。今はデータも新しくなったが、すべて理論である。新しいバーが 現れたときに記録したデータをもとに、トレーニングをすれば十分かもしれません。

まあ、1分以内に不要な行を削除するスクリプトを作れば、ファイルサイズは10倍くらいになるかもしれませんね。

Mihail Marchukajtes:

主な問題は、AI付きのEAをチャートに送り、新鮮なシグナルを得たときに、それを再コンパイルする必要があり、その後、指標から適切なデータを要求することである。しかし、問題は指標にある。チャートに送ると、履歴が正しく表示され、データを提示し続けることができるのです。しばらくして再コンパイルすると、リアルアカウントに描かれていたTailの値が変わってしまう。

私があげたインジケーターのバージョンを試してみてください。それでも問題が解決しない場合は、インジケータではなくEAに原因があると思われます。インジケータからデータを取得するコードを示してください。

 
Mihail Marchukajtes:
ブローカーからグローバルにブレークしている場合は、どうすることもできません。データ保存のアドバイザーはUPUのサーバーに あり、データは損失なく書き込めました。

現在は、インジケーターやトレーディングアドバイザーの作業と並行してデータを保存するため、接続が切れたり、端末が閉じたりしても、新しい履歴データをファイルから取得し、緊急に作業を続けることができ、その後VPSでファイルを入れ替え、アドバイザーを再起動することが期待されます。

 
Mihail Marchukajtes:

\╱︎インジケーターをありがとうございました!╱︎Expert Advisorについて質問です。分単位で書き込むが、1分以内にOMが変わるたびに書き込まないようにすることは可能か?

あまり深く考えずに、このバリアントをチェックしてみてください。

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick))
      StartDate=last_tick.time;
   else StartDate=TimeCurrent();
   if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {
      for (int i=0; i<100 && !IsStopped(); i++)
      {
         h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
         if(h!=INVALID_HANDLE)
         {

            FileSeek(h,0,SEEK_END);
            FileWrite(h,StartDate,DoubleToString(interest,0));
            FileClose(h);
            Sleep(100);
            break;
         }
      }
      //inter=interest;
      // byOR=byORD;
      // sellOR=sellORD;
   }
 
Aleksey Vyazmikin:

面倒でなければ、チェックしてみてください。

アレクセイ、ありがとうございました。必ず確認して、結果をお知らせします。未来を見ることに関しては、EAがインジケータと同じように書き込むのであれば問題ないし、そうなることもない。両者の間に差がなければ、問題ないでしょう。また、新しいバーが 現れたら、最初のOIの変化を待って、最初の前のバーの新しい値を記録します。 新しい値でなく、最初のバーの最後の古い値を記録することもできます。つまり、実際には、前の小節の終わりから書き始めることになる。

重要なのは、分足に割り当てるOIではなく、ファイルからどのようにインジケータを読み取るかです。

 
Mihail Marchukajtes:

アレクセイ、ありがとうございました。必ずすべてをチェックし、結果をお知らせします。未来を見ることについては、全く重要ではありませんし、EAがインジケータの読み通りに書き込むのであれば、それは起こりません。両者の間に差がなければ、問題ないでしょう。また、新しいバーが 現れたら、最初のOIの変化を待って、最初の前のバーの新しい値を記録します。 新しい値でなく、最初のバーの最後の古い値を記録することもできます。つまり、実際には、前の小節の終わりから書き始めることになる。

重要なのは、分足に割り当てるOIではなく、ファイルからどのようにインジケータを読み込むかです。

コード全文をご覧の上、お問い合わせください。

interest=SymbolInfoDouble(Name_instrFS,SYMBOL_SESSION_INTEREST); 


  if ((interest!=inter))
  {

   MqlTick last_tick;
   /*if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();*/
    StartDate=iTime(Name_instrFS,PERIOD_M1,1);
  if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {  
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(inter,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }
}


新しいバーが開き、5ティック以内にOIの変化がない場合、新しいバーの条件に入るのでしょうか?

これは、新しいbar関数の最初の呼び出しであり、その後にのみ結果がfalshに変更されるため、そうすべきだと思うのですが?そうだろ?

 
コードの作業を頭の中でシミュレーションしてみたところ、ボトルネックが見つかりました。昨日のセッションの最後のバーが、今日のセッションの分足の開始時の最初の変化で書き込まれます、EAの再初期化の場合、OI値が失われ、昨日のセッションの最後のバーで不快なゼロエントリーにつながります。解決策は、やはり最初のバーに以前のOM値を書き込むのではなく、正確に現在のOM、つまり新しいバーで 最初に表示されるOMを書き込むことだと思うのです。OK、完璧にシンクロさせたかったのですが、このままでいいと思います...。それで...ちょっと考えてみたんだけど...
 
Aleksey Vyazmikin:

それが、トレーニングやアプリケーションを完璧に再現することは、特に高速な市場では不可能なのです。これで、新しいデータに対して最大10秒の遅延が発生し(ヒストリーの場合)、バーのオープニングだけを使用すると60秒以上の遅延が発生することが判明しました。バーのオープニングで得られたデータで作業すると(シフトしていない)、インジケータに誤差が生じる、つまり、未来を垣間見ることができるかもしれない。一般的には、イデオロギーについてもう一度考える必要があります。今はデータが新しくなっていますが、すべて理論です。新しいバーが 現れたときに記録したデータをもとに、トレーニングをすれば十分かもしれません。

それなら、1分以内に不要な行を削除するスクリプトを作れば、ファイルサイズは10倍くらいになりますね。

私があげたインジケーターのバージョンを試してみてください。それでも問題が解決しない場合は、インジケータではなくEAに問題があると思われます。インジケータからデータを取得するコードを示してください。

ヒストリーでインジケーターを確認したところ、エラーが発生しました。最初の1分足のローソク足には、気配値ウィンドウに時刻10:00が表示されていますが、このローソク足の値は、前のローソク足から取得されていることです。つまり、10:00:00にロウソクが開き、10:00:59に閉じた。 この値を書かなければなりませんね。 そして、構築中のインディケータは23:59:59からバーの値をとります。
 
Mihail Marchukajtes:
ヒストリーでインジケーターを確認しましたが、エラーは明らかです。最初の1分足のローソク足には、気配値ウィンドウに10:00という時間が表示されていますが、このローソク足の値は、前のローソク足から取得されているということです。これは、ローソク足が10時00分00秒に開き、10時00分59秒に閉じたことを意味します。 そして、インジケータはバーをプロットする際に23時59分59秒の値を取り込みます。
やりましたよ。これで、ファイルが分単位で書き込まれても、ティック単位で書き込まれても関係なく、ローソク足の正しい値が書き込まれるようになりました。つまり、ローソク足にオープンタイムが あれば、そこにこのローソク足のクローズ時の値を書き込む...。
 
Mihail Marchukajtes:
ヒストリーでインジケーターを確認しましたが、エラーは明らかです。最初の1分足のローソク足には、気配値ウィンドウに10:00という時間が表示されていますが、このローソク足の値は、前のローソク足から取得されているということです。つまり、10:00:00にロウソクが開き、10:00:59に閉じたということです。 これは必ず書かなければならない値ですね。 そして、インジケータはバーを構築する際に23:59:59の値を取り込みます。

EAがバーのオープニングで動作している場合、たとえ遅延があっても、ローソク足のクローズ時のデータをEAに与える、つまり未来を見るというのは正しいのでしょうか?そのため、先回りするのではなく、このローソク足より前の最も新しいデータ、つまり少し遅れたデータが使われるのです。


Mihail Marchukajtes:

コード全文をご確認の上、お問い合わせください。


新しいバーが開き、5ティック以内にOIの変化がない場合、新しいバーの条件に入るのでしょうか?

これは、新しいバーの関数の最初の呼び出しであり、その後にのみ結果がファルシュに変更されるため、そうすべきだと思います。そうだろ?

ここで、5ティックのカウントはどこにあるのでしょうか?そのため、OIの変化に関する比較を削除し、新しいローソク 足が始まるとすぐにデータが書き込まれるようにしました。忘れているかもしれないので、データでテストしないといけないのですが、昨日は何もなかったし、平日なので :(

理由: