Uno scambio di futures si apre al Last price, non al Bid o Ask. È normale? - pagina 2

 

Roman e Alexey Viktorov, grazie per il vostro aiuto.

Dopo aver aperto un trade ho deciso di controllare semplicemente se le distanze TP e SL reali e calcolate sono le stesse. Se non coincidono, provo a resettarli nella funzione OnTrade(). Di conseguenza, le distanze tra il prezzo aperto reale e TP e SL diventano corrette. Ciò che è sorprendente è che tale slittamento è la norma per questo simbolo. Il codice viene attivato quasi ad ogni apertura di trade.

//+------------------------------------------------------------------+
//|                          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;
  }
//+------------------------------------------------------------------+
 
Buon argomento. Grazie e non cancellatelo. Quando ho provato l'arbitraggio, sono venute fuori un sacco di domande che trovano risposta qui
 
Oleg Remizov:

Roman e Alexey Viktorov, grazie per il vostro aiuto.

Dopo aver aperto un trade ho deciso di controllare semplicemente se le distanze TP e SL reali e calcolate sono le stesse. Se non coincidono, provo a resettarli nella funzione OnTrade(). Di conseguenza, le distanze tra il prezzo aperto reale e TP e SL diventano corrette. Ciò che è sorprendente è che tale slittamento è la norma per questo simbolo. Il codice viene attivato quasi ad ogni apertura di trade.

Cerca di eseguire un'operazione con un ordine limite invece del prezzo di mercato, ma specifica il miglior prezzo Ask quando compra o il miglior prezzo Bid quando vende. L'ordine dovrebbe essere eseguito immediatamente al prezzo indicato, a meno che, naturalmente, l'Ask o il Bid non cambino durante questo tempo.

 
Vitalii Ananev:

Cerca di eseguire la transazione non secondo il mercato, ma con un ordine limite, ma il prezzo nell'ordine indica il miglior prezzo Ask quando si compra o il miglior prezzo Bid quando si vende. L'ordine dovrebbe essere eseguito immediatamente al prezzo indicato, a meno che, naturalmente, l'Ask o il Bid non cambino durante questo tempo.

Gli ordini limite sono eseguiti bene. A volte anche ad un prezzo migliore dell'offerta.

 
Oleg Remizov:

.... Anche a volte ad un prezzo migliore che nel modulo di domanda.

Quindi i prezzi sono cambiati.

Ecco un consiglio:) Con un ordine limite si può aprire una posizione come se si stesse aprendo un ordine a mercato, ma si regola anche lo slippage. I trader di Forex sono abituati a piazzare ordini limite al di sotto del prezzo Bid. E gli ordini di vendita limite dovrebbero essere piazzati sopra il prezzo di Ask. Potete piazzare un ordine limite per comprare al prezzo di Ask o superiore. Sarà eseguito al prossimo miglior prezzo. Per esempio, il prezzo Ask sul mercato è 5,8,10,20,35. L'invio di un ordine limite di acquisto a 10 darà inizio a una negoziazione a 5. Se l'ordine di sicurezza contiene un cambio di prezzo e il miglior prezzo è a 20, il tuo ordine non sarà eseguito, ma apparirà nei picchetti a 10. In questo modo abbiamo limitato la dimensione del possibile slittamento.

 
Vitalii Ananev:

Quindi i prezzi sono cambiati.

Lasciate che vi dia un consiglio:) Con un ordine limite si può aprire una posizione come se si stesse aprendo un ordine a mercato, ma si regola anche lo slippage. I trader di Forex sono abituati a piazzare ordini limite al di sotto del prezzo Bid. E gli ordini di vendita limite dovrebbero essere piazzati sopra il prezzo di Ask. Potete piazzare un ordine limite per comprare al prezzo di Ask o superiore. Sarà eseguito al prossimo miglior prezzo. Per esempio, il prezzo Ask sul mercato è 5,8,10,20,35. L'invio di un ordine limite di acquisto a 10 darà inizio a una negoziazione a 5. Se l'ordine di sicurezza contiene un cambio di prezzo e il miglior prezzo è a 20, il tuo ordine non sarà eseguito, ma apparirà nei picchetti a 10. In questo modo abbiamo limitato il possibile slittamento.

Questo non è un "come fare", ma il principio di esecuzione dello scambio. ))
Ecco perché l'ho detto prima ad Aleh, per capire come funzionano gli ordini di scambio.
Comprendendo come funzionano, puoi migliorare la qualità dei tuoi affari.

Ed ecco un tiphack per chi lavora in Quik.
In Quik, puoi aprire posizioni diversamente dirette per lo stesso strumento durante il giorno.
Questa sì che è bella))
 
Roman:

Non è un trucco intelligente, è il principio dell'esecuzione dello scambio. ))
Ecco perché l'ho detto prima a Oleg, per capire come funzionano gli ordini di scambio.
Capendo come funzionano, puoi migliorare la qualità dei tuoi affari.

Ecco un trucco intelligente per chi lavora in Quik.
In Quik, puoi aprire diverse posizioni per uno strumento durante il giorno.
Ora, questo è un buon know-how).

L'ho scritto come uno scherzo su questo trucco dei soldi con uno smiley alla fine.

Ma non sapevo delle posizioni multidirezionali nel Quick. Lo scambio ti permette di fare questo?

 
Vitalii Ananev:

L'ho scritto come una battuta sul trucco con una faccina sorridente alla fine.

Ma non sapevo delle posizioni multidirezionali in QuickBooks. Lo scambio ti permette di fare questo?

Non so chi lo permette)) Lo scambio, o i server di scambio rapido.
Le posizioni ordinarie possono essere tenute fino alla compensazione principale, alla compensazione saranno chiuse, in volume uguale.
Cioè, se 2 sono lunghi, 1 è corto, allora 1 rimarrà lungo dopo la compensazione.
Infatti, durante il giorno puoi fissare la perdita, ma non realizzarla, e se ti aspetti un rimbalzo, puoi ridurre la perdita.
E se l'inversione si verifica, puoi ottenere il profitto dal commercio. In generale, in buone mani, è un buon strumento.

 
Roman:

Non so chi te lo lascia fare )) Lo scambio, o i server rapidi.
Le posizioni divergenti possono essere tenute fino al clearing principale, al clearing saranno chiuse, in uguale volume.
Cioè, se 2 sono lunghi, 1 è corto, allora 1 rimarrà lungo dopo la compensazione.
Infatti, durante il giorno puoi fissare la perdita, ma non realizzarla, e se ti aspetti un rimbalzo, puoi ridurre la perdita.
E se l'inversione si verifica, puoi ottenere il profitto dal commercio. In generale, è un buon strumento in mani abili.

Capisco. Non faccio trading intraday, solo long e long.

 
Oleg Remizov:

Specificazione dello strumento di negoziazione:

Su quale mercato viene scambiato?