新しいバーを表示する - ページ 2

 
Doerk Hilger:

一番簡単な方法です。

static datetime tlastbar=0;

datetime tnewbar=iTime(NULL,PERIOD_CURRENT,0);

bool isnewbar=tnewbar!=tlastbar;

tlastbar=tnewbar;

私の知る限り、このトピックはmql5用です。あなたのコードはmql4のみです。
 
Willbur:

これが私の最終バージョン です。

あまりに簡単なので、ちょっと心配になりました。

アラン祝福を発行していただけるとうれしいです。

// -----------------------------------------------------------------------
bool NewBar(void)
{
bool iNewBar = false;
static double currPeriodProgress = 0;

   if(MathMod(TimeCurrent(),PeriodSeconds()) < currPeriodProgress) iNewBar = true;

   currPeriodProgress = MathMod(TimeCurrent(),PeriodSeconds());

   return(iNewBar);
}
// ------------------------------------------------------------------------
void OnTick()
{
    if(NewBar())     PlaySound("tick.wav");


ケルンからご挨拶
Willbur

問題は、OnTick()からしか使えないことです。他のイベントハンドラからだと、TimeCurrent()が欲しいシンボルに関連しているかどうかがわからないんだ。

そして、同じ計算を2回しないことをお勧めします。

bool NewBar(void)
  {
   bool iNewBar=false;
   static double currPeriodProgress=0;

   double lastPeriodProgress=MathMod(TimeCurrent(),PeriodSeconds());

   if(lastPeriodProgress<currPeriodProgress) iNewBar=true;

   currPeriodProgress=lastPeriodProgress;

   return(iNewBar);
  }
 
Alain Verleyen:
私の知る限り、このトピックはmql5用です。あなたのコードはmql4のみです。
どういう意味ですか?このコードは、NewBar()関数の 中など、好きな場所に挿入することができます。そして、最もシンプルで迅速、かつ信頼性の高い解決策だと思います。私はこれを、すべてのタイムフレームを別々に扱うCsymbolInfoクラスの派生物に含め、完璧に動作するようにしました。
 

MQL4では、これらを使用しました。

//global
long Bars_in_Chart;

   // detected new bar
   if(Bars_in_Chart<Bars)
   {
      Bars_in_Chart=Bars;
   }
 
Doerk Hilger:
どういう意味ですか?これは単なる断片で、例えばNewBar()関数内など、好きなところに入れることができます。そして、最もシンプルで迅速、かつ信頼性の高い解決策だと思う。私は、すべてのタイムフレームについて、CsymbolInfoクラスの派生物にこれを含め、完璧に動作するようにしました。
mql5にはiTime() 数はありません。
 
Alain Verleyen:
mql5にはiTime()関数がありません。
MT5ですか、そうですか。しかし、MQL5はMT5だけではありません。少なくとも私は、MT4がMQL5コンパイラを使用しているため、常にそのように理解していました。しかし、実際には、私は主にMT4を使っているので、それは知りませんでした。とにかく、制限についての情報をありがとうございました。
 
Doerk Hilger:
MT5ですか、そうですか。しかし、MQL5はMT5だけではありません。少なくとも私は、MT4はMQL5コンパイラを使用していると理解していました。しかし、実際には、私は主にMT4を使っているので、それは知りませんでした。とにかく、制限についての情報をありがとうございました。
いや、mql4はMT4用、mql5はMT5用です。この2つの言語には共通する関数が ありますが、それは2つの異なる言語です。
 

MQL4のiTime()は、MQL4の他の関数と同様、トレーダーにとって簡単でわかりやすいものです。

MQL5は違います。コーディングするにはコンピュータサイエンスの学位が必要で、それがほとんどの人を落胆させています。

先週、MT4のEAをMT5に変換しようとしたときに遭遇した例と、私が見つけた解決策を紹介します。


 
Alain Verleyen:
いいえ、mql4はMT4用、mql5はMT5用です。この2つの言語には、共通する機能のサブセットがありますが、それは2つの異なる言語です。

言語は同じですが、共通ではない機能の サブセットをもっています;)とにかく、この定義はおそらく正しいでしょう。MQは、この時点で混乱を招くようなことをたくさんしました。

 
Doerk Hilger:
MT5ですか、そうですか。しかし、MQL5はMT5だけではありません。少なくとも私は、MT4はMQL5コンパイラを使用していると理解していました。しかし、実際には、私は主にMT4を使っているので、それは知りませんでした。とにかく、制限についての情報をありがとうございました。
互換性のために、古いiClose、iTime...関数を 実装するパブリックライブラリ/クラスがあるかどうかご存知ですか?ステップバイステップの変換中に意味をなすでしょう。