エラー、バグ、質問 - ページ 1999 1...199219931994199519961997199819992000200120022003200420052006...3185 新しいコメント Stanislav Korotky 2017.09.12 15:59 #19981 Alexey Viktorov:インジケーターを初期化する際、バッファーの長さはゼロになります。ゼロで初期化することがあるのか?別のインデックスが追加された場合、強制的にゼロにされ、その後何らかの値で埋められるのでしょうか?EMPTY_VALUEで ゼロ埋めするのは何のためですか?また、0や EMPTY_VALUEではなく 、PLOT_EMPTY_VALUEを 割り当てる必要がある場合、あるいは、1つを強制的に割り当てるが、もう1つが必要な 場合...。どう考えても、時間を無駄にしたことになる...。そして、カスタムアレイ...配列はゼロとは異なる何らかのデータに対して宣言され、 EMPTY_VALUE。では、強制的に何かで初期化する目的は何なのでしょうか?つまり、ほとんどの場合、パフォーマンスに影響があることがわかります。私は明らかに人生から外れています。私の考えでは、インジケータ・バッファは常にバーの数と同じ長さを持っています。また、MT5で初期化を拒否すると、画面にゴミが表示されます。明示的な初期化が義務付けられていることが判明した。また、なぜカーネルから(MT4でそうであったように)MQLプログラマーに単純に転送されるのかが不明です。なぜか初期化せずに高速化してもゴミのような表示になるというまともな反論は見たことがない。カスタム動的配列については何も言いませんが、本当にルールがあります:それを割り当てた人は、正しくクリーニングする責任があります。ArrayInitializeは多くの場合において有用である。速さではなく、プログラムの正しさが問われるのです。優先順位:速く、かつ/または、正しく。通常、正しさのチェックやデータ準備のために追加で時間がかかりますが(最小限の時間ですが)、それをしないわけにはいきません。 fxsaber 2017.09.12 16:17 #19982 Stanislav Korotky:私はカスタムの動的配列については何も言いませんが、このルールは実際に適用されます。アライを侮辱するな。#property strict void OnStart() { uchar Array[]; const int Size = ArrayResize(Array, 10000); bool Res = false; for (int i = 0; (i < Size) && (!Res); i++) Res = Array[i]; Print(Res); }MT4では、ゴミがなければすべてゼロであるため、常にfalseを返します。MT5ではその通りです。したがって、MT4テスターの同じコードは、実行から実行まで常に同一の結果を示すことになります。MT5テスターでは、そうなりません。 Stanislav Korotky 2017.09.12 16:27 #19983 fxsaber:MT4では、ゴミがなければすべてゼロなので、常にfalseを返します。MT5ではその通りです。これは、MT4が配列を ゼロで埋めるテストですか?それから、ArrayResizeが第3のパラメータとしてreserveを使用する場合、reserve内でのその後の再割り当ては何も初期化しないことに留意する必要があります。ゴミが出る。この議論のきっかけとなった最適化の例のように、後で不意に驚くことがないように、明示的に初期化することをお勧めします。初期化でブレーキがかかることを心配する人は、あえて言うなら、もっともっと効率を上げられる場所やテクニックが、普通はたくさんあるはずなんです。 fxsaber 2017.09.12 16:35 #19984 Stanislav Korotky:MT4が配列を ゼロで埋めるテストでしょうか?それから、ArrayResizeがリザーブ付きの第3パラメータを使用する場合、リザーブ内での後続の再割り当ては何も初期化しないことに注意する必要があります。ゴミが出る。ゴミが出ない。この議論のきっかけとなった最適化の例のように、後で不意に驚くことがないように、明示的に初期化することをお勧めします。 これは、保存されません。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム バグ、バグ、質問 fxsaber さん 2017.09.12 11:18 たとえ私が完璧に(間違えずに)書いたとしても、他人のライブラリ(ソースコードなしの場合もある-マーケットプレイスで)を受け取り、それが有能に書かれていることを期待して使うのが普通です。そして、その後にテスターで異なる結果に遭遇するという保険はありません。そして、本当の原因を見つけることは非常に難しいでしょう。そして、それを修正することは時に不可能です。目標は、実行から実行への結果が再現可能であること、つまりエラーがあっても同じであることです。 Stanislav Korotky 2017.09.12 16:44 #19985 fxsaber:ゴミが出ない。では、ドキュメントを修正すればいいのでしょうか?ArrayInitialize(array, init_val) という式で配列を初期化しても、この配列に割り当てられたリザーブの要素を同じ値で初期 化するわけではありません。ArrayResize()関数が、その後、現在のリザーブ内で配列のサイズを増加さ せるとき、値が定義されておらず、多くの場合init_val と等しくない要素は、配列の末尾に追加 される。 fxsaber 2017.09.12 16:52 #19986 Stanislav Korotky: その時は、ドキュメントを修正する必要があるのでしょうか?ArrayInitialize(array, init_val) という式で配列を初期化しても、この配列のために確保されたreserveの要素が同じ値で初期化 されるわけではありません。ArrayResize()関数は、その後、現在のリザーブ内で配列のサイズを増加さ せる場合、値が定義されていない、多くの場合init_val と等しくない要素を配列の末尾に追加 している。MT4のドキュメントにそのような記述はないからです。ある数学ライブラリ(IncludeMath -7Mb source code)が1箇所か2箇所で初期化されていないことを考えるとぞっとしますよ。また、MT5のテスターでは異なる単発の実行が、MT4では同じものが出るのですが、このエラーはどのように掘り出せばよいのでしょうか? Alexey Viktorov 2017.09.12 17:01 #19987 Stanislav Korotky:私は時代に遅れているのでしょう。インジケータバッファは常にバーの数と同じ長さになっているようです。また、MT5で初期化を拒否すると、画面にゴミが表示されるようになります。明示的な初期化が義務付けられていることが判明した。また、なぜコアから(MT4でそうだったように)MQLプログラマーに単純に転送されるのか、その理由も不明です。なぜか初期化せずに高速化してもゴミのような表示になるというまともな反論は見たことがない。カスタム動的配列については何も言いませんが、本当にルールがあります:それを割り当てた人は、正しくクリーニングする責任があります。ArrayInitializeは多くの場合において有用である。速さではなく、プログラムの正しさが問われるのです。優先順位:速く、かつ/または、正しく。通常、正しさやデータ準備のためのいくつかのチェックは、(最小限とはいえ)追加の時間を必要としますが、それなしではやっていけません - 奇跡が起こるのです。 というフレーズに注目しなかったんですね。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム バグ、バグ、質問 アレクセイ・ビクトロフ さん 2017.09.12 10:50 インジケーターのバッファ配列を例にとってみましょう。インジケーターを初期化する とき、バッファの長さはゼロです。ゼロで初期化することがあるのか?別のインデックスが追加されると、強制的にゼロにされ、その後何らかの値で埋め尽くされる?EMPTY_VALUEで ゼロ埋めするのは何のためですか?また、0や EMPTY_VALUEではなく 、PLOT_EMPTY_VALUEを 割り当てる必要がある場合、あるいは、1つを強制的に割り当てるが、もう1つが必要な 場合...。どう考えても、時間を無駄にしたことになる...。そして、カスタムアレイ...配列はゼロとは異なる何らかのデータに対して宣言され、 EMPTY_VALUE。では、なぜ強制的に何かで初期化する必要があるのでしょうか?つまり、ほとんどの場合、性能に影響を与えることが判明したわけです。また、OnCalculateでこれを行うのは意味がない。なぜ、配列を何かで初期化してから、数式からいくつかの値を入力する必要があるのでしょうか?バーを追加するとき、それぞれ配列のセルに、何かを入れて、すぐに計算式の値や空の値を入れる意味はあるのでしょうか? fxsaber 2017.09.12 17:03 #19988 Alexey Viktorov:そして、それはすでにOnCalculateでそれは意味をなさない。なぜ、配列を何かで初期化して、すぐに計算式の値で埋めなければならないのでしょうか?バーを追加し、それぞれ配列セルを追加したとき、そこに何かを記入し、すぐに計算式の値や空の値を記入する意味はあるのでしょうか?新しい配列要素のみ 初期化されます。そして、ポイントはやはり同じです。たとえコードに誤りがあったとしても(多くの場合、自分の誤りではありません)、実行ごとに同一の結果が得られるのです。上記で数学ライブラリを使った例を挙げました。屑は悪である。 Stanislav Korotky 2017.09.12 17:06 #19989 fxsaber:MT4のドキュメントにないだけなので、やめましょう。じゃあ、どこから持ってきたんだろう?こちらへ どうぞ。 ArrayInitialize - Операции с массивами - Справочник MQL4 docs.mql4.com ArrayInitialize - Операции с массивами - Справочник MQL4 fxsaber 2017.09.12 17:08 #19990 Stanislav Korotky:じゃあ、どこから持ってきたんだろう?こちらへ どうぞ。つまり、ArrayResizeではなく、ArrayInitializeの話です。ArrayResizeは、MT4でゼロを保証します。興味本位で、ArrayInitializeの使用頻度をMT5の全ソースで調べてみました。ほんの数回です。ダイナミックアレイ全体の何%にも満たないようです。また、使ったところでは、わざとnullを使う必要があったので、forの代わりに短い表記を使いました。 1...199219931994199519961997199819992000200120022003200420052006...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
インジケーターを初期化する際、バッファーの長さはゼロになります。ゼロで初期化することがあるのか?別のインデックスが追加された場合、強制的にゼロにされ、その後何らかの値で埋められるのでしょうか?EMPTY_VALUEで ゼロ埋めするのは何のためですか?また、0や EMPTY_VALUEではなく 、PLOT_EMPTY_VALUEを 割り当てる必要がある場合、あるいは、1つを強制的に割り当てるが、もう1つが必要な 場合...。どう考えても、時間を無駄にしたことになる...。
そして、カスタムアレイ...配列はゼロとは異なる何らかのデータに対して宣言され、 EMPTY_VALUE。では、強制的に何かで初期化する目的は何なのでしょうか?
つまり、ほとんどの場合、パフォーマンスに影響があることがわかります。
私は明らかに人生から外れています。私の考えでは、インジケータ・バッファは常にバーの数と同じ長さを持っています。また、MT5で初期化を拒否すると、画面にゴミが表示されます。明示的な初期化が義務付けられていることが判明した。また、なぜカーネルから(MT4でそうであったように)MQLプログラマーに単純に転送されるのかが不明です。なぜか初期化せずに高速化してもゴミのような表示になるというまともな反論は見たことがない。
カスタム動的配列については何も言いませんが、本当にルールがあります:それを割り当てた人は、正しくクリーニングする責任があります。ArrayInitializeは多くの場合において有用である。速さではなく、プログラムの正しさが問われるのです。優先順位:速く、かつ/または、正しく。通常、正しさのチェックやデータ準備のために追加で時間がかかりますが(最小限の時間ですが)、それをしないわけにはいきません。
私はカスタムの動的配列については何も言いませんが、このルールは実際に適用されます。
アライを侮辱するな。
MT4では、ゴミがなければすべてゼロであるため、常にfalseを返します。MT5ではその通りです。
したがって、MT4テスターの同じコードは、実行から実行まで常に同一の結果を示すことになります。MT5テスターでは、そうなりません。
MT4では、ゴミがなければすべてゼロなので、常にfalseを返します。MT5ではその通りです。
これは、MT4が配列を ゼロで埋めるテストですか?それから、ArrayResizeが第3のパラメータとしてreserveを使用する場合、reserve内でのその後の再割り当ては何も初期化しないことに留意する必要があります。ゴミが出る。この議論のきっかけとなった最適化の例のように、後で不意に驚くことがないように、明示的に初期化することをお勧めします。
初期化でブレーキがかかることを心配する人は、あえて言うなら、もっともっと効率を上げられる場所やテクニックが、普通はたくさんあるはずなんです。
MT4が配列を ゼロで埋めるテストでしょうか?それから、ArrayResizeがリザーブ付きの第3パラメータを使用する場合、リザーブ内での後続の再割り当ては何も初期化しないことに注意する必要があります。ゴミが出る。
ゴミが出ない。
この議論のきっかけとなった最適化の例のように、後で不意に驚くことがないように、明示的に初期化することをお勧めします。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2017.09.12 11:18
たとえ私が完璧に(間違えずに)書いたとしても、他人のライブラリ(ソースコードなしの場合もある-マーケットプレイスで)を受け取り、それが有能に書かれていることを期待して使うのが普通です。そして、その後にテスターで異なる結果に遭遇するという保険はありません。そして、本当の原因を見つけることは非常に難しいでしょう。そして、それを修正することは時に不可能です。
目標は、実行から実行への結果が再現可能であること、つまりエラーがあっても同じであることです。
ゴミが出ない。
では、ドキュメントを修正すればいいのでしょうか?
ArrayInitialize(array, init_val) という式で配列を初期化しても、この配列に割り当てられたリザーブの要素を同じ値で初期 化するわけではありません。ArrayResize()関数が、その後、現在のリザーブ内で配列のサイズを増加さ せるとき、値が定義されておらず、多くの場合init_val と等しくない要素は、配列の末尾に追加 される。
その時は、ドキュメントを修正する必要があるのでしょうか?
ArrayInitialize(array, init_val) という式で配列を初期化しても、この配列のために確保されたreserveの要素が同じ値で初期化 されるわけではありません。ArrayResize()関数は、その後、現在のリザーブ内で配列のサイズを増加さ せる場合、値が定義されていない、多くの場合init_val と等しくない要素を配列の末尾に追加 している。
MT4のドキュメントにそのような記述はないからです。
ある数学ライブラリ(IncludeMath -7Mb source code)が1箇所か2箇所で初期化されていないことを考えるとぞっとしますよ。また、MT5のテスターでは異なる単発の実行が、MT4では同じものが出るのですが、このエラーはどのように掘り出せばよいのでしょうか?
私は時代に遅れているのでしょう。インジケータバッファは常にバーの数と同じ長さになっているようです。また、MT5で初期化を拒否すると、画面にゴミが表示されるようになります。明示的な初期化が義務付けられていることが判明した。また、なぜコアから(MT4でそうだったように)MQLプログラマーに単純に転送されるのか、その理由も不明です。なぜか初期化せずに高速化してもゴミのような表示になるというまともな反論は見たことがない。
カスタム動的配列については何も言いませんが、本当にルールがあります:それを割り当てた人は、正しくクリーニングする責任があります。ArrayInitializeは多くの場合において有用である。速さではなく、プログラムの正しさが問われるのです。優先順位:速く、かつ/または、正しく。通常、正しさやデータ準備のためのいくつかのチェックは、(最小限とはいえ)追加の時間を必要としますが、それなしではやっていけません - 奇跡が起こるのです。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
バグ、バグ、質問
アレクセイ・ビクトロフ さん 2017.09.12 10:50
インジケーターのバッファ配列を例にとってみましょう。インジケーターを初期化する とき、バッファの長さはゼロです。ゼロで初期化することがあるのか?別のインデックスが追加されると、強制的にゼロにされ、その後何らかの値で埋め尽くされる?EMPTY_VALUEで ゼロ埋めするのは何のためですか?また、0や EMPTY_VALUEではなく 、PLOT_EMPTY_VALUEを 割り当てる必要がある場合、あるいは、1つを強制的に割り当てるが、もう1つが必要な 場合...。どう考えても、時間を無駄にしたことになる...。
そして、カスタムアレイ...配列はゼロとは異なる何らかのデータに対して宣言され、 EMPTY_VALUE。では、なぜ強制的に何かで初期化する必要があるのでしょうか?
つまり、ほとんどの場合、性能に影響を与えることが判明したわけです。
また、OnCalculateでこれを行うのは意味がない。なぜ、配列を何かで初期化してから、数式からいくつかの値を入力する必要があるのでしょうか?バーを追加するとき、それぞれ配列のセルに、何かを入れて、すぐに計算式の値や空の値を入れる意味はあるのでしょうか?
そして、それはすでにOnCalculateでそれは意味をなさない。なぜ、配列を何かで初期化して、すぐに計算式の値で埋めなければならないのでしょうか?バーを追加し、それぞれ配列セルを追加したとき、そこに何かを記入し、すぐに計算式の値や空の値を記入する意味はあるのでしょうか?
新しい配列要素のみ 初期化されます。そして、ポイントはやはり同じです。たとえコードに誤りがあったとしても(多くの場合、自分の誤りではありません)、実行ごとに同一の結果が得られるのです。上記で数学ライブラリを使った例を挙げました。
屑は悪である。
MT4のドキュメントにないだけなので、やめましょう。
じゃあ、どこから持ってきたんだろう?こちらへ どうぞ。
じゃあ、どこから持ってきたんだろう?こちらへ どうぞ。
つまり、ArrayResizeではなく、ArrayInitializeの話です。ArrayResizeは、MT4でゼロを保証します。
興味本位で、ArrayInitializeの使用頻度をMT5の全ソースで調べてみました。ほんの数回です。ダイナミックアレイ全体の何%にも満たないようです。また、使ったところでは、わざとnullを使う必要があったので、forの代わりに短い表記を使いました。