Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
//+------------------------------------------------------------------+//| Возвращает время указанного бара |//+------------------------------------------------------------------+datetime Time(conststring symbol_name,constENUM_TIMEFRAMES timeframe,constint index)
{
datetime array[];
return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
}
//+------------------------------------------------------------------+
と、ひとことで言うとこんな感じです。
staticdatetime 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;
}
その場合、最初の小節10sからunambiguously CopyRates。また、毎回のように 呼び出されるわけではなく、新しいバーが出現したときに呼び出される程度で十分です。
CopyRates を使用せずに新しいバーが現れたかどうかを知るにはどうしたらよいですか?というか、まずは新バーイベントを獲らなきゃダメでしょ。CopyRatesがなければ可能なのでしょうか?少し混乱しています)。
ということですね、MT5でこのテーマを扱ったことはありません。ご了承ください))。
ああ、ウラジミール。とぼやいていたものの、残念ながら予約はしていなかった。例えば始値や時間だけが必要な場合、CopyRates()を使う必要はなく、CopyOpenやiOpenで十分です。は、それぞれCopyTimeまたはiTimeです。宗教的な好みによって選ばれます。
そして、注意点を付け加えると、性能コストという点では、それほど大きな差はありません。したがって、宗教的な偏見だけが残る。fxsaberはCopyRates()の コストをチェックしていました。必要なプロパティを個別に取得するよりもコストがかかります。一度にすべての価格を把握する必要がある場合には適用されません。
また、CopyRatesがなくても新しいバーが現れたことを知るにはどうしたらよいのでしょうか?というか、まずは新バーイベントを獲らなきゃダメだろ。CopyRatesがなくても可能なのでしょうか?少し混乱しています)。
何も気にせず、新しいバーの出現を監視し、CopyRatesを呼び出します。
サイト上の新しいバーを検出する機能や方法は、さまざまなものがあります。
CopyRates を使用せずに新しいバーが現れたかどうかを知るにはどうしたらよいですか?というか、まずは新バーイベントを獲らなきゃダメでしょ。CopyRatesがなければ可能なのでしょうか?少し混乱しています)。
MT5でこのトピックを扱ったことがない、ということです。ご了承ください))
最も簡単な方法は、現在のバーの開始時刻を 比較することです。新しい小節を用意し、新しい小節で必要なことを行い、次のチェックのためにこの時間を記憶します。
何も気にせず、新しいバーの出現を追跡し、CopyRatesを呼び出します。
サイト上の新しいバーの定義には、さまざまな機能、方法があります。
fxsaberはCopyRates()のコストチェックを行いました。必要なプロパティを個別に取得するよりもコストがかかります。すべての価格を一度に取得する必要がある場合は、この限りではありません。
最も簡単な方法は、現在のバーの開始時刻を 比較することです。新しい小節を用意し、新しい小節で必要なことを行い、次のチェックのためにこの時間を記憶します。
つまり、ティックごとにCopyRatesを呼び出しているのですね。そうでなければ、現在のバーの開店時刻が変わったことをどうやって知ることができるでしょうか?
CNewbarの クラスか、NewBarのフォーラムを検索してください。
SZZ:記事全体!https://www.mql5.com/ru/articles/159
イゴール、お前は1年生になれ。そこで文字を教えてくれるので、それを覚えるとCopyRatesとCopyBufferの違いが理解できるようになります。
この問題を解決するために、CopyRatesを使用しない、より良い提案があります。
よし、いつもの...おっとっと...と思ったら一行もコードがない )))
私は、連続したOHLCの配列を取得することは必ずしも便利ではない(めったに必要ではない)ことを示すために、この例を挙げました。 実際の作業では、通常、異なるバーからOHLC値の選択を取得する必要があります(指標は考慮されていません)。
OK、お気をつけて!
では、各ティックでCopyRatesを呼び出すと?そうでなければ、現在のバーの開始時刻が変わったことをどうやって知ることができるのでしょうか?
そう、刻み ごとに時間を確認するのです。
と、ひとことで言うとこんな感じです。
手書きで書いただけです。文章の正確さではなく、アイデアを示すために
では、すべてのティックでCopyRatesを呼び出せばいいのですね?そうでなければ、現在のバーの開始時刻が変わったことをどうやって知ることができるのでしょうか?
if(prevTime!=iTime(...))とする。
{
// 現在のバーのオープン時間が 変更された
}
prevTime=iTime(...)。