mql5言語の特徴、微妙なニュアンスとテクニック - ページ 49 1...424344454647484950515253545556...247 新しいコメント Sofiia Butenko 2017.07.18 09:07 #481 fxsaberif, else, while, for, doの直後にTABキーを押すと、ちょっとだけ余計な構造が...。mqlを知り始めて5年目にしてわかったことです。 fxsaber 2017.07.18 16:08 #482 ある問題 提起についてのSDでの会話からの結論。文字列変数に値を代入するのは、非常に高価な操作であることが判明した。そのため、開発者がコンパイラのこの点を改善するまで、できれば避けることが望ましいのですが、すぐに改善されるとは思えません。例として、FIBOで1ヶ月間リアルティックを実行した場合、約100万ティックになります。各ティックでPositionGetStringの値を取得し、何かと比較するのであれば、パフォーマンスは問題ないでしょうが、比較する前にまず関数の結果を文字列変数に代入すると、実行時間が1秒程度長くなります。もし、それが小さなことに思えるなら、それは間違ったビジョンです。このようなEAを最適化モードで数千回実行すると、その1秒は待ち時間の延長になる。例えば、無害な文字列の割り当てが、最適化の際にさらなる待ち時間を発生させることがあります。このニュアンスに注意し、考慮してください。kodobaseには、同じ取引ロジックの異なる実装において、このような障害を検出するための小さなツールがあります。高速なコードを書く。 Vitaly Muzichenko 2017.07.18 16:16 #483 fxsaberある問題 提起についてのSDでの会話からの結論。文字列変数に値を代入するのは、非常に高価な操作であることが判明した。そのため、開発者がコンパイラのこの点を改善するまで、できれば避けた方が望ましいのですが、すぐに改善されるとは思えません。例として、FIBOで1ヶ月間リアルティックを実行した場合、約100万ティックになります。各ティックでPositionGetStringの値を取得し、何かと比較するのであれば、パフォーマンスは問題ないでしょうが、比較する前にまず関数の結果を文字列変数に代入すると、実行時間が1秒程度長くなります。もし、それが小さなことに思えるなら、それは間違ったビジョンです。このようなEAを最適化モードで数千回実行すると、その1秒は待ち時間の延長になる。例えば、無害な文字列の割り当てが、最適化の際にさらなる待ち時間を発生させることがあります。このニュアンスに注意し、考慮してください。kodobaseには、同じ取引ロジックの異なる実装において、このような障害を検出するための小さなツールがあります。簡単なコードを書いてください。ありがとうございます、まさかとは思いましたが。今後の開発に活かしていきます fxsaber 2017.07.18 20:33 #484 寝る前の簡単ななぞなぞ、なぜ黄色い結果が出るのか?struct INT { int Array[]; INT() { Print(__FUNCTION__); // до сюда не дойдет } }; void OnStart() { INT i = {0}; Print(ArrayResize(i.Array, 5)); // -1 } TheXpert 2017.07.18 21:05 #485 fxsaber: 寝る前の簡単ななぞなぞ、なぜ黄色い結果が出るのか? コンストラクタではなく、構造体をゼロでパックしているため、配列構造体の初期化が間違っており、arrayresizeは そのような配列を好まず、私のコードはそのようなリサイズでクラッシュしました。 fxsaber 2017.07.18 21:21 #486 コンビナート です。 コンストラクタではなく、構造体がゼロでパックされているため、配列構造体が誤って初期化され、arrayresizeはそのような配列を好まず、私のコードはそのようなリサイズで全くクラッシュしました。みんなが知っていることだからいいんです。 fxsaber 2017.07.19 06:28 #487 スラバ: GetMicrosecondCountを指します。サーバーの速度が低下しているかどうかを判断する明確な方法はありません。間接的な効果があるかもしれません。そのため、システムネイティブのGetTickCountを使用するのがよいでしょうGetMicrosecondCountは、短時間のコード実行を測定するために使用します。大量の OnTick 実行を測定するには、GetTickCount を使用するのがよいでしょう。安定した結果が得られる場合は、GetTickCountの代わりにGetMicrosecondsCountを使用するようにしてください。こ こで教えてもらうことになる。心配しすぎかもしれませんね。 GetMicrosecondsCountを複数回呼び出すと、テスターでひどい遅延が発生するという仮説が正しいことがわかりました。ただし、GetTickCountも 同じ効果があります。 fxsaber 2017.07.19 16:32 #488 fxsaberある問題 提起についてのSDでの会話からの結論。文字列変数に値を代入するのは、非常に高価な操作であることが判明した。そのため、開発者がコンパイラのこの点を改善するまで、できれば避けた方が望ましいのですが、すぐに改善されるとは思えません。例として、FIBOで1ヶ月間リアルティックを実行した場合、約100万ティックになります。各ティックでPositionGetStringの値を取得し、何かと比較するのであれば、パフォーマンスは問題ないでしょうが、比較する前にまず関数の結果を文字列変数に代入すると、実行時間が1秒程度長くなります。もし、それが小さなことに思えるなら、それは間違ったビジョンです。このようなEAを最適化モードで数千回実行すると、その1秒は待ち時間の延長になる。例えば、無害な文字列の割り当てが、最適化の際にさらなる待ち時間を発生させることがあります。このニュアンスに注意し、考慮してください。kodobaseには、同じ取引ロジックの異なる実装において、このような障害を検出するための小さなツールがあります。簡単なコードを書いてください。struct STRUCT { string Str; string Get() const { return(this.Str); } }; void OnStart() { STRUCT Struct; Print(Struct.Str); Print(Struct.Get()); // Выполняется гораздо дольше, чем предыдущая строка } Alexey Navoykov 2017.07.19 19:48 #489 fxsaber文字列変数に値を代入するのは、非常に高価な操作であることが判明した。...比較する前にまず関数の結果を文字列変数に代入してから比較すると、実行時間が1秒程度長くなる。 私が思うに、問題は高価な代入ではなく、コンパイラがこの不要な代入をカットすべきなのに、なぜかカットしないことにあるのだと思います。つまり、コンパイルされたコードはどちらの場合も同じであるべきなのです。 fxsaber 2017.07.20 06:37 #490 アレクセイ・ナヴォイコフ 私の理解では、高価な代入が問題なのではなく、コンパイラがこの不要な代入をカットすべきなのに、なぜかカットしてくれないことが問題なのだと思います。つまり、コンパイルされたコードはどちらの場合も同じであるべきなのです。これは些細な問題です。そうです。コンパイラのオプティマイザは、このような文字列の瞬間を最適化する方法をまだ知らないのです。しかし、速度低下の問題があるのは、文字列の割り当ての方だ。コンパイラで最適化できないコードを書き、同時にその中で代入を行う。そして、スローダウンの正体が見えてくる。構造体の文字列フィールドを関数で読み取る例は、まさにMT4/5で実装されている位置プロパティの 読み取りの方法と同じです。MT4では、同じOrderSymbol()でもMT5で実装されているとブレーキがかかる。開発者自身がリンクで文字列を関数に渡そうとする。したがって、次のような書き方をするとif ((OrderSymbol() == Symb) && (OrderMagicNumber == Magic))一般的な条件の最後にOrderSymbol()の条件を置くとよいでしょう。TesterBenchを使用すると、一見滑らかな表面で明らかに速度が低下することに気づきました。 1...424344454647484950515253545556...247 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
if, else, while, for, doの直後にTABキーを押すと、ちょっとだけ余計な構造が...。
mqlを知り始めて5年目にしてわかったことです。
ある問題 提起についてのSDでの会話からの結論。
文字列変数に値を代入するのは、非常に高価な操作であることが判明した。
そのため、開発者がコンパイラのこの点を改善するまで、できれば避けることが望ましいのですが、すぐに改善されるとは思えません。
例として、FIBOで1ヶ月間リアルティックを実行した場合、約100万ティックになります。各ティックでPositionGetStringの値を取得し、何かと比較するのであれば、パフォーマンスは問題ないでしょうが、比較する前にまず関数の結果を文字列変数に代入すると、実行時間が1秒程度長くなります。
もし、それが小さなことに思えるなら、それは間違ったビジョンです。このようなEAを最適化モードで数千回実行すると、その1秒は待ち時間の延長になる。例えば、無害な文字列の割り当てが、最適化の際にさらなる待ち時間を発生させることがあります。このニュアンスに注意し、考慮してください。
kodobaseには、同じ取引ロジックの異なる実装において、このような障害を検出するための小さなツールがあります。高速なコードを書く。
ある問題 提起についてのSDでの会話からの結論。
文字列変数に値を代入するのは、非常に高価な操作であることが判明した。
そのため、開発者がコンパイラのこの点を改善するまで、できれば避けた方が望ましいのですが、すぐに改善されるとは思えません。
例として、FIBOで1ヶ月間リアルティックを実行した場合、約100万ティックになります。各ティックでPositionGetStringの値を取得し、何かと比較するのであれば、パフォーマンスは問題ないでしょうが、比較する前にまず関数の結果を文字列変数に代入すると、実行時間が1秒程度長くなります。
もし、それが小さなことに思えるなら、それは間違ったビジョンです。このようなEAを最適化モードで数千回実行すると、その1秒は待ち時間の延長になる。例えば、無害な文字列の割り当てが、最適化の際にさらなる待ち時間を発生させることがあります。このニュアンスに注意し、考慮してください。
kodobaseには、同じ取引ロジックの異なる実装において、このような障害を検出するための小さなツールがあります。簡単なコードを書いてください。
ありがとうございます、まさかとは思いましたが。今後の開発に活かしていきます
寝る前の簡単ななぞなぞ、なぜ黄色い結果が出るのか?
寝る前の簡単ななぞなぞ、なぜ黄色い結果が出るのか?
コンストラクタではなく、構造体がゼロでパックされているため、配列構造体が誤って初期化され、arrayresizeはそのような配列を好まず、私のコードはそのようなリサイズで全くクラッシュしました。
みんなが知っていることだからいいんです。
GetMicrosecondCountを指します。サーバーの速度が低下しているかどうかを判断する明確な方法はありません。間接的な効果があるかもしれません。そのため、システムネイティブのGetTickCountを使用するのがよいでしょう
GetMicrosecondCountは、短時間のコード実行を測定するために使用します。大量の OnTick 実行を測定するには、GetTickCount を使用するのがよいでしょう。
安定した結果が得られる場合は、GetTickCountの代わりにGetMicrosecondsCountを使用するようにしてください。こ こで教えてもらうことになる。心配しすぎかもしれませんね。
ある問題 提起についてのSDでの会話からの結論。
文字列変数に値を代入するのは、非常に高価な操作であることが判明した。
そのため、開発者がコンパイラのこの点を改善するまで、できれば避けた方が望ましいのですが、すぐに改善されるとは思えません。
例として、FIBOで1ヶ月間リアルティックを実行した場合、約100万ティックになります。各ティックでPositionGetStringの値を取得し、何かと比較するのであれば、パフォーマンスは問題ないでしょうが、比較する前にまず関数の結果を文字列変数に代入すると、実行時間が1秒程度長くなります。
もし、それが小さなことに思えるなら、それは間違ったビジョンです。このようなEAを最適化モードで数千回実行すると、その1秒は待ち時間の延長になる。例えば、無害な文字列の割り当てが、最適化の際にさらなる待ち時間を発生させることがあります。このニュアンスに注意し、考慮してください。
kodobaseには、同じ取引ロジックの異なる実装において、このような障害を検出するための小さなツールがあります。簡単なコードを書いてください。
文字列変数に値を代入するのは、非常に高価な操作であることが判明した。
...
比較する前にまず関数の結果を文字列変数に代入してから比較すると、実行時間が1秒程度長くなる。
私の理解では、高価な代入が問題なのではなく、コンパイラがこの不要な代入をカットすべきなのに、なぜかカットしてくれないことが問題なのだと思います。つまり、コンパイルされたコードはどちらの場合も同じであるべきなのです。
これは些細な問題です。そうです。コンパイラのオプティマイザは、このような文字列の瞬間を最適化する方法をまだ知らないのです。しかし、速度低下の問題があるのは、文字列の割り当ての方だ。
コンパイラで最適化できないコードを書き、同時にその中で代入を行う。そして、スローダウンの正体が見えてくる。
構造体の文字列フィールドを関数で読み取る例は、まさにMT4/5で実装されている位置プロパティの 読み取りの方法と同じです。
MT4では、同じOrderSymbol()でもMT5で実装されているとブレーキがかかる。開発者自身がリンクで文字列を関数に渡そうとする。
したがって、次のような書き方をすると
一般的な条件の最後にOrderSymbol()の条件を置くとよいでしょう。
TesterBenchを使用すると、一見滑らかな表面で明らかに速度が低下することに気づきました。