MQL5でOpen,Low,High,Closeのパラメータを取得するにはどうしたらいいですか? - ページ 6

 
Artyom Trishkin:

SERIES_LASTBAR_DATEに問題がありました。昔、どこかで議論されたことがある。もしかしたら、直ったのかもしれません。

iXXX()関数は問題なく動作します。3ヶ月ほど(MQL5を使い始めてから)使用していますが、特にバグや不具合は見当たりません。- とても便利で、すべてがうまくいきます

SZZY:ヘルプに書かれているとおりに動作します。

パラメータ

記号

[in] 楽器記号名。NULLは カレントシンボルを意味する。

タイムフレーム

[中】期間enumeration ENUM_TIMEFRAMES の値のいずれかを指定することができる。 0は 現在のチャートの期間を表します。

 
Igor Makanu:

いつも書くだけで、読もうとしないのですか? New Barについての全記事へのリンクをあげましたよ。記事はチェックされます - フォーラムに常に書き込んでいる人たちとは異なる能力の人たちによってチェックされます ;)

ZS: もしあなたが書くのをやめて読み始めたら、私のリンクの記事のように、iXXX()を使わない別の方法(SERIES_LASTBAR_DATE ) - 私はそれを使わないように言ったのです )))- 開発者が出したバグやエラーが粗悪品だと誰が言うんだ ))))

リンクありがとうございます。私はあなたの解決策を批判したのではなく、iTimeの呼び出しを指摘しただけです。それ自体がiXXX関数の使用を示唆しており、CopyRatesをいじるポイントより優先されます。つまり、iXXX関数(iTime)を使わないために、CopyRatesを使うためにiTimeを使った新しいバーを探すのです))) 。悪質なサークルですね)))
 
// Для Тестера.
bool IsNewBar()
{
  static int PrevBars = 0;
  const int CurrBars = Bars;  

  const bool Res = (CurrBars != PrevBars);
  
  PrevBars = CurrBars;
  
  return(Res);
}
 
Roman:
ありがとうございます。
 
fxsaber:
ありがとうございます。
 
多くの MT4用EAを ソースコードを変更することなくMT5用に変換しました。サボをOpen[i]として掲載しました。
 
fxsaber:
多くのMT4用EAをソースコードに手を加えることなくMT5にコンバートしました。サボはOpen[i]として投稿しました。

CopyXXX と iXXX 機能間のパフォーマンス測定を行ったことがありますか?この質問はとても興味深い。

今のところ、iXXX関数の便利な使い方は、MQL4のコードをMQL5に移植する際の作り直しが少なくて済むということです。

その他の場合(性能に関する知識がない場合)-ユーザーの嗜好のみに基づいて選択されます。

 
fxsaber:
Open[i]の形でSabzを掲載しました。

このコードに注意を払わなかったが、チェックしたところ、うまくいった。

ZS: 明日、頭がはっきりしている時に、[]がどうなったか確認したいのですが、何回か試したのですが、うまくいきませんでした!(笑)

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator[](const int iPos) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift) \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume,long)
DEFINE_TIMESERIE(Time,Time,datetime)
DEFINE_TIMESERIE(Open,Open,double)
DEFINE_TIMESERIE(High,High,double)
DEFINE_TIMESERIE(Low,Low,double)
DEFINE_TIMESERIE(Close,Close,double)
void OnStart()
  {
   for(int i=0;i<10;i++)
     {
      ResetLastError();
      Print("Bar№ ",i," : ",Time[i]," , O = ",Open[i]," , H = ",High[i]," , L = ",Low[i]," , C = ",Close[i]);
      int err=GetLastError();
      if(err>0) Print("Error № ",err);
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

CopyXXX と iXXX 機能間のパフォーマンス測定を行ったことがありますか?この質問には非常に興味があります。

していません。私はバーにはほとんど手を出しません。CopyXXX関数より高速なものはないはずです。キャッシュした場合のみ。

 
Artyom Trishkin:

CopyXXX と iXXX 機能間のパフォーマンス測定を行ったことがありますか?この質問には非常に興味がある...


fxsaber:

していません。私はバーにはほとんど手を出しません。CopyXXX関数より高速なものはないはずです。キャッシュした場合のみ。

測定した。

#define    test(M,S,EX)        {uint mss=GetTickCount();int nn=(int)pow(10,M);for(int tst=0;tst<nn&&!_StopFlag;tst++){EX;} \
                                printf("%s: loops=%i ms=%u",S,nn,GetTickCount()-mss);}
//+------------------------------------------------------------------+
void OnStart()
  {
   double buff[];
   test(10,"CopyClose",CopyClose(_Symbol,_Period,rand(),1,buff));
   test(10,"iClose",iClose(NULL,0,rand())); 
  }
//+------------------------------------------------------------------+

2019.07.30 00:44:29.156 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69407

2019.07.30 00:45:29.408 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=60250