Mercado de valores. Acciones. Rapidez en la ejecución de las órdenes comerciales. - página 14

 
Dmitriy Skub #:
Eso en cuanto a los gastos generales. ¿Y en términos de arbitraje?

en términos de costes, por supuesto.

pagarás por ponerte en corto con las acciones

 
Dmitriy Skub #:
Eso en cuanto a los gastos generales. ¿Y en términos de arbitraje?

El arbitraje clásico, sí:

Comprar(no vender) acciones y, simultáneamente, vender futuros del tamaño de una acción.

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


Si se pone en corto con una acción, Opener encenderá el contador al 23% anual.
 

Pero me pregunto qué pasará si request.action = TRADE_ACTION_PENDING; se sustituye por request.action = TRADE_ACTION_DEAL en la estructura de 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);
}


¿Se ejecutará la ordenmás rápido o no?

 
prostotrader TRADE_ACTION_PENDING; se sustituye por request.action = TRADE_ACTION_DEAL en la estructura de Stock;



¿Se ejecutará la ordenmás rápido o no?

Si especifica el precio actual del mercado, no será más rápido. Pero pueden producirse deslizamientos. De todos modos, lo he observado en los abridores de demostración.

 
Alexey Viktorov #:

Si cotiza al precio actual del mercado, no creo que vaya a ir más rápido. Pero pueden producirse deslices. Al menos, lo he observado en el modo de demostración.

TRADE_ACTION_PENDING - establece una orden comercial para la ejecución de una operación en las condiciones especificadas (orden pendiente )

TRADE_ACTION_DEAL - establece una orden comercial para la ejecución inmediata de una operación con los parámetros especificados (poner una orden de mercado)

Parece que la orden TRADE_ACTION_DEAL debería ejecutarse más rápido.

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

TRADE_ACTION_PENDING - Colocar una orden para ejecutar una operación en las condiciones especificadas (orden pendiente )

TRADE_ACTION_DEAL - establece una orden comercial para la ejecución inmediata de una operación con los parámetros especificados (orden de mercado de venta)

Parece que la orden TRADE_ACTION_DEAL debería ejecutarse más rápido.

No hay manera de hacerlo sin una orden. Ejecución inmediata significa sólo al precio actual. Posteriormente, podemos obtener una lista de pedidos por el ID de la posición, pero las propiedades no serán todas. Ahora mismo no recuerdo qué más falta, pero desde luego no el precio del pedido.

Aquí tenemos una posición pendiente en la demo. Este código

/********************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)));
   }
 }/*******************************************************************/

Resultado

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

Esto no es forex...


Añadido:

Bueno sí, creo que no lo entendí bien de inmediato...

En este caso hay que entender que si se pone un precio igual al mejor precio de la ventana de mercado en una orden pendiente, equivale a poner una orden de mercado.

 
Alexey Viktorov #:

En este caso, debe entenderse que si se pone un precio igual al mejor precio del mercado, equivale a colocar una orden de mercado.

Esto es así si hay suficiente volumen en el mercado.

 
JRandomTrader #:

Esto es si hay suficiente volumen en el vaso.

Todo esto hay que comprobarlo en la vida real. Probablemente, si no hay suficiente volumen al mejor precio, se añadirá a partir del siguiente.

Pero si hablamos del trabajo del Asesor Experto, nada nos impide poner la condición de que, si no hay suficiente volumen en el mejor precio, podemos abrir el volumen actual y luego abrir el siguiente mejor precio con el volumen restante. Puedes hacer esto tantas veces como quieras en el bucle do while.

 
Alexey Viktorov #:

Todo esto hay que comprobarlo en la vida real. Es probable que si no hay suficiente volumen al mejor precio, se añada el siguiente mejor precio.

Pero si hablamos del trabajo del Asesor Experto, nada nos impide estipular que si no tenemos suficiente volumen al mejor precio, entonces abra el volumen actual y luego vuelva a abrir el siguiente mejor precio con el resto del volumen. Puedes hacerlo tantas veces como quieras en el bucle do while.

En el caso de que el volumen sea insuficiente, depende del tipo de llenado - para el RETORNO el límite con el remanente se fijará en el vaso.

Por cierto, si colocamos una orden de mercado con RETORNO, TRADE_ACTION_DEAL y precio cero entonces podemos ver otra transacción TRADE_TRANSACTION_REQUEST con TRADE_ACTION_PENDING y precio en la tablilla.

En cuanto al bucle sobre la barra - esto sólo funcionará para los de poco líquido, de lo contrario la velocidad no será suficiente. He escrito un scalper con speed squeeze, con envío asíncrono, evitando operaciones pesadas, trabajando con string y sin llamadas al historial en la medida de lo posible. Pero aún así, con mi ping de 10-12 ms, no puede seguir el ritmo del cristal.

 

Por extraño que parezca, pero funciona muchas veces más rápido con TRADE_ACTION_DEAL, salvo que el precio siempre será mejor,

a pesar de que está ajustado al máximo (mínimo) en la copa.


Razón de la queja: