OnTradeTransaction処理 - ページ 9

 
JRandomTrader:

ロボットのアルゴリズムの観点からも虚位が必要で、開いたのなら閉じるべき。

最初の投稿の課題はもっと簡単で、グリッドの各ノードがそのSL/TPを閉じる指値注文のグリッドの操作を実装する必要があったことを付け加えておきます。

例えば、このような一方向性のEAは1つのアカウントで1つだけ動作し、他のEAは動作しない。しかし、ここでもイマジナリーポジションの話になってしまいます。


そして、問題提起は網の目だけではありません。生け垣でも同じことが言えます。ヘッジのExpert Advisorがいくつかあり、誰かがCloseByでいくつかのポジションをクローズしたところです。Expert Advisorがイマジナリーポジションで実装されている場合、このような崩壊はロジックを破壊するものではありません。


一般的に、これは仮想取引環境を通じて解決することができます。簡単に解決することができます。アルゴリズム・オフィスが取引所でTSポートフォリオを運用するのも、そのような方法です。

 
Alexey Viktorov:

物事を単純化すると、そうですね。同意見です。

この時点では、「運輸支局長」は問題点と自分の行動を完全に明らかにしていない。

ストップオーダーとはどういう意味ですか?ポジション全体なのか、このEAが扱っている部分だけなのか?

もちろん、EAが動作しているポジションの一部では、ストップ注文は売り/買いストップ、売り/買いリミットを保留しています。

これまで、OnTradeTransactionsの 落とし穴が非常に多いため、OnTradeに移行した方が良いと実感しています。

 
Илья Ребенок:

もちろん、ストップ注文は、特定のEAが扱うポジションの一部について、売り/買いのストップと売り/買いのリミットを保留することです。

これまでのところ、OnTradeTransactionsの 落とし穴が非常に多いため、OnTradeにした方が良いということが理解できました。

連動していることだけに注意してください。どっちが先でどっちが後か覚えてません。しかし、OnTradeTransactionsは追加のコードなしに少なくともいくつかの情報を持っているのに対し OnTradeはすべてを強制的に取得しなければ なりません。まず、どのイベントが関数のトリガーになったかを判断する必要があります...。

 

私はトランザクションキャッチャーを書きました - それは(トランザクションの種類に応じて 単純な処理がありますが)どこから何を判断するのに便利かもしれません - 注文や取引履歴への参照はありません(例えば、Expert Advisor IDを印刷するためのものです)。

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value 
   ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
   if(trans_type==TRADE_TRANSACTION_ORDER_ADD || trans_type==TRADE_TRANSACTION_ORDER_UPDATE || trans_type==TRADE_TRANSACTION_ORDER_DELETE ||
      trans_type==TRADE_TRANSACTION_HISTORY_ADD || trans_type==TRADE_TRANSACTION_HISTORY_UPDATE || trans_type==TRADE_TRANSACTION_HISTORY_DELETE)
     {
      Print("---");
      Print(EnumToString(trans_type));
      PrintFormat("%-15s: %d","order",trans.order);
      PrintFormat("%-15s: %s","symbol",trans.symbol);
      PrintFormat("%-15s: %s","order_type",EnumToString(trans.order_type));
      PrintFormat("%-15s: %s","orders_state",EnumToString(trans.order_state));
      PrintFormat("%-15s: %s","time_type",EnumToString(trans.time_type));
      if(trans.time_type==ORDER_TIME_SPECIFIED || trans.time_type==ORDER_TIME_SPECIFIED_DAY)
        {
         PrintFormat("%-15s: %s","time_expiration",TimeToString(trans.time_expiration,TIME_DATE|TIME_SECONDS));
        }
      else
        {
         PrintFormat("%-15s: %s","time_expiration","---");
        }
      PrintFormat("%-15s: %.8f","price",trans.price);
      if(trans.order_type==ORDER_TYPE_BUY_STOP_LIMIT || trans.order_type==ORDER_TYPE_SELL_STOP_LIMIT)
        {
         PrintFormat("%-15s: %.2f","price_trigger",trans.price_trigger);
        }
      else
        {
         PrintFormat("%-15s: %s","price_trigger","---");
        }
      PrintFormat("%-15s: %.8f","price_sl",trans.price_sl);
      PrintFormat("%-15s: %.8f","price_tp",trans.price_tp);
      PrintFormat("%-15s: %.2f","volume",trans.volume);
      if(trans_type!=TRADE_TRANSACTION_ORDER_ADD && (trans.order_type==ORDER_TYPE_BUY || trans.order_type==ORDER_TYPE_SELL))
        {
         PrintFormat("%-15s: %d","position",trans.position);
        }
      else
        {
         PrintFormat("%-15s: %s","position","---");
        }
      if(trans.order_type==ORDER_TYPE_CLOSE_BY)
        {
         PrintFormat("%-15s: %d","position_by",trans.position_by);
        }
      else
        {
         PrintFormat("%-15s: %s","position_by","---");
        }
     }
   else if(trans_type==TRADE_TRANSACTION_DEAL_ADD || trans_type==TRADE_TRANSACTION_DEAL_UPDATE || trans_type==TRADE_TRANSACTION_DEAL_DELETE)
     {
      Print("---");
      Print(EnumToString(trans_type));
      PrintFormat("%-15s: %d","deal",trans.deal);
      PrintFormat("%-15s: %d","order",trans.order);
      PrintFormat("%-15s: %s","symbol",trans.symbol);
      PrintFormat("%-15s: %s","deal_type",EnumToString(trans.deal_type));
      PrintFormat("%-15s: %.8f","price",trans.price);
      PrintFormat("%-15s: %.8f","price_sl",trans.price_sl);
      PrintFormat("%-15s: %.8f","price_tp",trans.price_tp);
      PrintFormat("%-15s: %.2f","volume",trans.volume);
      PrintFormat("%-15s: %d","position",trans.position);
      if(trans.order_type==ORDER_TYPE_CLOSE_BY)
        {
         PrintFormat("%-15s: %d","position_by",trans.position_by);
        }
      else
        {
         PrintFormat("%-15s: %s","position_by","---");
        }
     }
   else if(trans_type==TRADE_TRANSACTION_POSITION)
     {
      Print("---");
      Print(EnumToString(trans_type));
      PrintFormat("%-15s: %s","symbol",trans.symbol);
      PrintFormat("%-15s: %s","deal_type",EnumToString(trans.deal_type));
      PrintFormat("%-15s: %.8f","price",trans.price);
      PrintFormat("%-15s: %.8f","price_sl",trans.price_sl);
      PrintFormat("%-15s: %.8f","price_tp",trans.price_tp);
      PrintFormat("%-15s: %.2f","volume",trans.volume);
      PrintFormat("%-15s: %d","position",trans.position);
     }
   else if(trans_type==TRADE_TRANSACTION_REQUEST)
     {
      Print("---");
      Print(EnumToString(trans_type));
     }
  }
 
Илья Ребенок:

fxsaber お手本ありがとうございます。

ただ、これは本当の例ではなく、元の問題を完全に解決するためのものです。

 
Илья Ребенок:

もちろん、ストップ注文は、特定のEAが扱うポジションの一部について、売り/買いのストップと売り/買いのリミットを保留することです。

これまでのところ、OnTradeTransactionsの 落とし穴が非常に多いため、OnTradeにした方が良いということが理解できました。

これからもよろしくお願いします :)

ちょっとしたヒント MqlTradeTransaction &trans -フィールドのみが関連 します。

貿易取引に関するフィールド

取引処理に関連する貿易取引(TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_TRANSACTION_DEAL_DELETE)について、MqlTradeTransaction構造体に以下のフィールドが記入されています。

  • deal - トレードチケット。
  • order - 取引が執行された注文書。
  • シンボル - 取引の金融商品の名前。
  • type - 貿易取引の種類。
  • deal_type - 取引の種類。
  • price - 取引が実行された価格。
  • price_sl - 価格 ストップロス(注文に指定されている場合、その注文に基づいて取引が実行されます)。
  • price_tp - テイクプロフィットの価格(注文で指定された場合、それに基づいて取引が実行されます)。
  • volume - ロット単位での取引量。
  • ポジション - 取引の結果、オープン、変更、クローズされたポジションのチケット。
  • position_by - 反対側の位置のチケットです。あるポジションを反対側のポジションで決済する取引(アウトバイ)に対してのみ記入されます。

そして、MqlTradeResult &resultをご覧ください。

でも、今は1000行のコードがあるじゃないですか

 
prostotrader:

これからもよろしくお願いします :)

ちょっとしたヒント MqlTradeTransaction &trans -フィールドのみが関連 します。

trade_transaction_deal_*.

取引処理に関連する貿易取引(TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_TRANSACTION_DEAL_DELETE)について、MqlTradeTransaction構造体に以下のフィールドが記入されています。

  • deal - トレードチケット。
  • order - 取引が執行された注文書。
  • シンボル - 取引の金融商品の名前。
  • type - 貿易取引の種類。
  • deal_type - 取引の種類。
  • price - 取引が実行された価格。
  • price_sl - 価格 ストップロス(注文に指定されている場合、その注文に基づいて取引が実行されます)。
  • price_tp - テイクプロフィットの価格(注文で指定された場合、それに基づいて取引が実行されます)。
  • volume - ロット単位での取引量。
  • ポジション - 取引の結果、オープン、変更、クローズされたポジションのチケット。
  • position_by - 反対側の位置のチケットです。あるポジションを反対側のポジションで決済する取引(アウトバイ)に対してのみ記入されます。

そして、MqlTradeResult &resultをご覧ください。

でも、今は1000行のコードがあるじゃないですか

もちろん、エゴが炸裂していることは理解していますよ。経験、すべて...

しかし、私がここに来たのは、ちょっとした皮肉ではなく、助けを求めてのことでした。もう少し上を見ると、deal_addの未入力フィールドのパースでミスをしたことに同意しています。

私はより建設的な助けをあなたに感謝する、私は自分自身を "クソ "することができます)私は建設的な批判を受け入れる。

And look at MqlTradeResult &result " について。

ヘルプによると、貿易取引の結果はTRADE_TRANSACTION_REQUESTのみ で、このタイプの取引のみで分析する必要があるとのことです。

 

変な認識をしていますね。

私は「誰かをボロクソに言う」なんて夢にも思いません。それはあなたの人生に対する認識であり、あなた自身もよく使う言葉なのでしょう。

あなた自身もよく使っているのではないでしょうか。

私ではなくfxsaber(a)が、ほとんどすべてのトピックで自分のことを押し付けてくるからです。

しかし、彼自身は実際のマーケットで取引していないし、もちろんFORTSでもない。

同じ問題でも、シンプルな解決策と複雑な解決策があります。

質問内容から察するに、あなたは初心者ですね。

しかし、諺にもあるように、「私たちは安易な道を求めない」のです

OnTradeTransaction 機能は、特に以下の点を簡素化するために設計されています。

"ロボット開発でプログラマーが使う命、でも古参は使いたがらない。

なぜなら、彼らはOnTradeに慣れていて、それを動作させるためにたくさんのコードを 書かなければならないからです。

注文は 頭であって、契約ではない!というのは、もうお分かりですね。

最初の注文の数量が1ではなく、2、10だった場合、どうするのですか?

保留注文を設定しても、それを「厳密に」制御することはできないし、ましてや取引を制御することもできないということです

きっちり」コントロールすることはできないので、何か取引をする場合はなおさらですペンディングオーダーには多くの落とし穴があります。

しかし、あなたは安易な方法を選び、怪しげな既成の解決策を手に入れようとしています。

しかし、あなたは自分で考えようとせず(ヒントを出して)、楽な道を選んでしまった。

がんばってください、私はもう関係ありません。

 
prostotrader:

変な認識をしていますね。

私は「誰かをボロクソに言う」なんて夢にも思いません。それはあなたの人生に対する認識であり、あなた自身もよく使う言葉なのでしょう。

あなた自身もよく使っているのではないでしょうか。

私ではなくfxsaber(a)が、ほとんどすべてのトピックで自分のことを押し付けてくるからです。

しかし、彼自身は実際のマーケットで取引していないし、もちろんFORTSでもない。

同じ問題でも、シンプルな解決策と複雑な解決策があります。

質問内容から察するに、あなたは初心者ですね。

しかし、諺にもあるように、「私たちは安易な道を求めない」のです

OnTradeTransaction機能は、特に、以下のような目的で設計されています。

ロボット開発のプログラマーにとっての "命" でも、使いたくないのは古参の人たち。

なぜなら、彼らはOnTradeに慣れていて、それを動作させるためにたくさんのコードを 書かなければならないからです。

注文は 頭であって、契約ではない!というのは、もうお分かりですね。

最初の注文の数量が1ではなく、2、10だった場合、どうするのですか?

保留注文を設定しても、それを「厳密に」制御することはできないし、ましてや取引を制御することもできないということです

きっちり」コントロールすることはできないので、何か取引をする場合はなおさらですペンディングオーダーには多くの落とし穴があります。

しかし、あなたは安易な方法を選び、怪しげな既成の解決策を手に入れようとしています。

しかし、あなたは自分で考えようとせず(ヒントを出して)、楽な道を選んでしまった。

がんばってください、私はもう関係ありません。

まず、既成のソリューションは使わないというところから始めましょう。あなたが何を作ってくれたのか知りませんが、私はこのスレッドの解決策を何一つ使っていませんし(役に立つ知識は抽出しましたが)、今も実験していろいろと考えているところなのです。一般的に、あなたの投稿を見ると、あなたは他人の後追いするのが好きなようですね。悪気はないんです。

受注量については、どうということはない。本当に実行されるボリュームが何なのかを判断できる取引です。部分的な注文の実行を適切なタイプでキャッチするよりも簡単だと思います。また、あるトピックスでは、「ポジションが約定したことを確認できるのはディールだけ」という指摘がありました。

 
Илья Ребенок:

そもそも、私は既成のソリューションは使いません。あなたが何を作ってくれたのか知りませんが、私はこのスレッドにある解決策を何一つ使っておらず(役に立つことは学べましたが)、まだ実験中、解明中です。一般的に、あなたの投稿を見ると、あなたは他人の後追いをするのが好きなようですね。悪気はないんです。

受注量については、どうということはない。本当に実行されるボリュームが何なのかを判断できる取引です。適切な注文タイプに従って部分的な注文の実行をキャッチするよりも簡単だと思います。あるトピックスで、「ポジションが実行されたことを確認できるのはディールだけ」という指摘がありました。

読み方を忘れてしまったのでしょうか?

"幸運を祈る" "私はもう関係 ない"