bool f() { return Random(); /*вычисляется ооочень долго, но результат не зависит от числа вызовов*/ }
void g1() { /*делает что-то полезное*/ }
void g2() { /*делает что-то полезное*/ }
void h() {
#ifndef MACRO
if ( f() )
#endif
{
if ( f() )
g1();
g2();
}
}
その過程で、いくつかの疑問が生まれました。
1.Compでoperator()が書けない(なぜか禁止されている)のはなぜですか?
2.定数参照を受け付ける関数にprvalueを渡せないのはなぜですか?
HH: さらに、「構造体にはメンバがありません、サイズは1バイトに割り当てられています」という警告も非常に気になります。
そこでは全て問題なく、発注はOnTradeTransactionで制御されるべきです。ところで、Plaza2を通じて直接取引所に接続する場合も状況は同じで、発注に関するメッセージの到着を制御する必要があります。MT4では、この機能は同期式ですが、MT5でも同様のオプションがあり、この場合のみ、関数が応答を受け取らないまでロジックが停止します。
必要であれば、コントロールクラスをお送りしますが、これはマーケットプレイス用に書かれたもので、近々リミッター用に最終調整する予定です。
ぜひとも、コドベースに投稿してください。教育目的のため。
https://www.mql5.com/ru/forum/1111/page1743#comment_2877482、あなたが指摘した理由でできません。 最近、私はエラーを特定することができず、ソースコードをservicedkに形成するために多くの時間を費やしました - 最終的に多くの相互参照(幾何学的な進行で1つが他のものを引っ張る)のために何も出てこなかった - 私は.ex5を送信しました。
教育的な観点から、私は次のようなことを提案します:変数を追加することなく、h()を単純化し、f()がどのような場合でも一度だけ呼ばれるようにする。
コンパイルエラー
(*) 一般に、パターン(1)では、Tの代わりにA->(2)とconst A->(3)の両方を代用することができる。
それはなぜでしょうか?constを含むパターンはnon-constを受け入れることができません - それは契約に違反します。
教育目的のために、私は次の課題を提案することができます:追加の変数を導入することなく、f()がどのような場合でも一度だけ呼ばれるようにh()を簡素化します。
それはなぜでしょうか?constを持つテンプレートはconst以外を受け付けない - 契約に違反する。
同じような問題を経験された方はいらっしゃいますか?端末の "バグ "か、私の "バグ "か?
MT5-OrderSendは完全な同期型ではなく、取引環境と同期していません。これは、ヒストリーの読みが実際の状況に対応していないことを意味します。
タイムアウトなしは論外。同期の問題はサーバーレベルではなく、端末レベルで解決しなければならないので、確実な解決策はない。
実は、MT4ブリッジの開発者が直面していることに、MT5ユーザーも直面しているのです。
OrderSendが送信された場合、それが行われたことを記憶しておく必要があります(ここが潜在的な脆弱性です)。そして、OnTradeに対応するメッセージが来るまで、現在の履歴(取引環境)を無視します。届いたら、REMEMBER to FORGET(忘れることなく)。
REMEMBERがない場合は、MT4と同様に履歴を信頼することができます。
MT4-OrderSendは完全に同期しています。OrderSendAsyncを非同期でいじれば、OnTradeとOnTradeTransactionの両方を処理できるのは理解できるのですが。OrderSendでは、MT4のようなシンプルな動作をさせたいと思っています。この関数が呼び出されると、すでに変更されたオープンポジションと履歴が出力されます。
微妙なところがあるんです。現在の状態がグローバル変数に 格納されており、状態の変化の予想に比較的時間がかかる場合、トレーダーがEAパラメータを変更することに成功すると、グローバル変数がリセットされ、状態が破棄されます。