Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Boa tarde, Renat!
Você poderia comentar a seguinte situação em FORTS (real):
Há um preço no copo com um volume de 8. Este volume foi feito por dois correspondentes (4 com o mesmo preço)
Eu compro (vendo) este volume (8)usando um pedidolimite.
Acontece o seguinte:
1. Se o pedido for completamente preenchido, eu entro na OnTradeTransaction:
2. Se o pedido for preenchido com o volume do 2º correspondente, recebo o seguinte na OnTradeTransaction:
3. Se o pedido é preenchido com o volume do 1º correspondente, eu entro na OnTradeTransaction:
Por quê? Porque no segundo e terceiro casos a ordem foi parcialmente executada.
Escreveu um cheque nesta encomenda e aqui está o resultado:
Isto estava acontecendo na construção 1060 do terminal e na construção 1035 do servidor.
Após a noite (principal) de limpeza do terminal atualizado para 1085, mas I
parou a comercialização para descobrir a razão.
Em demonstração (1085 - 1085) Não consigo reproduzir o erro (sem mudanças rápidas no stack)
"Puxei para cima" a história de todas as minhas ordens.
O erro existe em 1035, 1060 e 1085 construções
No primeiro caso, a ordem é executada completamente em uma única operação e o saldo não executado não é removido, porque a ordem foi executada para o volume total. No registro, podemos ver uma das entradas que você mencionou:
No segundo caso, a ordem é parcialmente executada e o saldo não executado é removido. Isto acontece porque você definiu a política de execução de pedidos - ORDER_FILLING_IOC:
No seu caso, o pedido era para 8 lotes a 1222,1. No momento em que o pedido foi feito, o volume de contra pedidos a um preço não pior do que 1222,1 era de 4 lotes. Como resultado, 4 lotes foram executados como uma única operação (porque 4 lotes foram representados por uma ordem oposta). O restante do pedido foi retirado, ou seja, o pedido foi cancelado.
De acordo com os registros que você forneceu:
a ordem foi parcialmente executada:
Em seguida, o restante foi eliminado, ou seja, o pedido foi cancelado:
No primeiro caso, a ordem é executada completamente em uma única operação e o saldo não executado não é removido, porque a ordem foi executada para o volume total. No registro, podemos ver uma das entradas que você mencionou:
No segundo caso, a ordem é parcialmente executada e o saldo não executado é removido. Isto acontece porque você definiu a política de execução de pedidos - ORDER_FILLING_IOC:
No seu caso, o pedido era para 8 lotes a 1222,1. No momento em que o pedido foi feito, havia 4 lotes a um preço não pior do que 1222,1. Como resultado, 4 lotes foram executados como uma única operação (porque 4 lotes foram representados por uma ordem oposta). O restante do pedido foi retirado, ou seja, o pedido foi cancelado.
De acordo com os registros que você forneceu:
a ordem foi parcialmente executada:
Em seguida o saldo é removido, ou seja, o pedido é cancelado:
Então, como interpretar a DOCUMENTAÇÃO?
O problema é que naTradeTransaction não há mensagem sobre o comércio(TRADE_TRANSACTION_DEAL_ADD) quandoo ORDER_STATE_CANCELED!
Mas o comércio ERA !
Então como deve ser interpretada a DOCUMENTAÇÃO?
A ordem foi levantada. O cliente pode ser deixado ir para casa.
O problema é que naTradeTransaction não há mensagem de transação(TRADE_TRANSACTION_DEAL_ADD) quandoo ORDER_STATE_CANCELED !
Mas a transação ERA !
E onde você viu PARTIAL (essa é uma maneira de fazer as coisas)? Somente CANCELADO !
E na história é armazenado (ver foto) como CANCELADO
Boa tarde Renat!
Você acha correto que uma ordem parcialmente executada deva ser armazenada no histórico como uma ordemORDER_STATE_CANCELED,
e na OnTradeTransaction não deveríamos ter uma confirmação do negócio de uma ordem parcialmente executada?
Diga-me, a lógica da plataforma atual permanece como está ou você está pronto para fazer mudanças num futuro previsível?
Boa tarde Renat!
Você acha correto que uma ordem parcialmente executada deva ser armazenada no histórico como uma ordemORDER_STATE_CANCELED,
e na OnTradeTransaction não deveríamos ter uma confirmação do negócio de uma ordem parcialmente executada?
Diga-me, a lógica da plataforma atual permanece como está ou você está pronto para fazer mudanças num futuro previsível?
Você mesmo já verificou ou apenas reagiu às descrições incompletas de Mikalas? Afinal, o pedido era do COI.
Mais uma vez, verificamos o comportamento do nosso lado:
1. Instalou um consultor especializado do artigo Prescriptions of MQL5 - Processing TradeTransaction Events.
2. Fizemos um pedido do COI para o instrumento de baixo líquido SILV-3.15. O pedido foi feito para vender 11 lotes ao preço de 16,48, enquanto apenas 1 lote estava disponível a este preço.
Temos o seguinte:
No terminal:
Além do fato de a ordem ser "cancelada", podemos ver que 1 lote de 11 pedidos foi executado, o que é o comportamento correto.
No diário de bordo do Expert Advisor:
Isto é, a transação sobre o negócio veio na OnTradeTransaction(). Se a transação não viesse, você não a veria de forma alguma no terminal. Por favor, verifique se a transação TRADE_TRANSACTION_DEAL_ADD não chegou. Compare o comportamento de sua EA com o comportamento sugerido acima pelo Conselheiro Especialista.
Bom dia, Renat!
Você não garante a chegada do evento da OnTradeTransaction, portanto ele não veio (TRADE_TRANSACTION_DEAL_ADD)
E quando chegou o evento TRADE_TRANSACTION_HISTORY_ADD, o status do pedido foiORDER_STATE_CANCELED
Foi aí que as "pernas cresceram".
Na minha opinião, se a ordem (não importa como foi executada) foi parcialmente executada, então seu status
deve ser registrado na história como ORDER_STATE_PARTIAL