Mercato azionario. Azioni. Velocità di esecuzione degli ordini commerciali. - pagina 14

 
Dmitriy Skub #:
Questo in termini di spese generali. E in termini di arbitraggio?

in termini di costi, ovviamente.

pagherete per la vendita allo scoperto delle azioni

 
Dmitriy Skub #:
Questo in termini di spese generali. E in termini di arbitraggio?

Arbitraggio classico, è:

Comprando(non vendendo) azioni e vendendo simultaneamente futures sulle dimensioni delle azioni.

exp_data.fut_equity = long(exp_data.fut_contr * exp_data.fut_contr_size);

=

exp_data.spot_equity = long(exp_data.spot_lot * exp_data.spot_lot_size);
exp_data.fut_equity = exp_data.spot_equity


Se vai allo scoperto su un titolo, Opener accende il contatore al 23% annuo.
 

Ma mi chiedo cosa succederà se request.action = TRADE_ACTION_PENDING; è sostituito da request.action = TRADE_ACTION_DEAL nella struttura Stock;


ulong SpotSetOrder(const long vol, const double price, const ulong magic, const int dir)
{
  MqlTradeRequest request = {}; 
  MqlTradeResult  result = {};
//--- Fill structure
  request.magic = magic;
  request.symbol = Symbol();
  request.volume = double(vol); 
  request.type_filling = ORDER_FILLING_RETURN;
  request.type_time = ORDER_TIME_DAY;
  request.action = TRADE_ACTION_PENDING;
  request.price = price;
  request.comment = "Отложенный ордер";
  if (dir == BUY) request.type = ORDER_TYPE_BUY_LIMIT;
   else
  if (dir == SELL) request.type = ORDER_TYPE_SELL_LIMIT;
   else return(0);
  if(OrderSend(request, result) == true)
  {
    if((result.retcode == TRADE_RETCODE_PLACED) || (result.retcode == TRADE_RETCODE_DONE))
    {
      return(result.order);
    }
    else Print("Ордер не размешен на Бирже!");
  }
  else Print("Ордер не отправлен!");
  return(0);
}


L'ordine sarà eseguitopiù velocemente o no?

 
prostotrader TRADE_ACTION_PENDING; è sostituito da request.action = TRADE_ACTION_DEAL nella struttura Stock;



L'ordine sarà eseguitopiù velocemente o no?

Se si specifica il prezzo attuale del mercato, non sarà più veloce. Ma possono verificarsi degli slittamenti. Comunque, l'ho osservato sui demo-openers.

 
Alexey Viktorov #:

Se state citando il prezzo attuale della tazza, non credo che andrà più veloce. Ma lo slittamento può accadere. Almeno, l'ho osservato nella modalità demo.

TRADE_ACTION_PENDING - imposta un ordine di compravendita per l'esecuzione di un'operazione alle condizioni specificate (ordine in sospeso )

TRADE_ACTION_DEAL - imposta un ordine di compravendita per l'esecuzione immediata di un'operazione a parametri specificati (mettere un ordine di mercato)

Sembra che l'ordine TRADE_ACTION_DEAL debba essere eseguito più velocemente.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
prostotrader #:

TRADE_ACTION_PENDING - Piazza un ordine di compravendita per eseguire una compravendita alle condizioni specificate (ordine in sospeso )

TRADE_ACTION_DEAL - imposta un ordine di compravendita per l'esecuzione immediata di un'operazione con i parametri specificati (ordine di mercato put)

Sembra che l'ordine TRADE_ACTION_DEAL debba essere eseguito più velocemente.

Non c'è modo di fare a meno di un ordine. Esecuzione immediata significa solo al prezzo corrente. In seguito, possiamo ottenere una lista di ordini per ID di posizione, ma le proprietà non saranno tutte. Non ricordo cos'altro manca in questo momento, ma certamente non il prezzo dell'ordine.

Qui abbiamo una posizione in sospeso sul demo. Questo codice

/********************Script program start function*******************/
void OnStart()
 {
  int posTotal = PositionsTotal();
  ulong posTicket = PositionGetTicket(0);
  long posID = PositionGetInteger(POSITION_IDENTIFIER);
  HistorySelectByPosition(posID);
  int ordTotal = HistoryOrdersTotal();
  for(int i = 0; i < ordTotal; i++)
   {
    ulong ordTicket = HistoryOrderGetTicket(i);
    Print("тикет ордера ", ordTicket,
          " время ", (datetime)HistoryOrderGetInteger(ordTicket, ORDER_TIME_SETUP), 
          " цена ", HistoryOrderGetDouble(ordTicket, ORDER_PRICE_OPEN),
          " установлен ", EnumToString((ENUM_ORDER_REASON)HistoryOrderGetInteger(ordTicket, ORDER_REASON)));
   }
 }/*******************************************************************/

risultato

2022.04.08 09:30:28.996 !00 (EURUSD,M1) тикет ордера 178273170 время 2022.03.21 18:28:09 цена 0.0 установлен ORDER_REASON_EXPERT

Questo non è forex...


Aggiunto:

Beh sì, credo di non aver capito subito...

In questo caso devi capire che se metti un prezzo uguale al miglior prezzo nella finestra di mercato in un ordine pendente, è equivalente a impostare un ordine a mercato.

 
Alexey Viktorov #:

In questo caso, bisogna capire che se si mette un prezzo uguale al miglior prezzo del mercato, è equivalente a piazzare un ordine di mercato.

Questo se c'è abbastanza volume nel mercato.

 
JRandomTrader #:

Questo se c'è abbastanza volume nel bicchiere.

Tutto questo deve essere verificato nella vita reale. Probabilmente, se non c'è abbastanza volume al miglior prezzo, sarà aggiunto da quello successivo.

Ma se stiamo parlando del lavoro dell'Expert Advisor, nulla ci impedisce di mettere la condizione che, se non c'è abbastanza volume al miglior prezzo, possiamo aprire il volume attuale e poi aprire il prossimo miglior prezzo con il volume rimanente. Potete farlo quante volte volete nel ciclo do while.

 
Alexey Viktorov #:

Tutto questo deve essere verificato nella vita reale. È probabile che se non c'è abbastanza volume al prezzo migliore, verrà aggiunto il prossimo miglior prezzo.

Ma se stiamo parlando del lavoro dell'Expert Advisor, nulla ci impedisce di stabilire che se non abbiamo abbastanza volume al miglior prezzo, allora apriamo il volume attuale e poi riapriamo il prossimo miglior prezzo con il resto del volume. Potete farlo quante volte volete nel ciclo do while.

In caso di volume insufficiente dipende dal tipo di riempimento - per RETURN il limite con il resto sarà impostato nella tazza.

A proposito, se piazziamo un ordine a mercato con RETURN, TRADE_ACTION_DEAL e prezzo zero allora possiamo vedere un'altra transazione TRADE_TRANSACTION_REQUEST con TRADE_ACTION_PENDING e prezzo alla stecca.

Per quanto riguarda l'anello sopra la barra - questo funzionerà solo per quelli a basso contenuto di liquido, altrimenti la velocità non sarà sufficiente. Ho scritto uno scalper con speed squeeze, con invio asincrono, evitando operazioni pesanti, lavorando con stringhe e senza chiamate alla storia il più possibile. Ma ancora, con il mio ping di 10-12 ms, non può tenere il passo con il vetro.

 

Per quanto strano possa sembrare, ma funziona molte volte più velocemente con TRADE_ACTION_DEAL, tranne che il prezzo sarà sempre migliore,

nonostante il fatto che sia impostato al massimo (minimo) nella tazza.


Motivazione: