MT4からMT5への乗り換えの問題。正確には、MT5で一部のアルゴリズムをerrなしで実行できないことです。 - ページ 9 123456789101112 新しいコメント Georgiy Merts 2019.07.31 08:04 #81 Vict: そうです、例外を使ったコードはずっとシンプルできれいです。常にエラーチェックをすることで、混乱に陥ります。しかし、例外なくμlには問題が多い。 開発者はクロスを引かなかった。 私見では、違いはありません。 リターンコードについては、RETURN_IF_BAD_RESULT()のようなマクロを書いて、結果を返すすべての関数に貼り付ける必要があります。 例外として、TRY-CACTHセクションを書く必要があります。さらに、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておく必要があるため、コードに // 例外というコメントを追加します。 何かは楽勝、何かは...。 Igor Makanu 2019.07.31 08:13 #82 Vict: そう、例外を使ったコードはずっとシンプルでクリーンです。常にエラーをチェックし続けることで、コードがこんがらがってしまいます。しかし、例外なくμlには問題が多い。 開発者がクロスを引けなかったのです。 いや、例外の話でもなく...逆に「悪のコバンザメ」がいるかもしれない...。配列の 外側のトリップをすべて例外にする人 ))) imho、あなたは、OSにexitとreturnのすべてを分割する方法が必要です... それはいくつかのExit()であるように、あなたは正しいアイデアを得た、私は無限のコードスプールを掛けるしたくない - 常にすべての関数呼び出しをラップする意味はありません。 void OnStart() { if(!MyFuncReadOHLC_1()) return; if(!MyFuncReadOHLC_2()) return; .... } 削除済み 2019.07.31 08:16 #83 Georgiy Merts: 私見では、違いはありません。 リターンコードについては、RETURN_IF_BAD_RESULT()のようなマクロを書いて、結果を返すすべての関数に貼り付ける必要があります。 例外として、TRY-CACTHセクションを書く必要があります。さらに、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておき、コードに // 例外というコメントを追加してください。 なんかゴチャゴチャしてる、なんかゴチャゴチャしてる...。 例外で私は何も覚えておく必要はありません、しばしばさえTRY-CACTHは必要ありません(ちょうどプログラムのクラッシュを終了します)、それは排他的な状況であり、通常は発生しません、if - elseブロックにそれらを有効にしないでください。例えば、私はベクターライクなものを書きましたが、アロケーションに失敗したときに例外を投げる代わりに、オペレータ!をねじ込んで、挿入のたびにそれを引っ張らなければなりませんでした(忘れましたが)、怪しい利益です。 削除済み 2019.07.31 08:23 #84 Igor Makanu: imhoは、OSで全部割り切れるようにすればいいんです...。 うん、それもOK、ないのが不思議. Igor Makanu 2019.07.31 08:36 #85 Vict: そう、何もないのが不思議なくらいです・・・。 これはMQL4の典型的なテンプレートで、「新しいバー」をチェックし、インジケータをチェックし、注文で動作するかしないかを確認します。 void OnTick() { int takeprofit,stoploss; double lot; ENUM_CMD CMD1,CMD2,CMD3; CMD1 = ind1(); CMD2 = ind2(); CMD3 = ind3(); if(NewBar()) { DeleteOrdersLimits(Magic); if(CMD1==CMD_BUY && CMD2==CMD_BUY && CMD3==CMD_BUY) { CalcTakeProfitStopLoss(takeprofit,stoploss); lot=CalcLot(stoploss); if(ReversSignal)SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); else BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit); } if(CMD1==CMD_SELL && CMD2==CMD_SELL && CMD3==CMD_SELL) { CalcTakeProfitStopLoss(takeprofit,stoploss); lot=CalcLot(stoploss); if(ReversSignal)BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit);else SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); } } } //+------------------------------------------------------------------+ この例では、インジケータは異なるTFで動作するため、「すべてのティックを引っ張る」...というのは、どうでもいいことです。 ind1(),ind2(),ind3()とNewBar()でOHLCのデータを使用しています。 もし、1回の関数呼び出しで タイムセリーズアクセスエラーが発生したら、このコードを実行し続ける意味はあるのでしょうか?- OSを終了して新しいティックを待つ必要があります。つまり、ind1(),ind2(),ind3()とNewBar()でGetLastError()をチェックして、エラーを受け取ったら直ちにOSでExit()してEAログに書き込む のです。 Georgiy Merts 2019.07.31 09:35 #86 Vict: 例外は何も覚える必要がなく、TRY-CACTHさえも必要ない場合が多い(緊急時にはプログラムが終了するだけ)、それは排他的な状況で、通常は起こらない、if-elseブロックに変えない。例えば、私はベクターライクなものを書きましたが、アロケーションに失敗したときに例外を投げる代わりに、オペレータ!をねじ込んで、挿入のたびにそれを引っ張らなければなりませんでした(忘れましたが)、怪しい利益です。 まあ、いいじゃないか、相棒... 何も覚える必要はない」と言いながら、続けて「TRY-CATCHすら不要な場合が多い」。 この同じ「よくある」というのは、どこかのブロックが必要で、どこかが不要で、それを覚える必要があるということ。 リターンコードと同じ状況で、何らかのリソースを要求して例外が発生(エラーが返る)すれば、リソースは拒否しなければなりません。つまり、どんな場合でも、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておく必要があります。 あ、「例外的な状況」についてですが...。まあ、なんというか...。引用符の不在は、例外を投げる合理的な理由のようですが、それは「例外的な状況」なのでしょうか? Georgiy Merts 2019.07.31 09:38 #87 Igor Makanu: これはMQL4の典型的なテンプレートで、「新しいバー」をチェックし、インジケータをチェックし、注文で動作するかしないかを確認します。 この例では、インジケータは異なるTFで動作するため、「すべてのティックを引っ張る」...というのは、どうでもいいことです。 ind1(),ind2(),ind3()とNewBar()でOHLCのデータを使用しています。 もし、1回の関数呼び出しで タイムセリーズアクセスエラーが発生したら、このコードを実行し続ける意味はあるのでしょうか?- OSを終了して新しいティックを待つ必要があります。つまり、ind1(),ind2(),ind3()とNewBar()でGetLastError()をチェックして、エラーが出たらすぐにOSでExit()してEAログに記録して います。 return(iErrCode)を呼び出すと何が問題なのでしょうか? Igor Makanu 2019.07.31 09:54 #88 Georgiy Merts: また、return(iErrrCode)を呼び出すと何が問題なのでしょうか? うーん、コードで表示してみます。OHLCデータの処理が間違っていた場合にexitするようにコードを書き直したら、こんな感じになります。 void OnTick() { int takeprofit,stoploss; double lot; bool nb; ENUM_CMD CMD1,CMD2,CMD3; if(!ind1( CMD1 )) return; if(!ind2( CMD2 )) return; if(!ind3( CMD3 )) return; if(!NewBar( nb )) return; if( nb ) { DeleteOrdersLimits(Magic); if(CMD1==CMD_BUY && CMD2==CMD_BUY && CMD3==CMD_BUY) { CalcTakeProfitStopLoss(takeprofit,stoploss); lot=CalcLot(stoploss); if(ReversSignal)SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); else BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit); } if(CMD1==CMD_SELL && CMD2==CMD_SELL && CMD3==CMD_SELL) { CalcTakeProfitStopLoss(takeprofit,stoploss); lot=CalcLot(stoploss); if(ReversSignal)BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit);else SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); } } } 関数の値を参照で取得し、関数が正しく処理されなかった場合は終了するようにした(議論の文脈では、端末がTFによって履歴データを 準備しなかった)。 削除済み 2019.07.31 09:54 #89 Georgiy Merts: まあ、いいじゃないか、相棒... 何も覚える必要はない」と言いながら、続けて「TRY-CATCHすら不要な場合が多い」。 この同じ「よくある」というのは、どこかのブロックが必要で、どこかが不要で、それを覚える必要があるということ。 リターンコードと同じ状況で、何らかのリソースを要求して例外が発生(エラーが返る)すれば、リソースは拒否しなければなりません。つまり、どんな場合でも、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておく必要があります。 あ、「例外的な状況」についてですが...。まあ、なんというか...。引用符の不在は例外を投げるには合理的ですが、「例外的な状況」なのでしょうか? なんとなく自分なりに例外を間違って使ってしまっている、らしい。一般に、この関数が例外を投げるかどうかは気にする必要はないでしょう。TRY-CATCHの搭載は任意です。また、リソースの問題を回避するために、RAIIhttps://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0_%D0%B5%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F を取得し、 スタックをスピンアップすることで、すべてをクリーンアップします。 そして、「例外的な状況」についてですが...。まあ、なんというか...。引用符の欠如は、例外を投げるための合理的な言い訳のように思えますが、「例外的な状況」なのでしょうか? 排他性はコード作成者次第ですが、例外は当然ながらif-elseに類するものであってはなりません。 削除済み 2019.07.31 12:12 #90 変な話、今まで思いつかなかったんです。 // Немедленное завершение, деструкторы не вызываются void abort() {Alert(1/(uint)MathAbs(0));} メモリ割り当ての ような大量のエラーチェックを取り除くことができます。 123456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そうです、例外を使ったコードはずっとシンプルできれいです。常にエラーチェックをすることで、混乱に陥ります。しかし、例外なくμlには問題が多い。 開発者はクロスを引かなかった。
私見では、違いはありません。
リターンコードについては、RETURN_IF_BAD_RESULT()のようなマクロを書いて、結果を返すすべての関数に貼り付ける必要があります。
例外として、TRY-CACTHセクションを書く必要があります。さらに、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておく必要があるため、コードに // 例外というコメントを追加します。
何かは楽勝、何かは...。
そう、例外を使ったコードはずっとシンプルでクリーンです。常にエラーをチェックし続けることで、コードがこんがらがってしまいます。しかし、例外なくμlには問題が多い。 開発者がクロスを引けなかったのです。
いや、例外の話でもなく...逆に「悪のコバンザメ」がいるかもしれない...。配列の 外側のトリップをすべて例外にする人 )))
imho、あなたは、OSにexitとreturnのすべてを分割する方法が必要です... それはいくつかのExit()であるように、あなたは正しいアイデアを得た、私は無限のコードスプールを掛けるしたくない - 常にすべての関数呼び出しをラップする意味はありません。
私見では、違いはありません。
リターンコードについては、RETURN_IF_BAD_RESULT()のようなマクロを書いて、結果を返すすべての関数に貼り付ける必要があります。
例外として、TRY-CACTHセクションを書く必要があります。さらに、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておき、コードに // 例外というコメントを追加してください。
なんかゴチャゴチャしてる、なんかゴチャゴチャしてる...。
例外で私は何も覚えておく必要はありません、しばしばさえTRY-CACTHは必要ありません(ちょうどプログラムのクラッシュを終了します)、それは排他的な状況であり、通常は発生しません、if - elseブロックにそれらを有効にしないでください。例えば、私はベクターライクなものを書きましたが、アロケーションに失敗したときに例外を投げる代わりに、オペレータ!をねじ込んで、挿入のたびにそれを引っ張らなければなりませんでした(忘れましたが)、怪しい利益です。
imhoは、OSで全部割り切れるようにすればいいんです...。
うん、それもOK、ないのが不思議.
そう、何もないのが不思議なくらいです・・・。
これはMQL4の典型的なテンプレートで、「新しいバー」をチェックし、インジケータをチェックし、注文で動作するかしないかを確認します。
この例では、インジケータは異なるTFで動作するため、「すべてのティックを引っ張る」...というのは、どうでもいいことです。
ind1(),ind2(),ind3()とNewBar()でOHLCのデータを使用しています。
もし、1回の関数呼び出しで タイムセリーズアクセスエラーが発生したら、このコードを実行し続ける意味はあるのでしょうか?- OSを終了して新しいティックを待つ必要があります。つまり、ind1(),ind2(),ind3()とNewBar()でGetLastError()をチェックして、エラーを受け取ったら直ちにOSでExit()してEAログに書き込む のです。
例外は何も覚える必要がなく、TRY-CACTHさえも必要ない場合が多い(緊急時にはプログラムが終了するだけ)、それは排他的な状況で、通常は起こらない、if-elseブロックに変えない。例えば、私はベクターライクなものを書きましたが、アロケーションに失敗したときに例外を投げる代わりに、オペレータ!をねじ込んで、挿入のたびにそれを引っ張らなければなりませんでした(忘れましたが)、怪しい利益です。
まあ、いいじゃないか、相棒...
何も覚える必要はない」と言いながら、続けて「TRY-CATCHすら不要な場合が多い」。 この同じ「よくある」というのは、どこかのブロックが必要で、どこかが不要で、それを覚える必要があるということ。 リターンコードと同じ状況で、何らかのリソースを要求して例外が発生(エラーが返る)すれば、リソースは拒否しなければなりません。つまり、どんな場合でも、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておく必要があります。
あ、「例外的な状況」についてですが...。まあ、なんというか...。引用符の不在は、例外を投げる合理的な理由のようですが、それは「例外的な状況」なのでしょうか?
これはMQL4の典型的なテンプレートで、「新しいバー」をチェックし、インジケータをチェックし、注文で動作するかしないかを確認します。
この例では、インジケータは異なるTFで動作するため、「すべてのティックを引っ張る」...というのは、どうでもいいことです。
ind1(),ind2(),ind3()とNewBar()でOHLCのデータを使用しています。
もし、1回の関数呼び出しで タイムセリーズアクセスエラーが発生したら、このコードを実行し続ける意味はあるのでしょうか?- OSを終了して新しいティックを待つ必要があります。つまり、ind1(),ind2(),ind3()とNewBar()でGetLastError()をチェックして、エラーが出たらすぐにOSでExit()してEAログに記録して います。
return(iErrCode)を呼び出すと何が問題なのでしょうか?
また、return(iErrrCode)を呼び出すと何が問題なのでしょうか?
うーん、コードで表示してみます。OHLCデータの処理が間違っていた場合にexitするようにコードを書き直したら、こんな感じになります。
関数の値を参照で取得し、関数が正しく処理されなかった場合は終了するようにした(議論の文脈では、端末がTFによって履歴データを 準備しなかった)。
まあ、いいじゃないか、相棒...
何も覚える必要はない」と言いながら、続けて「TRY-CATCHすら不要な場合が多い」。 この同じ「よくある」というのは、どこかのブロックが必要で、どこかが不要で、それを覚える必要があるということ。 リターンコードと同じ状況で、何らかのリソースを要求して例外が発生(エラーが返る)すれば、リソースは拒否しなければなりません。つまり、どんな場合でも、どの関数が例外を投げ、どの関数が例外を投げないかを覚えておく必要があります。
あ、「例外的な状況」についてですが...。まあ、なんというか...。引用符の不在は例外を投げるには合理的ですが、「例外的な状況」なのでしょうか?
なんとなく自分なりに例外を間違って使ってしまっている、らしい。一般に、この関数が例外を投げるかどうかは気にする必要はないでしょう。TRY-CATCHの搭載は任意です。また、リソースの問題を回避するために、RAIIhttps://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0_%D0%B5%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F を取得し、 スタックをスピンアップすることで、すべてをクリーンアップします。
変な話、今まで思いつかなかったんです。
メモリ割り当ての ような大量のエラーチェックを取り除くことができます。