MT5で配列の強制クリア? - ページ 4

 
4ではリサイズ時にゼロによる初期 化が行われるのは知りませんでした。これは利便性ではなく、ある種のナンセンスであり、プログラムの低速化につながる。例えば、配列を値-1で初期化する必要がある場合、二重の初期化が発生します。
そして、なぜMT4が遅くなるのか不思議に思うのです。
 
Vasiliy Sokolov:

...MQL5はMQL4と違い、ユーザーが何を望んでいるのかを理解しようとしない、これは正しいことです。

ポスターにすることを提案します。:)(なんちゃって)

Vasilyさん、プログラマーの都合でMT5のこのようなアプローチを正当化するニュアンスがあることは理解しています。そして、私はそれを気にしない。そうであってほしい。

 
Реter Konow:

1.論理的には、配列をクリアする手順は、コンパイラがコンパイル時に一度だけ実行するものである。

そう、あなたは論理に問題があるのです :)

 
Nikolai Semko:
4kaではリサイズ時にゼロによる初期化が発生するのは知りませんでした。これは利便性ではなく、ある種のナンセンスであり、プログラムの低速化につながる。例えば、配列を値-1で初期化する必要がある場合、二重の初期化が発生します。
そして、なぜMT4が遅くなるのか不思議に思うのです。

原理的には、配列を宣言する ときに何らかのフラグを追加して、コンパイラに配列をクリアするように指示することができます。便利か、速いか、どちらかを選ぶと思います。

 
Реter Konow:

原理的には、配列を宣言する ときに、コンパイラに配列をクリアするように指示するフラグを追加すればよいのです。便利か、速いか、どちらかを選ぶと思います。

どんな違いがあるのでしょうか?リサイズ後に初期化をする、それだけでフラグになるんですね。
特に動的配列を宣言する場合、サイズが分からない。
 
Nikolai Semko:
何が違うのか。リサイズ後に初期化をするのは、全フラグですね。
特に動的配列を宣言する場合、サイズが分からない。

グローバル配列の宣言後、配列のサイズを変更するたびに行います。 また、20~30個のグローバル配列があり、そのうちのいくつかは特定の状況下でサイズを変更するとしたらどうでしょうか。どこでもループで初期化を書く必要があるのでしょうか?(配列は2次元でも可)。エラーの原因になる可能性があるのでは?

 
Реter Konow:

しかし、20~30個のグローバル配列があり、そのうちのいくつかは特定の状況下でサイズが変化するとしたらどうでしょうか。どこでもループで初期化を書く必要があるのでしょうか?(配列は2次元でも可)。エラーの温床になる可能性があるのでは?

この手術は非常にシンプルに行われます。ArrayResize"という単語を何か他のものに置き換えてください - これがリサイズ用の関数の名前になります。その中で、リサイズが上がっていれば、ループ内の新しい要素に0を代入していきます。

また、initeで、サイズを持つすべての配列を初期化する(もしあれば)。

また、関数の中にも指定されたサイズの配列が存在することがあり、それらも同様です。角括弧で検索してください。

 
Dmitry Fedoseev:

この手術は非常にシンプルに行われます。ArrayResize "という単語を何か他のものに置き換えてください。これがリサイズ関数の名前になります。その中で、リサイズが上向きであれば、ループ内の新しい要素に0を代入していきます。

また、initeで、サイズを持つすべての配列を初期化する(もしあれば)。

また、関数の中に指定されたサイズの配列が存在することがありますが、それらも同様です。角括弧で囲んであるものを探してください。

ところで、そうなんです。
ピョートル、ドミトリーは常識的なことを言っているんだ。
正しく書かれたdefineは、コード全体を書き直す手間を省くことができます。
 
Nikolai Semko:
ところで、そうなんです。
ピーター ディミトリは賢明なことを言ってるんだ。
正しく書かれたdefineは、コード全体を書き直す手間を省くことができます。

試してみます。面白いハックですね。

 

トピックスターターには疑問が多いですが、応援しています ))))

MQL5の開発者は、計算の速さ(あるいは他の美しい数字?)を追求するあまり、MQL4をよりフレンドリーにしていた「小さなおまけ」をすべて取り除いてしまいました。

MQL5で経験則があるとすれば、MQL4をベースにしたインジケーターが MQL5では「入門書」になり、この「入門書」を取引端末で読み込む必要があります。

1. OnInit()を呼び出すと、インジケーターバッファが自動的に初期化されない。

2.コドベースのインジケータを100個ほど見てみましたが、残念なことに、MQL5でプログラミングするという名目で、MQL4のスタイルでインジケータを書いています - 配列や時系列のナンバリングを拡張しています。

3. iHighest / iLowest は論理的に動作しません- 時系列番号の増加方向に最高値/最低値を持つバーを探します...すなわち、MQL4の指標の標準的な方式である、前のデータから現在までの計算を行う場合、iHighestとiLowestでは、左端のバーが0であり、iLowestが呼ばれると、未来の値を検索することになるので、この問題は解決しませんが・・・。

4. ArrayMaximum()と同じ問題 - インジケータで使用するのは難しい... それは、時系列の番号を増加させないのは難しい、我々は、開始el-taからいくつかのバー数を取り、常に引くとArrayMaximum(高[i]、i -Period、期間)を得ることができます。

5.残念なことに、MQL5のエキスパートでさえ、疑問のある構文を使っている......。MT4からの移行で節約した松葉杖の某基本は、まだ持ち歩いているとしよう。


MQLは純粋なС++を気取っていない、なぜユーザーのためにもっとシンプルな実装を削除したのか... Pythonを1ヶ月ほど見直したが、なぜこんなに作品が多いのか......。Pythonは小さなことは無視できるし、よりユーザーフレンドリーなインターフェースを持っていることを今になって理解しました;)- 経験豊富なプログラマーにとっては、すべてが間違っているように見えますが、人々はそれを使い、Pythonは非常に人気があります。