偉大で恐ろしいMT4の永遠(または移行の戦略方法) - ページ 11

 
secret:
事前に発注している。値段は触れるが、後でもっと悪い値段で約定する。

いや、指値の方がパフォーマンスが悪かったのなら、ブローカーをねじ伏せたり、対処すればいい。

そして、もし止まったとしても、それはそれでよいのです。プラグインでチェックするだけでなく、どこかでオーダーを出力するのであれば、20~30msは十分許容範囲です。

そして、ダニが何匹いたか......それはまったく関係ない。

 
Andrei Trukhanovich:

ドル建て手数料をドル建てでカウントする場合、どのような効果があるのでしょうか?

不思議なことに、口座の通貨に影響があります。どうやら、現在の為替レートではなく、固定レートらしい。さらにロットが小さい場合は四捨五入。

 

自分で何とかしなければと思い、非常に再現性の高い例が生まれ、オーダーの作業のしやすさがよくわかりました。


そこで、古典的なOnTickモードで動作するEAを実行することを想像してみましょう。OnTickは端末の環境の状態によっていつでも発生する可能性があるため、EAが何を見るのかが興味深いところです。そこで、Expert Advisor onTickが遭遇しうる状態をピックアップすると、以下のようになります。

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTradeTransaction( const MqlTradeTransaction&, const MqlTradeRequest&, const MqlTradeResult& )
{
  static int i = 0;
  
  Print(i++);
  
  if (HistorySelect(0, INT_MAX))
    Print(TOSTRING(PositionsTotal()) + TOSTRING(OrdersTotal()) + TOSTRING(HistoryDealsTotal()) + TOSTRING(HistoryOrdersTotal()));
        
  Print("----------------");
}

このコードは、単純に現在のポジション/注文の 数と、クローズされた取引/注文の数を表示するものです。


それを実行して、手動でポジションをオープンしてクローズするだけです。それ以外には何もない。以下のようなプリントアウトがあります(実行ごとに変わる可能性があります)。

        // Открываем позицию руками.

        0
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        1
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        2
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        3
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        4
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        5 // Открывающий позицию ордер исчез полностью - нет среди живых и мертвых.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        6 // Открылась позиция, но нет соответствующей ей сделки.
        PositionsTotal() = 1 OrdersTotal() = 0 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 26 
        ----------------
        7
        PositionsTotal() = 1 OrdersTotal() = 0 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------

        // Закрываем позицию руками.
        8 // Позиция и закрывающий ее ордер.
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        9
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        10
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        11
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        12 // Позиция закрыта, но закрывающий ее ордер продолжает висеть.
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 26 
        ----------------
        13 // Закрывающий позицию ордер полностью исчез - нет среди мертвых/живых.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 26 
        ----------------
        14
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 26 
        ----------------
        15
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 27 
        ----------------

OnTick Expert Advisorは、これらの16の状況のいずれかに遭遇する可能性があり、上に述べたような興味深い状況もあります。

わざと例を拾ったわけではないんです。ただ、実行し、その結果を掲載しました。ローンチは他にも面白いバリエーションを出すことができます。


自分のやっていることがよくわかったので、結果をコメントすることができました(1つのシングルポジションを開き、手で閉じました)。

それを知らないExpert Advisorは、どのように感じるのでしょうか。ここでは、アカウント上で複数のExpert Advisorが並行して動作していることを想像してみましょう。上記のような状況の共生から生まれる混乱の分析のしやすさは、当然のことだと思います。


簡潔なコードを添付しますので、どなたでも再現可能です。

 
fxsaber:

自分で何とかしなければと思い、非常に再現性の高い例が生まれ、オーダーの作業のしやすさがよくわかりました。


そこで、古典的なOnTickモードで動作するEAを実行することを想像してみましょう。OnTickは端末の環境の状態によっていつでも発生する可能性があるため、EAが何を見るのかが興味深いところです。そこで、Expert Advisor onTickが遭遇しうる状態をピックアップすると、以下のようになります。

このコードは、単純に現在のポジション/注文の 数と、クローズされた取引/注文の数を表示するものです。


それを実行して、手動でポジションをオープンしてクローズするだけです。それ以外には何もない。以下のようなプリントアウトがあります(実行ごとに変わる可能性があります)。

OnTick Expert Advisorは、これらの16の状況のいずれかに遭遇する可能性があり、上に述べたような興味深い状況もあります。

わざと例を拾ったわけではないんです。ただ、実行し、その結果を掲載しました。ローンチは他にも面白いバリエーションを出すことができます。


自分のやっていることがよくわかったので、結果をコメントすることができました(1つのシングルポジションを開き、手で閉じました)。

それを知らないExpert Advisorは、どのように感じるのでしょうか。ここでは、アカウント上で複数のExpert Advisorが並行して動作していることを想像してみましょう。上記のような状況の共生から生まれる混乱の分析のしやすさは、当然のことだと思います。


簡潔なコードを添付しますので、どなたでも再現することができます。

OnTradeTransactionが何回呼び出され、どのタイミングで何を取得できるかを理解する必要があります。

取引注文の追加

新規オープンオーダーの追加

貿易取引注文の更新

未決済の注文を変更すること。この変更には、クライアント端末や取引サーバー側の明示的な変更だけでなく、発注状態の変更( ORDER_STATE_STARTED からORDER_STATE_PLACEDORDER_STATE_PLACED からORDER_STATE_PARTIAL など)も含まれます。

取引注文の削除

未決済注文の一覧から注文を削除します。注文は、取引依頼の結果、または約定(フィル)して履歴に移行した結果、未決済注文の一覧から削除されることがあります。

貿易取引取引追加

履歴にトレードを追加する。注文実行の結果、または口座残高操作の結果として実行されます。

取引情報更新

歴史の中の商いを変える。過去に実行した案件がサーバー上で変更される場合があります。例えば、外部取引システム(取引所)で取引内容を変更し、そこでブローカーが削除した場合などです。

取引削除

履歴からトランザクションを削除する。過去に約定した取引がサーバー上で削除される場合があります。例えば、ブローカーによって削除された外部取引システム(取引所)において、取引が削除された場合です。

取引履歴の追加

注文の執行または取消の結果、履歴に追加されること。

取引履歴の更新

注文履歴にある注文を修正すること。このタイプは、トレードサーバー側の機能拡張を目的としたものです。

取引履歴の削除

注文履歴から注文を削除すること。このタイプは、トレードサーバー側の機能拡張を目的としています。

取引位置

取引の執行に関係のないポジションを変更すること。このトランザクションタイプは、トレードサーバー側でポジションが変更されたことを示します。ポジションの出来高、始値、ストップロスやテイクプロフィットの水準は変更されることがあります。変更に関する情報は、OnTradeTransaction ハンドラを通じてMqlTradeTransaction 構造体に渡されます。取引によるポジションの変更(追加、変更、削除)は、TRADE_TRANSACTION_POSITION トランザクションの発生を引き起こしません。

貿易取引要求

取引要求がサーバーで処理され、その結果を受信したことを通知する。このタイプのトランザクションでは、MqlTradeTransaction 構造の 1 つのフィールド、type(トランザク ションタイプ)のみを分析する必要があります。OnTradeTransaction 関数の 2 番目と 3 番目のパラメータ(request と result)は、追加情報を得るために分析する必要があります。

 
Alexey Viktorov:

OnTradeTransactionが何回呼び出されて、どの時点で何を取得できるかを把握する必要があります。

なるべくわかりやすくしたつもりです。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

偉大で恐ろしい永遠のMT4(あるいは移行戦略の作り方)

fxsaber, 2021.05.03 12:48

つまり、OnTick EAは、上記でコメントした16の興味深い状況のいずれかに遭遇する可能性があるのです。

 
fxsaber:
なるべくわかりやすくしたつもりです。

OnTradeTransactionで 全て処理する場合、OnTick()は何の関係があるのでしょうか?

OnTradeTransaction を呼び出した理由を取得し、この呼び出しで利用可能なものを適宜処理する。
 
Alexey Viktorov:

OnTradeTransactionで 全て処理する場合、OnTick()はどうなるのか?

OnTradeTransaction を呼び出した理由を取得し、この呼び出しで利用可能なものを適宜処理します。

おそらくフォーラムのメンバーのどなたかが説明してくれるでしょう。私には効きません。

 
Alexey Viktorov:

OnTradeTransactionで 全て処理した場合、OnTick()はどうなるのか?

OnTradeTransaction を呼び出した理由を取得し、その呼び出しで利用可能なものを適宜処理します。

OnTickでは、絶対にこのようなおかしな ことはありません。ただ、OnTickで簡単に再現性のある例を作るのは難しいですOnTradeTransactionは 例として選ばれましたが、本質を変える ものではありません。

 
traveller00:

OnTickは、これらの変則的な部分を絶対にすべて クリアしています。ただ、OnTickで 簡単に再現性のある例を作るのは難しいです。OnTradeTransactionは 例として選ばれましたが、要点は変わり ません。

ドン・キホーテの真似をし続けろ...。

 
fxsaber:

нет среди живых и мертвых

この点をMT4Ordersレベルで回避できれば最高なのですが。

注文のバックアップは、残念ながら今行われています。もっとも、そのせいでしょう。