EEAWorkRetcode CChngTPSLRequest::_ProceedRequestInto(CTradeProcessorI* ptpProcessor)
{
ASSERT_MYPOINTER(ptpProcessor);
m_uiServerRetCode = ptpProcessor.ModifyTPSL(m_lComponentTicket,m_dTP,m_dSL);
if(ptpProcessor.TradeOperationWasSuccessful(m_uiServerRetCode) != true)
{
Print("Торговый запрос на изменение ТП-СЛ компоненты отработал с ошибкой, код возврата: ",m_uiServerRetCode);
TRACE_INTEGER("Торговый запрос на изменение ТП-СЛ компоненты отработал с ошибкой, код возврата: ",m_uiServerRetCode);
return(WR_SERVER_PROCEED_ERROR);
};
return(WR_SUCCEEDED);
};
でも、MQL4ではOOPでプログラミングできないので、やはりそちらの方が人気がありますね。
すでに私のコードを示しましたが、もう一度示します。
これは、トレードプロセッサーのインターフェースで、MT4とMT5の両方でまったく同じです。
ユーザーはこのインターフェイスを手に入れるだけで、取引行動のあらゆる可能性を手にすることができるのです。MT4なのかMT5なのかさえも分からなくていい。購入する必要があります。関数Buyを呼び出すと、オープンな取引コンポーネント(MT4では注文、MT5ではポジション)のチケットが満たされ、取引サーバーのリターンコードが 返されます。
MT4とMT5のプロトコルの違いについて考える必要すらありません - インターフェースが必要なものをすべて提供します。
これらはすべてOOPの機能です。
すでに私のコードを示しましたが、もう一度示します。
これは、取引プロセッサーのインターフェースで、MT4とMT5の両方でまったく同じです。
ユーザーはこのインターフェイスを受け取るだけで、取引行動のあらゆる可能性を手にすることができるのです。彼はMT4かMT5かを知る必要すらありません。
そして、それはすべてOOPのおかげです。
典型的なケースでの使用例はありますか?
MQL4=MQL5という理論であれば、MQL4はMT5で動かすことができますし、その逆もしかりです。
典型的なケースでの使用例はありますか?
さて、ここで私の関数がTP-SLをトレードプロセッサーに変更するリクエストを送信したとします。
まず、EAパートオブジェクト - フォームのトレードアクション要求(ここでは、そのような要求の1つは、TP-SLを変更することです)。その後、取引処理装置に取引行為に関する情報を送信するすべての要求に対して ProceedRequestInto()関数が呼び出さ れます。
取引処理装置自体は以下のクラスのオブジェクトである。
つまり、プラットフォームによって、CTradeProcessorクラスはCMT5TradeProcessorクラスまたはCMT4TradeProceccorクラスから継承されます。
もちろん、OOPでなくても、スイッチやifdefの助けを借りれば、これらはすべて可能だ。しかし、私の考えでは、OOPアプローチの方が便利で明快です。主な理由は、エンティティを互いに分離することができ、大量のグローバル変数を取り除くことができるからです。
ちなみに、もうひとつの「OOPの響き」は、ちょうど保留中のオーダーを扱う追加機能にあります。MT4とMT5でチケットへの参照が異なるため、取引プロセッサが取引のチケットで動作し、不便です。そのため、オーダーインタフェースの子孫である共通クラスCOrderInfoCoreが存在するのです。このオブジェクトへのポインタだけをプロセッサに渡す方が、はるかに便利です。このように、プラットフォームに依存したフラグメントを回避することができるのです。
さて、ここで私の関数がTP-SLをトレードプロセッサーに変更するリクエストを送信したとします。
まず、EAパートオブジェクト - フォームのトレードアクション要求(ここでは、そのような要求の1つは、TP-SLを変更することです)。次に、取引処理装置に取引行為に関する情報を送信するすべての要求に対して ProceedRequestInto()関数が呼び出さ れます。
私のコードは、MT4とMT5で全く変わらずに動作します。
なぜ、異なる端末で動作させるのか?
複雑すぎて、本当の内情はわからないと思うのですが......。そして、その仕組みを理解しなければ、誰も使ってくれないと思うのですが......。MT5用に別バージョンを書いて、必要な時に差し込む方が楽なのでは?
George Merts:
しかし、私見では、OOPのアプローチの方がはるかに便利で明快です。 そして最も重要なことは、エンティティを互いに分離し、大量のグローバル変数を取り除くことができることです。
そこがポイントです。あらゆるものをあらゆるものから分離してしまうと、そのようなコードを扱うのがずっと難しくなります。もちろん、必要なすべての変数の現在値を知る必要がある場合、コードの適切なデバッグが不可能になることは言うまでもありません。
なぜ、異なる端末で動作させるのか?
なぜなら、私のメイン口座はMT4で開いており、ストラテジーテスターは MT5の方がはるかに優れているからです。
Freelanceでよくあるクライアントの要望、「MT4とMT5の両方で動くこと」ですが、それには理由があるということです。私自身はフリーランスで仕事をする理由がわからないのですが、そこで働いている人に、なぜ顧客がクロスプラットフォームを要求するのか聞いてみてはいかがでしょうか。
なぜ「内部で実際に行われていることを理解する」必要があるのでしょうか。プラットフォームに関係なく、アクションを実行する固定されたインターフェイスがあり、それを私たちは使っているのです。そして、そこにあるのは、低レベルのもので、どんな違いがあるのでしょうか?