記事"「新規バー」イベントハンドラ"についてのディスカッション - ページ 3

 
laplacianlab:

良い記事をありがとう!とても役に立ちました!

とにかく、あなたのisNewBar関数を使用したところ、コンパイル時に以下のメッセージが表示されました:「型変換によりデータが失われる可能性が あります。

そこで、この方法でvarの型をdatetimeからlongに変更しました:

これで、何の通知もなくコンパイルでき、問題なく動作しているようです。ありがとうございます!


おそらく、このように変更した方がわかりやすいと思います:

   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
 

新しい列の行を要求する最初の方法では、新しい列の数を直接1に割り当てることができるのか理解できません;

 //--- 新しい列の行をチェックする。
   if(m_lastbar_time<newbar_time)       
     { 
      m_new_bars=1;               // 新しい列の行数
      m_lastbar_time=newbar_time; // 最後の小節の時間を記憶する
      return(true);
     }
   //--- //--- 新しい列の行をチェックする。
   if(m_lastbar_time<newbar_time)       
     { 
      m_new_bars=1;               // 新しい列の行数
      m_lastbar_time=newbar_time; // 最後の小節の時間を記憶する
      return(true);
     }
   //---
 

オブジェクト・モデリングのルールに従えば、これをCINewBarと呼ぶのは間違いだ。

もしcarがクラスであれば、私はcarオブジェクトを作成/所有することができる。しかし、私のクラスが "ÉUmCarroNovo "であれば、"ÉUmCarroNovo "を持つことも所有することもできる。

作者はこれをCNewBarCheckerと呼ぶべきだった。誰かがニュー・カー・チェッカーを 発明し、それを作ることができる(私たちのクラスはNewCarCheckerになるだろう)。

削除済み  
タイムではなくバーを 使う
 
記事にはたくさんのコードバリエーションがありますが、結局のところ、テスターが描いたものとトレードとの対応関係を少しでも高めるには、MT4でどの関数を使うのがより正しいのか、まだはっきりしません。ヒントをください!
 
Pavel Komarovsky:
記事にはたくさんのコードバリエーションがありますが、結局のところ、テスターが描いたものとトレードとの対応関係を少しでも高めるためには、MT4でどの関数を使うのがより正しいのか、まだはっきりしません。ヒントをください!
datetime counted_bar = 0;

int OnInit()
{
   counted_bar = 0; // 再起動時に最後のバーを分析したい場合
   ...

void OnTick()
{
   // 新しいバーがある場合
   if ( iTime( _Symbol, _Period, 0 ) > counted_bar )
   {
      counted_bar = iTime( _Symbol, _Period, 0 );

      // 指標の分析
      ...
   }
 
Andrey Khatimlianskii:

アンドレイ、ありがとう。iTimeが 使われるようになった理由を教えてください。以前は、すべての関数と例で、そのほとんどがiBarsに基づいて いたと記憶しています。

iTimeは より正確に機能するのですか?

 
Pavel Komarovsky:

アンドレイ、ありがとう。iTimeが 使われるようになった理由を教えてください。以前は、すべての関数と例で、そのほとんどがiBarsに基づいて いたと記憶しています。

iTimeは より正確に機能するのですか?

私はiBarsを 使ったことがないのでわかりません。
 
なぜこのサンプルは時系列データを取得できないのだろう?コピー...常に-1、Bars()は 常に0。つまり、クラスからデータにアクセスできない。
 

この記事は、コメントや共同作業、バグ修正も含め、MQL5プログラミングの 授業で使われるほどだ。皆さん、おめでとうございます。