OnTradeTransaction処理 - ページ 5

 
fxsaber:

クレチン。

あなたのことかと思いました。

本人が望めば 解決する」なんて、どうしたんだ。"?

 
fxsaber:

おすすめ」で何十個も作るより、1つの記事で返信する方が楽だからです。

本人が望めば、きっと何とかなる。

以前は、私が望んでいた...しかし、あなたのコードは別物です。
 
Alexey Viktorov:
昔々、私がしたかったのは...。しかし、あなたのコードは、この世のものとは思えないものです。

この場合、MT4/5の知識が少しあれば大丈夫です。

 
fxsaber:

この場合、MT4/5の知識が少しあれば大丈夫です。

残念ながら、私はほとんど知らない。

前にも言ったが、お前はどの樽にも尻栓をするようにコードを出し入れしている。必要な人は昔から使っているし、宣伝している人もいる。しかし、あまり必要のないところでそれを押し付けるのは、単に下品なだけです。特に、小細工ではなく、mql5でプログラミングを理解し、入り込みたい人。

 
Alexey Viktorov:

残念ながら、私はほとんど知らない。

もう一回言ったろ、お前は商売のためにあらゆる樽にコードを突っ込んで、何の理由もなく。必要な人は昔から使っていて、中には宣伝している人もいる。しかし、あまり必要のないところでそれを押し付けるのは、単に下品なだけです。特に、小細工ではなく、mql5でプログラミングを理解し、入り込みたい人。

ほら、何か主張するときは、実践で何とか裏付けを取るのも悪くない。数ページの中でOnTradeTransactionの解決策は現れていない。そして、もしあれば、なぜ与えられた解がそうなっているのか、その逆ではないのかがすぐに明らかになるはずです。解答は論理を示すべきで、地獄を見るものではありません。プラグインを削除しても、ソースコードのロジックは1ビットも失われない。そして、その論理(考え方)だけを理解すればよく、それ以上は必要ない。

この 意見には賛成です。ロジックを理解したら、インクルードを全部捨てて、自分たちで作ってしまうんです。これはまさに提案されている方法です。インリュードではなく、解決策が求められているタスクがどのように機能するかをコードで示し、脅かさないようにすることです。

 

ここで、問題の根源に立ち返ります。そして、疑問が湧いてくる。

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

OnTradeTransaction処理

イリヤ・チャイルド さん 2019.02.07 20:08

こんばんは。

みんな、これを解決するのを手伝ってくれ。この問題はおそらく新しいものではないのですが、(実際にもフォーラムでも)明確な解決策は見つかっていません。

ターミナルで2種類のロボットを2種類の計測 器で動かしています。魔法はどこでも違うんです。ロボットは保留中の制限を置き、OnTradeTransaction 手続きで取引を検出し、この取引を使用して保留中のストップオーダーを置くことができます。

以下は、貿易取引に関するコードです。

case TRADE_TRANSACTION_DEAL_ADD:
        {
         drop_info2("TRADE_TRANSACTION_DEAL_ADD\r\n"+TransactionDescription(trans));
         if((trans.deal_type==DEAL_TYPE_BUY || trans.deal_type==DEAL_TYPE_SELL) && trans.order!=0)
           {
            if(getIsDealOfExpert(trans.deal)) //функция проверки принадлежности сделки к роботу
              {
               drop_info2("Сделка наша");
               analyzeFilledOrder(trans.order,trans.volume); //процедура по выставлению отложенных стоп ордеров
              }
           }
        }
      break;

これは、取引がロボットに属するかどうかをチェックする関数のコードです。

bool getIsDealOfExpert(ulong dealTicket)
     {
      if(HistoryDealSelect(dealTicket) && HistoryDealGetInteger(dealTicket,DEAL_MAGIC)==magic_number && HistoryDealGetString(dealTicket,DEAL_SYMBOL)==symbol)
         return true;
      else
         return false;
     }

これは、ストップオーダーを保留する手順のコードです。

void analyzeFilledOrder(ulong orderTicket,double volume)
  {
   bool isFindOrder=false;
   string fullComment;
   ENUM_ORDER_TYPE orderType;
   if(getIsOrderOfExpert(orderTicket,true)) //Если ордер из сделки уже в истории
     {
      fullComment=HistoryOrderGetString(orderTicket,ORDER_COMMENT);
      orderType=ENUM_ORDER_TYPE(HistoryOrderGetInteger(orderTicket,ORDER_TYPE));
      isFindOrder=true; //локальная переменная, если нашли в истории
     }
   if(!isFindOrder && getIsOrderOfExpert(orderTicket,false)) //Если не нашли ордер в истории и ордер есть не в истории
     {
      fullComment=OrderGetString(ORDER_COMMENT); 
      orderType=ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE));
      isFindOrder=true; //локальная переменная, если нашли не в истории
     }
   if(isFindOrder) //если хоть где-то нашли, то выставляем отложенные стоп ордера
     {
     //выставляем стоп ордера

以下は、履歴の中の注文と履歴の外の注文を検索する関数のコードです。

bool getIsOrderOfExpert(ulong OrderTicket,bool isHistory)
     {
      bool is_expert=false;
      //если ордер находится в истории
      if(isHistory)
        {
         if(HistoryOrderSelect(OrderTicket) && HistoryOrderGetInteger(OrderTicket,ORDER_MAGIC)==magic_number && HistoryOrderGetString(OrderTicket,ORDER_SYMBOL)==symbol)
            is_expert=true;
        }
      else
        {
         if(OrderSelect(OrderTicket) && OrderGetInteger(ORDER_MAGIC)==magic_number && OrderGetString(ORDER_SYMBOL)==symbol)
            is_expert=true;
        }
      return is_expert;
     }

端末に受信したトランザクションの情報を順番にログファイルに出力していくんだ。さて、デモ口座での取引で直面した問題があります。

トランザクションは、TRADE_TRANSACTION_ORDER_DELETE、TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_HISTORY_ADDの順で行われることがあるようです。この場合、ストップ注文は取引が成立した後に発注されないことが多い。これは、注文がすでに削除されているにもかかわらず、まだ履歴に追加されていないために起こるのでしょう。履歴にも端末にも、その取引からの注文が見つからないということです。疑わしいが,ロボットが全次元で注文を検索しても見つからなかった(isFindOrder=false)ため,ストップオーダーが発注されなかったというのが実情である。取引の順番は正しいが、注文がどこにもない場合がある。 いずれの場合も、ロボットは取引を正しく検出するが、注文を出すまでには至らない。ただし、正しく動作し、注文が出る場合もある

いろいろな方法を試したが、うまくいかない。今、考えているのは、注文を保留する手順の最初に1秒のインターバルを設けることです。他にどこを掘ればいいのかわからない。

あなたの経験やアイデアをお聞かせください。

ハイライトされたものと、次のフレーズをどう整合させればいいのだろう。

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

OnTradeTransaction処理

イリヤ・チャイルド さん 2019.02.07 20:20

モードがネットであることを付け加えるのを忘れていました。位置はどのロボットも同じです。つまり、あるロボットがポジションを買い、2番目のロボットが それを 買い、TRADE_TRANSACTION_DEAL_ADDイベントが逆順にやってきて、結局1番目のロボットはそれを見ることができなかったのです。

はい、そして私は論理的に取引から注文のコメントを取得する必要があり、位置はここではあまり役に立ちません。

誤字に注意するのはやめよう、一方が買ったのはもう一方が買った...。要はネッティングアカウントタイプで1つのシンボルに2つのEAが動作しているようなのですが・・・。それとも、私が何か理解していないのでしょうか?

 
Alexey Viktorov:

誤字に注意するのはやめよう、一方が買ったのはもう一方が買った......。要は口座型ネットで2つのEAが同じ商品で動いているように見えるのですが...。それとも、私が何か理解していないのでしょうか?

1つのネットのシンボルに複数のEAがあるのは普通です。例えば、網目のもの。つまり、ネッティング・ポジションがゼロでも、SLとTPが2つあることは十分あり得るのです。問題は上記のように明確に定式化されている。

 
fxsaber:

1つの網タイツに複数のEAがあるのは当たり前。例えば、ネッティングポジションなど。ですから、ネッティングポジションがゼロでも、SLが2つ、TPが2つあることは十分あり得るのです。問題は上記のように明確に定式化されている。

私たちは何でも推測することができます。運輸支局長」の話を聞いてみたい。何しろ、彼の書き込みを引用したのですから。

 
Alexey Viktorov:

作りたい放題です。輸送担当者の話を聞きたい。引用したのは私です。

ボスは "威圧 "されたので、もう現れないと思います :)

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

よくわからないんですけど。以下は私のトランザクション処理です。

取引における注文の状況について。私が自分で作ったものではないことは分かっているはずです。すべての deal_add トランザクションで、これは注文のステータスとなります。成行注文であり、以前は保留注文であったことにご注意ください。

今度は別の部分で混乱が起きています。deal_addのトランザクションが飛んできて、ポジションが表示されず、存在しないポジションのpendingが置かれた。

追加されました。

Deal_add トランザクションが送信されたが、ポジションは発注されておらず、存在しないポジションに対する保留注文が発注された。取引種類は「売り」、注文種類は「買い」です。当初はSell_limitで制限していましたが

どうやら、古い情報がどこかでクリアされていないか、初期化されていない情報が取られているようです。

deal_addをした場合、その注文は通常すでに履歴に残っているか、すでに削除されているが、まだ履歴に現れていない状態です。

注文が残っていて、その後、発注済みの状態になることもありますが。

しかし、このタイミングでは到底無理です。

注文や ストーリーが選択されている 箇所で、それらが実際に選択されていることを確認する。