iBarShiftのアナログ - ページ 7

 

すべてのTFで最速で正しく動作するバージョンはこちらです。

int iBarShift3(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   static int Res=-1;
   static string LastSymb=NULL;
   static ENUM_TIMEFRAMES LastTimeFrame=0;
   static datetime LastTime=0;
   static int PerSec=::PeriodSeconds(LastTimeFrame);

   if(LastTimeFrame!=TimeFrame) PerSec=::PeriodSeconds(TimeFrame);
   if(TimeFrame<PERIOD_D1) time-=time%PerSec;

   if((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame))
     {
      Res=::Bars(Symb,TimeFrame,time,UINT_MAX);
      if(TimeFrame<PERIOD_D1) Res--;
      if(Res<0) Res=0;

      LastTime = time;
      LastSymb = Symb;
      LastTimeFrame=TimeFrame;
     }

   return(Res);
  }

TF D1、W1、MN1の速度が低下する。

そして、異なるバージョンのレスポンスとその速度(2番目の数字、数字が小さいほど機能が速い)を明確に示すテストインジケータです


バージョン3、4ともに正常に動作します。でも、3rdの方が速いんですよ。

CopyTimeを持つバリアントが最も遅い。

これはMQL4で確認することができます(添付のインジケータを参照)。

私はすでに混乱してしまったので、異なる変種の作者を特定しません。
しかし、3つ目の最も有用な方法は、@fxsaberからの 80%です。少ししか手を加えていません。

ファイル:
 
Nikolai Semko:

オプション3、4ともに正常に動作します。でも、3が一番速いんです。CopyTimeの亜種は最も遅い。

 
fxsaber:

ここでは寸法はあまり重要ではありません。ロジックが最速であることがお分かりいただけると思います。

 
Nikolai Semko:

すべてのTFで最速で正しく動作するバージョンはこちらです。

TF D1、W1、MN1の速度が低下する。

そして、異なるバージョンのレスポンスとその速度(2番目の数字、数字が小さいほど機能が速い)を明確に示すテストインジケータです


バージョン3、4ともに正常に動作します。でも、3rdの方が速いんですよ。

CopyTimeを持つバリアントが最も遅い。

MQL4で確認することができます(添付のインジケータを参照)。

私はすでに混乱しているので、異なる変種の作者を示しているわけではありません。
しかし、3つ目の最も効果的なバリエーションは、@fxsaberの 80%です。少し手を加えただけです。

あなたのインジケータにTFを追加しました。最初の2つのアルゴリズムは全く役に立ちません。

図中、現在のTFはH1であり、日割りで計算しています。



 
Renat Akhtyamov:
はい(ハイライト表示)

-1 は、エラー関数が返す、そのようなバーは存在しないという1マイナス(明確化)である

そこで、私の関数

も要改良

のに...

ドキュメンテーション

"注意"すること

Bars() 関数を呼び出す際に指定したパラメータの時系列のデータがまだ端末に生成されていない場合、または関数呼び出しの瞬間に時系列のデータがトレードサーバーと同期されて いない場合、 関数は ゼロ値を返します。"

====

res==0の場合は、そのまま関数から-1をキャッチすることになります。

===

だから、すべてうまくいくのです!それを利用してください。

上のインジケータでは、この方法がいかに誤ったものであるかがよくわかります。

 
Nikolai Semko:

すべてのTFで最速で正しく動作するバージョンはこちらです。

TF D1、W1、MN1の速度が低下する。

そして、異なるバージョンのレスポンスとその速度(2番目の数字、数字が小さいほど機能が速い)を明確に示すテストインジケータです


バージョン3、4ともに正常に動作します。でも、3rdの方が速いんですよ。

CopyTimeを持つバリアントが最も遅い。

MQL4で確認することができます(添付のインジケータを参照)。

すでに混乱しているので、さまざまな変種の作者を断定しているわけではありません。
しかし、3つ目の最も効果的なバリエーションは、@fxsaberの 80%です。ちょっとだけ手を加えただけです。

iBarShift3 バリアントが正しく 動作しない。

 

これが私のバージョンです。ジュニアとシニアの両方のフレームに対応しているようです。スピードはiBarshift3より少し速いです。


int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){.

datetime t1 = TimeCurrent()+10000000;

int ps = PeriodSeconds(timeframe)。

double div = time/(double)ps;

double mant = div - MathFloor(div);

int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1.Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;

return(ret)です。

}

 
Vitaly Muzichenko:

iBarShift3 オプションが正しく 動作しない。

正しく動作しない例を教えてください。

ということは、選択肢は4つしかない?

 
Vitaly Muzichenko:

iBarShift3 の オプションが正しく 動作しない。

ボキャブラリーは私たちのすべてです。

 
Nikolai Semko:

ボキャブラリーは私たちのすべてです。

ざっと確認したところ、1日以上動作している関数があり、代わりにiBarShift 3を代用したところ、EAが不正に動作するようになったそうです。それが、私の結論です。

私が使っているのはこちらです。

int iBarShift(string symbol,ENUM_TIMEFRAMES timeframe,datetime time,bool exact=false) {
 datetime LastBAR;
  if(!SeriesInfoInteger(symbol,timeframe,SERIES_LASTBAR_DATE,LastBAR)) {
   datetime opentimelastbar[1];
    if(CopyTime(symbol,timeframe,0,1,opentimelastbar)==1)
      LastBAR=opentimelastbar[0];
    else
      return(-1);
  }
//--- if time > LastBar we always return 0
  if(time>LastBAR)
    return(0);
//---
 int shift=Bars(symbol,timeframe,time,LastBAR);
 datetime checkcandle[1];

  if(CopyTime(symbol,timeframe,time,1,checkcandle)==1) {
   if(checkcandle[0]==time)
     return(shift-1);
   else if(exact && time>checkcandle[0]+PeriodSeconds(timeframe))
     return(-1);
   else
     return(shift);
  }
  return(-1);
 }