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

 
Alexey Viktorov:

その場合、最初の小節10sからunambiguously CopyRates。また、毎回のように 呼び出されるわけではなく、新しいバーが出現したときに呼び出される程度で十分です。

CopyRates を使用せずに新しいバーが現れたかどうかを知るにはどうしたらよいですか?というか、まずは新バーイベントを獲らなきゃダメでしょ。CopyRatesがなければ可能なのでしょうか?少し混乱しています)。

ということですね、MT5でこのテーマを扱ったことはありません。ご了承ください))。

 
Alexey Viktorov:

ああ、ウラジミール。とぼやいていたものの、残念ながら予約はしていなかった。例えば始値や時間だけが必要な場合、CopyRates()を使う必要はなく、CopyOpenやiOpenで十分です。は、それぞれCopyTimeまたはiTimeです。宗教的な好みによって選ばれます。

そして、注意点を付け加えると、性能コストという点では、それほど大きな差はありません。したがって、宗教的な偏見だけが残る。

fxsaberはCopyRates()の コストをチェックしていました。必要なプロパティを個別に取得するよりもコストがかかります。一度にすべての価格を把握する必要がある場合には適用されません。

 
Реter Konow:
また、CopyRatesがなくても新しいバーが現れたことを知るにはどうしたらよいのでしょうか?というか、まずは新バーイベントを獲らなきゃダメだろ。CopyRatesがなくても可能なのでしょうか?少し混乱しています)。

何も気にせず、新しいバーの出現を監視し、CopyRatesを呼び出します

サイト上の新しいバーを検出する機能や方法は、さまざまなものがあります。

 
Реter Konow:

CopyRates を使用せずに新しいバーが現れたかどうかを知るにはどうしたらよいですか?というか、まずは新バーイベントを獲らなきゃダメでしょ。CopyRatesがなければ可能なのでしょうか?少し混乱しています)。

MT5でこのトピックを扱ったことがない、ということです。ご了承ください))

最も簡単な方法は、現在のバーの開始時刻を 比較することです。新しい小節を用意し、新しい小節で必要なことを行い、次のチェックのためにこの時間を記憶します。

 
Alexey Viktorov:

何も気にせず、新しいバーの出現を追跡し、CopyRatesを呼び出します

サイト上の新しいバーの定義には、さまざまな機能、方法があります。

MT5で新しいバーの出現は、分の始まりと連動していません。時間的な制約が全くないのです。キャッチがあります。ティックだけで、新しいバーの出現をどれだけ正確に把握できるのか?やはり時系列を参照する必要があります。そうでなければ、なかなかできないことです。とはいえ...100%とは言い切れませんが。
 
Artyom Trishkin:

fxsaberはCopyRates()のコストチェックを行いました。必要なプロパティを個別に取得するよりもコストがかかります。すべての価格を一度に取得する必要がある場合は、この限りではありません。

失礼ながらfxsaberさん、私はそのような違いに注意を払いたくないのです。だから「顕著な 差はない」と言ったのであって、1e6回の繰り返しの差には興味がないのです。1e6の弾を一度に撃てるようなシューティングゲームを書いているわけではないのです。
 
Artyom Trishkin:

最も簡単な方法は、現在のバーの開始時刻を 比較することです。新しい小節を用意し、新しい小節で必要なことを行い、次のチェックのためにこの時間を記憶します。

つまり、ティックごとにCopyRatesを呼び出すということですか?そうでなければ、現在のバーの開始時刻が変わったことをどうやって知ることができるでしょうか。
 
Реter Konow:
つまり、ティックごとにCopyRatesを呼び出しているのですね。そうでなければ、現在のバーの開店時刻が変わったことをどうやって知ることができるでしょうか?

CNewbarの クラスか、NewBarのフォーラムを検索してください。

SZZ:記事全体!https://www.mql5.com/ru/articles/159



アレクセイ・ヴィクトロフ

イゴール、お前は1年生になれ。そこで文字を教えてくれるので、それを覚えるとCopyRatesとCopyBufferの違いが理解できるようになります。

この問題を解決するために、CopyRatesを使用しない、より良い提案があります。


よし、いつもの...おっとっと...と思ったら一行もコードがない )))

私は、連続したOHLCの配列を取得することは必ずしも便利ではない(めったに必要ではない)ことを示すために、この例を挙げました。 実際の作業では、通常、異なるバーからOHLC値の選択を取得する必要があります(指標は考慮されていません)。

OK、お気をつけて!

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
では、各ティックでCopyRatesを呼び出すと?そうでなければ、現在のバーの開始時刻が変わったことをどうやって知ることができるのでしょうか?

そう、刻み ごとに時間を確認するのです。

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int index)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+

と、ひとことで言うとこんな感じです。

static datetime last_time=0;
datetime time_current=Time(Symbol(),PERIOD_CURRENT,0);
if(time_current==0)
  return;
if(time_current!=last_time)
  {
   // Новый бар или первый запуск (для контроля первого запуска можно сделать флаг - чтобы не обрабатывать его как новый бар)
   // делаем что нужно на новом баре
   last_time=time_current;
  }

手書きで書いただけです。文章の正確さではなく、アイデアを示すために

 
Реter Konow:
では、すべてのティックでCopyRatesを呼び出せばいいのですね?そうでなければ、現在のバーの開始時刻が変わったことをどうやって知ることができるのでしょうか?

if(prevTime!=iTime(...))とする。

{

// 現在のバーのオープン時間が 変更された

}

prevTime=iTime(...)。

理由: