先物取引は、BidやAskではなく、Last priceで始まる。これは正常なのか? - ページ 2

 

Roman さん、Alexey Viktorov さん、ありがとうございました。

取引開始後、実際のTPとSLの距離が計算上同じかどうかを簡単にチェックすることにしました。もし、一致しない場合は、OnTrade()関数でリセットするようにしています。その結果、実際の建値とTP、SLとの距離が正しくなる。驚くべきは、このようなスリッページがこのシンボルの常態であるということだ。このコードは、ほぼすべての取引開始時にトリガーされます。

//+------------------------------------------------------------------+
//|                          OnTrade()                               |
//+------------------------------------------------------------------+
void OnTrade()
  {
   if(HistoryDealSelect(last_trade_ticket))
     {
      // сделка выделилась успешно
      ulong pos_id = HistoryDealGetInteger(last_trade_ticket, DEAL_POSITION_ID);
      // идентификатор позиции сохранён
      if(HistorySelectByPosition(pos_id) && HistoryDealsTotal() == 1)
        {
         // история позиции сформирована
         // позиция состоит из одной сделки
         if(PositionSelectByTicket(pos_id))
           {
            // позиция выделена
            string symbol = PositionGetString(POSITION_SYMBOL);
            double pos_op = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = NormalizeDouble(PositionGetDouble(POSITION_TP), _Digits);
            double pos_sl = NormalizeDouble(PositionGetDouble(POSITION_SL), _Digits);
            long pos_type = PositionGetInteger(POSITION_TYPE);
            long pos_mag = PositionGetInteger(POSITION_MAGIC);
            // параметры позиции получены
            int tp = int(GlobalVariableGet(global_tp));
            int sl = int(GlobalVariableGet(global_sl));
            double calc_tp_price = 0;
            double calc_sl_price = 0;
            if(pos_type == POSITION_TYPE_BUY)
              {
               // покупка
               // расчёт корректных тп и сл
               if(tp > 0)
                  calc_tp_price = NormalizeDouble(pos_op + tp * _Point, _Digits);
               if(sl > 0)
                  calc_sl_price = NormalizeDouble(pos_op - sl * _Point, _Digits);
              }
            if(pos_type == POSITION_TYPE_SELL)
              {
               // продажа
               // расчёт корректных тп и сл
               if(tp > 0)
                  calc_tp_price = NormalizeDouble(pos_op - tp * _Point, _Digits);
               if(sl > 0)
                  calc_sl_price = NormalizeDouble(pos_op + sl * _Point, _Digits);
              }
            if(pos_tp != calc_tp_price || pos_sl != calc_sl_price)
              {
               // обнаружен факт проскальзывания
               // исправить тейк и стоп
               MqlTradeRequest request;
               MqlTradeResult result;
               ZeroMemory(request);
               ZeroMemory(result);
               request.action = TRADE_ACTION_SLTP;
               request.position = pos_id;
               request.symbol = symbol;
               request.magic = pos_mag;
               request.tp = calc_tp_price;
               request.sl = calc_sl_price;
               if(!OrderSend(request, result) || result.retcode != TRADE_RETCODE_DONE)
                  Print("Ticket:", pos_id, " Error: ", ResultRetcode(result));
              }
           }
        }
     }
   last_trade_ticket = 0;
  }
//+------------------------------------------------------------------+
 
良い話題です。ありがとうございます、そして削除しないでください。私がアービトラージに挑戦したとき、多くの疑問が浮かびましたので、ここに回答します。
 
Oleg Remizov:

Roman さん、Alexey Viktorov さん、ありがとうございました。

取引開始後、実際のTPとSLの距離が計算上同じかどうかを簡単にチェックすることにしました。もし、一致しない場合は、OnTrade()関数でリセットするようにしています。その結果、実際の建値とTP、SLとの距離が正しくなる。驚くべきは、このようなスリッページがこのシンボルの常態であるということだ。このコードは、ほぼすべての取引開始時にトリガーされます。

市場価格ではなく、指値注文で取引を実行しようとするが、買いの場合は最良のAsk価格、売りの場合は最良のBid価格を指定する。もちろん、この間にAskやBidが変化しない限り、指定された価格ですぐに注文が実行されるはずです。

 
Vitalii Ananev:

市場に従ってではなく、指値注文で取引を実行しようとするが、注文の価格は、買うときは最良のAsk価格、売るときは最良のBid価格を示す。もちろん、この間にAskまたはBidが変更されない限り、注文は指定された価格で直ちに執行されるはずです。

指値注文がよく通る。時には落札価格よりもいい値段で。

 
Oleg Remizov:

....時には申込書よりもお得な価格で。

だから、価格が変わったのです。

ここにヒントがあります:)指値注文では、成行注文と同じようにポジションを建てることができますが、スリッページの調整も行います。外国為替トレーダーは、Bid価格より低い価格で指値注文を することに慣れています。また、指値の売り注文は、Ask価格よりも高い位置に出す必要があります。Ask価格以上で買うための指値注文をすることができます。次善の価格で執行されます。例えば、市場のAsk価格が5,8,10,20,35であった場合。10で買いの指値注文を出すと、5で取引が開始されます。セキュリティ注文に価格変更が含まれており、ベストプライスが20の場合、注文は執行されず、10でピッキングに表示されます。こうすることで、起こりうるスリッページの大きさを限定しているのです。

 
Vitalii Ananev:

だから、価格が変わったのです。

ヒントを教えてあげよう:)指値注文では、成行注文と同じようにポジションを建てることができますが、スリッページの調整も行います。外国為替トレーダーは、Bid価格より低い価格で指値注文を することに慣れています。また、指値の売り注文は、Ask価格よりも高い位置に出す必要があります。Ask価格以上で買うための指値注文をすることができます。次善の価格で執行されます。例えば、市場のAsk価格が5,8,10,20,35であった場合。10で買いの指値注文を出すと、5で取引が開始されます。セキュリティ注文に価格変更が含まれており、ベストプライスが20の場合、注文は執行されず、10でピッキングに表示されます。こうすることで、起こりうるスリップを抑えることができました。

これは「ハウツー」ではなく、「交換実行の原則」です。))
だから、さっきアレに言ったのは、交換注文の仕組みを理解するためなんだ。
その仕組みを理解することで、取引の質を向上させることができるのです。


Quikでは、日中、同じ商品に対して異なる指示のポジションを建てることができます。
今のは良いですね))
 
Roman:

スマートな仕掛けではなく、交換実行の原理です。))
だから、さっきOlegに、為替注文の仕組みを理解しろと言ったんだ。
その仕組みを理解することで、取引の質を向上させることができます。


Quikでは、1つの楽器に対して日中異なるポジションを建てることができます。
さて、これは良いノウハウです(笑)。

このお金のからくりをジョークとして、最後にスマイルを添えて書きました。

しかし、Quickのマルチディレクションポジションは知りませんでした。取引所では、このようなことは可能ですか?

 
Vitalii Ananev:

最後にスマイルでトリックのジョークとして書きました。

でも、QuickBooksの多方向のポジションは知りませんでした。取引所では、このようなことは可能ですか?

誰が許可しているのか分かりませんが))取引所、またはクイックエクスチェンジサーバーです。
通常のポジションはメインクリアリングまで保有することができ、クリアリング時に同量で決済されます。
つまり、2がロング、1がショートの場合、クリア後も1はロングのままです。
実のところ、日中は損失を確定しても悟られないようにし、バウンスを期待すれば損失を減らすことができます。
そして、反転が起きれば、取引から利益を得ることができます。一般的に、良い使い方をすれば、良い道具になります。

 
Roman:

誰がそんなことさせてるんだろう ))取引所とか、クイックサーバーとか。
乖離したポジションは、メインクリアまで保有することができ、クリア時には同量で決済されます。
つまり、2がロング、1がショートの場合、クリア後も1はロングのままです。
実のところ、日中は損失を確定しても悟られないようにし、バウンスを期待すれば損失を減らすことができます。
そして、反転が起きれば、取引から利益を得ることができます。一般的には、熟練した人の手にかかると良い道具になります。

なるほど。私は日中取引はせず、ロングとロングのみです。

 
Oleg Remizov:

取引商品の仕様。

どのようなマーケットで取引されているのですか?

理由: