mql5言語の特徴、微妙なニュアンスとテクニック - ページ 142 1...135136137138139140141142143144145146147148149...247 新しいコメント Edgar Akhmadeev 2019.10.14 22:24 #1411 最適化のオーバーシュートを少なくするために、2つの方法で非線形スケールを作っています。 十分な精度で継続時間を時間単位で列挙すること。 enum eHours { _0, _4, _6, _8, _12, _16, _24, _32, _48, _64, _96, _128 }; input eHours TrendHours = _8; int eHours2Hours(eHours e) { switch (e) { case _0: return 0; case _4: return 4; case _6: return 6; case _8: return 8; case _12: return 12; case _16: return 16; case _24: return 24; case _32: return 32; case _48: return 48; case _64: return 64; case _96: return 96; case _128: return 128; default: return -1; } } 例えば、SARステップを2桁(~1%)の精度で列挙すること。 // Приводит параметр оптимизации к нелинейному виду // 001-099 >> 0.0001-0.0099 // 101-199 >> 0.001-0.099 // 201-299 >> 0.10-0.99 // Внимание: коды 000, 100, 200 возвращают 0.0 double NonlinPar(int code) { int order = code / 100; int mod = code - order * 100; return mod * MathPow(10, order) / 10000; } 0.0001から0.99まで最適化すると、ほぼ1万ステップ必要です。コード 001~299を最適 化に使用すると、300ステップ未満で済みます。 fxsaber 2019.10.28 06:24 #1412 チェックを入れてもゼロで割り算に 走る方法。 void OnStart() { const double Profit = 100; const double Lots = 1; double TickValue[]; ArrayResize(TickValue, 1); const double Points = TickValue[0] ? Profit / (Lots * TickValue[0] * _Point) : 0; // zero divide } 事実上、間違いは明らかです。しかし、このようなコードを書いていると、ゼロによる除算を避けるためには、このようなチェックだけでは不十分であることが、必ずしも明らかではありません。 TheXpert 2019.10.28 08:59 #1413 三項演算 子を使わない言い訳。 fxsaber 2019.10.28 09:19 #1414 TheXpert:三項演算 子を使わない言い訳。 もちろん、似たような場合にも。 Alexey Viktorov 2019.10.28 09:22 #1415 ただ、値がない場合、bool型 変数でなければ、必ずしも0であり、したがって偽であるとは思わないでください。明示的にbool型に変換しても保存されない。 void OnStart() { const double Profit = 100; const double Lots = 1; double TickValue[]; ArrayResize(TickValue, 1); const double Points = TickValue[0] == 0? Profit / (Lots * TickValue[0] * _Point) : 0; } このようにエラーなく動作します。 fxsaber 2019.10.28 09:25 #1416 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム mql5の特性、ヒントとコツ アレクセイ・ビクトロフ, 2019.10.28 10:22 値がなければ必ず0になる、だからbool型 変数でなければ偽である、ということを想定していないだけなのです。明示的にbool型に変換しても保存されない。 void OnStart() { const double Profit = 100; const double Lots = 1; double TickValue[]; ArrayResize(TickValue, 1); const double Points = TickValue[0] == 0? Profit / (Lots * TickValue[0] * _Point) : 0; } このようにエラーなく動作します。 ハイライトされた場所にエラーがあります。 Alexey Viktorov 2019.10.28 09:28 #1417 fxsaber: ハイライトされた場所にエラーがあります。 ハイライトが見えない。エラーは何ですか? Artyom Trishkin 2019.10.28 09:30 #1418 fxsaber: ハイライトされた場所にエラーがあります。 と書いていますが、「!=」であるべきです。 下線は「ごく薄い黄色」です :) Alexey Viktorov 2019.10.28 09:34 #1419 Artyom Trishkin: "=="と書いてありますが、"!="であるべきです。 下線は「ごく薄い黄色」です :) まあ、私があの猿のように、"年を取ると目が弱くなる "ことを知ってる人は少ないでしょうけど。 と思うのですが、なぜか0による除算をしなくても動きました。 そして一般的には、どんな変数でも0をブーリアンとしてfalseでチェックしてはいけないというのが私のメッセージです。 fxsaber 2019.10.28 09:40 #1420 Alexey Viktorov: だと思うのですが、なぜか0で割らなくても動きました。 TickValueが0でないため。 1...135136137138139140141142143144145146147148149...247 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
最適化のオーバーシュートを少なくするために、2つの方法で非線形スケールを作っています。
十分な精度で継続時間を時間単位で列挙すること。
例えば、SARステップを2桁(~1%)の精度で列挙すること。
0.0001から0.99まで最適化すると、ほぼ1万ステップ必要です。コード 001~299を最適 化に使用すると、300ステップ未満で済みます。
事実上、間違いは明らかです。しかし、このようなコードを書いていると、ゼロによる除算を避けるためには、このようなチェックだけでは不十分であることが、必ずしも明らかではありません。
三項演算 子を使わない言い訳。
もちろん、似たような場合にも。
ただ、値がない場合、bool型 変数でなければ、必ずしも0であり、したがって偽であるとは思わないでください。明示的にbool型に変換しても保存されない。
このようにエラーなく動作します。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5の特性、ヒントとコツ
アレクセイ・ビクトロフ, 2019.10.28 10:22
値がなければ必ず0になる、だからbool型 変数でなければ偽である、ということを想定していないだけなのです。明示的にbool型に変換しても保存されない。
このようにエラーなく動作します。
ハイライトが見えない。エラーは何ですか?
と書いていますが、「!=」であるべきです。
下線は「ごく薄い黄色」です :)
"=="と書いてありますが、"!="であるべきです。
下線は「ごく薄い黄色」です :)
まあ、私があの猿のように、"年を取ると目が弱くなる "ことを知ってる人は少ないでしょうけど。
と思うのですが、なぜか0による除算をしなくても動きました。 そして一般的には、どんな変数でも0をブーリアンとしてfalseでチェックしてはいけないというのが私のメッセージです。
だと思うのですが、なぜか0で割らなくても動きました。
TickValueが0でないため。