Uma negociação de futuros abre ao Last price, e não ao Bid or Ask. Isto é normal? - página 2

 

Roman e Alexey Viktorov, obrigado por sua ajuda.

Depois de abrir uma profissão, decidi simplesmente verificar se as distâncias reais e calculadas TP e SL são as mesmas. Se não coincidirem, eu tento redefini-los na função OnTrade(). Como resultado, as distâncias entre o preço realmente aberto e TP e SL tornam-se corretas. O que é surpreendente é que tal escorregamento é a norma para este símbolo. O código é acionado em quase todas as aberturas comerciais.

//+------------------------------------------------------------------+
//|                          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;
  }
//+------------------------------------------------------------------+
 
Bom tema. Obrigado e não o apague. Quando tentei a arbitragem, surgiram muitas perguntas que são respondidas aqui
 
Oleg Remizov:

Roman e Alexey Viktorov, obrigado por sua ajuda.

Depois de abrir uma profissão, decidi simplesmente verificar se as distâncias reais e calculadas TP e SL são as mesmas. Se não coincidirem, eu tento redefini-los na função OnTrade(). Como resultado, as distâncias entre o preço realmente aberto e TP e SL tornam-se corretas. O que é surpreendente é que tal escorregamento é a norma para este símbolo. O código é acionado em quase todas as aberturas comerciais.

Tente executar um negócio em uma ordem limite ao invés do preço de mercado, mas especifique o melhor preço Ask ao comprar ou o melhor preço Bid ao vender. O pedido deve ser executado imediatamente pelo preço indicado, a menos, é claro, que o Ask ou Bid mude durante este tempo.

 
Vitalii Ananev:

Tente executar a transação não de acordo com o mercado, mas por uma ordem limite, mas o preço na ordem indica o melhor preço Ask ao comprar ou o melhor preço Bid ao vender. O pedido deve ser executado imediatamente pelo preço indicado, a menos, é claro, que o Ask ou Bid mude durante este tempo.

As ordens de limite são bem executadas. Às vezes até mesmo a um preço melhor do que a oferta.

 
Oleg Remizov:

.... Mesmo às vezes a um preço melhor do que no formulário de inscrição.

Portanto, os preços mudaram.

Aqui está uma dica:) Com uma ordem limite, você pode abrir uma posição como se estivesse abrindo uma ordem de mercado, mas você também ajusta o deslizamento. Comerciantes Forex estão acostumados a colocar ordens limitadas abaixo do preço de licitação. E as ordens de venda limite devem ser colocadas acima do preço pedido. Você pode fazer um pedido limite para comprar ao preço pedido ou superior. Será executado pelo próximo melhor preço. Por exemplo, o preço de venda no mercado é de 5,8,10,20,35. O envio de uma ordem limite de compra a 10 iniciará uma negociação a 5. Se a ordem de segurança contiver uma mudança de preço e o melhor preço for 20, sua ordem não será executada, mas aparecerá nos piquetes a 10. Desta forma, limitamos o tamanho de um possível deslizamento.

 
Vitalii Ananev:

Portanto, os preços mudaram.

Deixe-me dar-lhe uma dica:) Com uma ordem limite, você pode abrir uma posição como se estivesse abrindo uma ordem de mercado, mas você também ajusta o deslizamento. Comerciantes Forex estão acostumados a colocar ordens limitadas abaixo do preço de licitação. E as ordens de venda limite devem ser colocadas acima do preço pedido. Você pode fazer um pedido limite para comprar ao preço pedido ou superior. Será executado pelo próximo melhor preço. Por exemplo, o preço de venda no mercado é de 5,8,10,20,35. O envio de uma ordem limite de compra a 10 iniciará uma negociação a 5. Se a ordem de segurança contiver uma mudança de preço e o melhor preço for 20, sua ordem não será executada, mas aparecerá nos piquetes a 10. Desta forma, limitamos o possível deslizamento.

Isto não é um "como fazer", mas o princípio da execução de câmbio. ))
É por isso que eu disse anteriormente ao Aleh, para entender como funcionam as ordens de troca.
Ao entender como eles funcionam, você pode melhorar a qualidade de seus negócios.

E aqui está uma dica para aqueles que trabalham em Quik.
Em Quik, você pode abrir posições dirigidas de forma diferente para o mesmo instrumento durante o dia.
Essa é uma boa))
 
Roman:

Não é um truque inteligente, é o princípio da execução de câmbio. ))
É por isso que eu disse anteriormente a Oleg, para entender como funcionam os pedidos de troca.
Entendendo como eles funcionam, você pode melhorar a qualidade de seus negócios.

Aqui está um truque inteligente para quem trabalha em Quik.
Em Quik, você pode abrir diferentes posições para um instrumento durante o dia.
Agora, este é um bom know-how).

Eu o escrevi como uma piada sobre este truque do dinheiro com um sorriso no final.

Mas eu não sabia sobre as posições multidirecionais no Quick. A troca permite que você faça isso?

 
Vitalii Ananev:

Escrevi isso como uma piada sobre o truque com uma cara sorridente no final.

Mas eu não sabia sobre as posições multidirecionais no QuickBooks. A troca permite que você faça isso?

Não sei quem o permite)) A troca ou os servidores de troca rápida.
As posições ordinárias podem ser mantidas até a compensação principal, na compensação serão fechadas, em volume igual.
Ou seja, se 2 são longos, 1 é curto, então 1 permanecerá muito tempo após a clareira.
De fato, durante o dia você pode consertar o prejuízo, mas não perceber, e se você espera um ressalto, você pode reduzir o prejuízo.
E se a reversão ocorrer, você pode obter o lucro do comércio. Em geral, em boas mãos, é uma boa ferramenta.

 
Roman:

Não sei quem lhe permite fazer isso )) A troca, ou os servidores de rapidie.
Posições divergentes podem ser mantidas até a clareira principal, na clareira elas serão fechadas, em volume igual.
Ou seja, se 2 são longos, 1 é curto, então 1 permanecerá muito tempo após a clareira.
De fato, durante o dia você pode consertar o prejuízo, mas não perceber, e se você espera um ressalto, você pode reduzir o prejuízo.
E se a reversão ocorrer, você pode obter o lucro do comércio. Geralmente, é uma boa ferramenta em mãos habilidosas.

Estou vendo. Eu não negocio intraday, apenas por muito tempo.

 
Oleg Remizov:

Especificação do instrumento comercial:

Em que mercado isso é negociado?