Mercado de ações. Estoques. Rapidez na execução de ordens comerciais. - página 14

 
Dmitriy Skub #:
Isso é em termos de despesas gerais. Mas em termos de arbitragem?

em termos de custos, é claro.

você pagará pela redução do estoque

 
Dmitriy Skub #:
Isso é em termos de despesas gerais. E em termos de arbitragem?

Arbitragem clássica, é:

Comprar(de forma alguma vender) ações e simultaneamente vender futuros em tamanho de ação.

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 você tiver falta de estoque, o Opener ligará o medidor a 23% ao ano.
 

Mas o que acontecerá se o request.action = TRADE_ACTION_PENDING; for substituído pelo request.action = TRADE_ACTION_DEAL na estrutura de estoque;


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


A ordem será executadamais rapidamente ou não?

 
prostotrader TRADE_ACTION_PENDING; for substituído pelo request.action = TRADE_ACTION_DEAL na estrutura de estoque;



A ordem será executadamais rapidamente ou não?

Se você especificar o preço atual do mercado, ele não será mais rápido. Mas pode ocorrer um deslizamento. De qualquer forma, eu observei isso nos demo-abertos.

 
Alexey Viktorov #:

Se você estiver cotando o preço atual do mercado, não acho que ele irá mais rápido. Mas o escorregamento pode acontecer. Pelo menos, eu o observei no modo de demonstração.

TRADE_ACTION_PENDING - estabelecer uma ordem comercial para a execução de um negócio em condições especificadas (ordem pendente )

TRADE_ACTION_DEAL - estabelecer uma ordem de negociação para execução imediata de um negócio em parâmetros especificados (colocar uma ordem de mercado)

Parece que a ordem TRADE_ACTION_DEAL deve ser executada mais rapidamente.

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

TRADE_ACTION_PENDING - Colocar uma ordem comercial para executar uma negociação em condições especificadas (ordem pendente )

TRADE_ACTION_DEAL - estabelecer uma ordem de negociação para execução imediata de um negócio com parâmetros especificados (put market order)

Parece que a ordem TRADE_ACTION_DEAL deve ser executada mais rapidamente.

Não há como passar sem uma ordem. A execução imediata significa apenas ao preço atual. Mais tarde, podemos obter uma lista de pedidos por posição ID, mas as propriedades não serão todas. Não lembro o que mais está faltando no momento, mas certamente não o preço do pedido.

Aqui temos uma posição pendente sobre a demonstração. 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

Isto não é forex...


Adicionado:

Bem, sim, acho que não percebi logo...

Neste caso, você tem que entender que se você colocar um preço igual ao melhor preço na janela do mercado em uma ordem pendente, isso equivale a definir uma ordem de mercado.

 
Alexey Viktorov #:

Neste caso, deve ser entendido que se você colocar um preço igual ao melhor preço do mercado, é equivalente a colocar uma ordem de mercado.

Isto se houver volume suficiente no mercado.

 
JRandomTrader #:

Isto se houver volume suficiente no vidro.

Tudo isso tem que ser verificado na vida real. Provavelmente, se não houver volume suficiente ao melhor preço, ele será adicionado a partir do próximo.

Mas se estamos falando do trabalho do Expert Advisor, nada nos impede de colocar a condição de que, se não houver volume suficiente ao melhor preço, possamos abrir o volume atual e depois abrir o próximo melhor preço com o volume restante. Você pode fazer isso quantas vezes quiser enquanto estiver fazendo o loop.

 
Alexey Viktorov #:

Tudo isso tem que ser verificado na vida real. É provável que, se não houver volume suficiente ao melhor preço, o próximo melhor preço seja acrescentado.

Mas se estamos falando do trabalho do consultor especializado, nada nos impede de estipular que se não tivermos volume suficiente ao melhor preço, então abra o volume atual e depois reabra o próximo melhor preço com o restante do volume. Você pode fazer isso quantas vezes quiser enquanto faz o loop.

No caso de volume insuficiente depende do tipo de enchimento - para RETURN, o limite com o restante será estabelecido no copo.

A propósito, se colocarmos uma ordem de mercado com RETURN, TRADE_ACTION_DEAL e preço zero, podemos ver outra transação TRADE_TRANSACTION_REQUEST com TRADE_ACTION_PENDING e preço na ripa.

Quanto ao laço sobre a barra - isto só funcionará para os de baixa liquidez, caso contrário, a velocidade não será suficiente. Escrevi um escalper com aperto rápido, com envio assíncrono, evitando operações pesadas, trabalhando com cordel e sem acessar o histórico o máximo possível. Mas ainda assim, com meu ping de 10-12 ms, não consegue acompanhar o vidro.

 

Por mais estranho que possa parecer, mas funciona muitas vezes mais rápido com TRADE_ACTION_DEAL, exceto que o preço será sempre melhor,

apesar do fato de estar ajustado ao máximo (mínimo) no copo.