エラー、バグ、質問 - ページ 2490

 
Slava:

下の投稿にある私の引用文をよくお読みになっていますか?

この動作は、「チャートあたりの 最大バー数」の 設定が導入されたときから、つまりMT4の初期から常に存在していたものです。そして、この設定に従って毎回バーの数を減らさない理由は、この15年の間に何度も説明してきました。そして今は、毎回切り返すことはありません。

誰もドキュメントを読まない。しかし、それはパラドックスです。今でも、読んでもいないドキュメントに別のことを書いてくれと言われます。

スラバ、 文句なしです。よく読むと、あなたの引用だけでなく、このような

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

スラバ さん 2019.06.29 18:25

rates_total は常に現在のチャートで利用可能な バーの 数を表示します。

あなたの発言の意味が理解できない

そして、この

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

スラバ さん 2019.06.29 18:42

今、手元にクライアント端末がないので、ヘルプを引用します。モバイルデバイスから2クリックでhttps://www.metatrader5.com/ru/terminal/help/startworking/settings#max_bars

特別に強調された段落。

より経済的な計算を行うために、指標は "Max bars in window "パラメータで指定されたものより多くのバーを使用することができます。 新しいバーが到着 しても、古いバーはすぐにデータキャッシュから削除されない。これにより、インジケータは新しいバーごとに完全に再計算されるのではなく、新しいバーに対してのみ追加で値を計算することができます。

ドキュメントを何度も読み返しました。でも、最近始まった端末で絵を作ったりしています。ウィンドウには5000本のバーしかなく、新しいバーはまだ読み込まれる時間がない。

もちろん、わからないことがあれば、もう一度質問して、理解しようとします。変更はないのでしょうね。私の発言を苦情と受け取らないでください。

 
Igor Makanu:

参考文献は正しくない、誤解を招く、私が書いたhttps://www.mql5.com/ru/forum/304239/page57#comment_11519307

MQL5ではバッファは一般的な配列として機能しますが、MT4ではターミナルがバッファを処理し、EMPTY_VALUEにリセットし、その後...となります。MT5とMT4のインジケーターの違いについて、どこに書いたか覚えていませんが

バッファをクリアする必要があります - 通常の配列としてクリアし、端末は配列バッファ自体のサイズを設定するだけです。

Igorさん、ロシア語でわかりやすく説明してください。もし、インジケータバッファの各穴が、そこに含まれるゴミを置き換えるいくつかの値で満たされるなら、正しい値で満たす前にこれらの穴を強制する目的は何でしょうか。実行速度の低下のため?

 
Alexey Viktorov:

イゴール、ロシア語で説明してください。もし、インジケータバッファの各穴が、そこに含まれるゴミを置き換えるいくつかの値で満たされるなら、必要な値で満たす前にこれらの穴を強制的にクリアする目的は何でしょうか?実行速度の低下のため?

穴埋めは、「矢印」を持つインジケータにおいてのみ重要です。MT4では、インジケータの初期化時に、これらの「穴」はEMPTY_VALUEという値で自動的に埋められます。

MT5では、プログラマーが行う必要があります。

またはMT5では、プログラマーはif() else構成を介してインジケータバッファを 埋める必要があります。

i.e.これはMT4で動作します。

if(...) Buf[i] = high[i];

をMT5で書く必要があります。

if(...) Buf[i] = high[i]; else Buf[i] = EMPTY_VALUE;

また、MT5では、インジケータバッファをクリアしないと、TFを切り替えたときに、インジケータバッファに束縛されている配列から「ゴミ」が描画されます。書き方や配慮はセンス次第


SZY: 速度ですか? まあ、速度を測ってみると、99%のケースで組み込み関数の方が速いのですが、ループ内のすべてのバーをEMPTY_VALUEで埋めるのと、ArrayInitialize(Buf,EMPTY_VALUE)で1回初期化するのとではパフォーマンスに差がないんです。

 
Igor Makanu:

穴埋めは、「矢印」を持つインジケーターにおいてのみ重要です。MT4では、インジケーターの初期化時に、これらの「穴」はEMPTY_VALUEの値によって自動的に埋められます。

MT5では、プログラマーが行う必要があります。

またはMT5では、プログラマーはif() else構成を介してインジケータバッファを 埋める必要があります。

i.e.これはMT4で動作します。

をMT5では必ず書かなければならない。

また、MT5では、インジケータバッファをクリアしないと、TFを切り替えたときに、インジケータバッファに束縛されている配列から「ゴミ」が描画されます。書き方や配慮はセンス次第


さて、速度を測ってみると、99%のケースで組み込み関数の方が速く走りますが、EMPTY_VALUEループで各バーを埋めるのと、ArrayInitialize(Buf,EMPTY_VALUE)で一度初期化するのとではパフォーマンスに差は出ません。

これだけでは口うるさいだけです。そうだったんだ、そうしたいんだ、習慣を変えるのは難しい、などの理由があるようです。

if else の構成は、簡単に次のように置き換えることができます。

Buf[i] = условие ? high[i] : EMPTY_VALUE;
 
Alexey Viktorov:

口うるさいだけなんです。そういうものだ、そうありたい、習慣を変えるのは難しい、などの理由があります。

if else の構成は、簡単に次のように置き換えることができます。

C++やC#でパフォーマンスを向上させるためのTipsでは、「条件演算子 ? : " 以前、ハブラの記事を読んだような気がします(テストはしていません、なるべく都合の良いように書いています)。

;)

 
Igor Makanu:

しつこいようですが、C++やC#でパフォーマンスを向上させるためのアドバイスとして、「条件演算子 ? : " 以前、ハブラの記事を読んだような気がします(検証はしていません、自分でもなるべく都合よく書いています)。

;)

コンパイラは馬鹿ではないので、Habraのグルよりもうまく最適化します。
 
Artyom Trishkin:
このコンパイラはバカではないので、フーバーの「達人」よりもうまく最適化します。

そんなとき、私はいつも「太陽は朝に出て、夕方に沈む......」と繰り返す。- ここに論理があると思いますか?- たしかに論理的ですが、私の文章に情報はあるのでしょうか?- ないんです。

テストしないの?:コンパイラ・マシン....フーバー、良い...

 
Igor Makanu:

テストはしないの?:

MT5をテスト。

2019.06.30 13:37:04.230 tst (EURUSD,H1) Testing if() cycles=9999999999 time=10859 ms

2019.06.30 13:37:15.116 tst (EURUSD,H1) Testing ?: cycles=99999999 time=10891 ms

2019.06.30 13:38:05.348 tst (EURUSD,H1) Testing if() cycles=9999999999 time=10843 ms

2019.06.30 13:38:16.190 tst (EURUSD,H1) Testing ?: cycles=99999999 time=10844 ms

2019.06.30 13:38:32.111 tst (EURUSD,H1) Testing if() cycles=9999999999 time=10860 ms

2019.06.30 13:38:42.955 tst (EURUSD,H1) Testing ?: cycles=99999999 time=10843 ms

MT4をテストしてみました。

2019.06.30 13:46:09.087 tst EURUSD,H1: Testing ?: cycles=99999999 time=33234 ms

2019.06.30 13:45:35.854 tst EURUSD,H1: テスト if() cycles=9999999999 time=32953 ms

2019.06.30 13:44:43.421 tst EURUSD,H1: Testing ?: cycles=99999999 time=333298 ms

2019.06.30 13:44:10.094 tst EURUSD,H1: テスト if() cycles=9999999999 time=33016 ms

2019.06.30 13:42:56.925 tst EURUSD,H1: Testing ?: cycles=99999999 time=33344 ms

2019.06.30 13:42:23.584 tst EURUSD,H1: テスト if() cycles=9999999999 time=32953 ms

MTの開発者、いつもトップクラスですね。
 
以前から、大きなプロジェクトで カスタムマクロ名のハイライトがうまくいかないことがあります。 他のファイルで定義された多くのマクロがなぜかハイライトされません。 まだパターンがわかりません。 あるファイルで定義されたマクロが、ある行以降他のファイルでハイライトされなくなることだけはわかります。 誰かこの現象を見たことはありませんか?
 
Alexey Navoykov:
大きなプロジェクトで、ユーザー定義のマクロ名のハイライトがいつもうまくいかないことに長い間気づいていました。 他のファイルで定義された多くのマクロが、なぜかハイライトされません。 まだパターンを見つけることができません。 私が見るのは、あるファイルで定義されたすべてのマクロが、ある行以降他のファイルでハイライトされなくなることです。 誰か自分自身にこの現象が起こったことがあるのでしょうか?

どの関数のパラメーターとして書いても、光らないことに気がつきました。完全一致型ではないのでは?あるいは、より正確にはどう呼べばいいのかわからない。