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
Eu vi a foto. Tudo está claro para a bolsa de valores (com uma ordem de limite).
Para ordens forex e de mercado, você está perdendo o ponto. Tudo está claro.
É o mesmo com uma ordem de mercado (na Bolsa)
Adicionado por
Se enviarmos uma ordem de mercado, então quando recebermos o bilhete, vamos para a história com ele e
vamos até a história e vemos o que aconteceu com ela. Você também pode olhar a OnTradeTransaction
TRADE_TRANSACTION_HISTORY_ADD
Que tal "se a OrderSend devolveu o bilhete, ele é executado"?
Afinal, devemos correr para a história, ou esperar pelos eventos? Bem, é disso que se trata este fio!!!
Correto. O que eu não disse na "bilheteria"?
Eu até afixei um EA (para a Bolsa) como exemplo
Sim, no geral, não é muito tópico ) Mas obrigado pela contribuição.
Trata-se daquele OrderSend "síncrono" que termina antes que a EA veja seu impacto sobre a conta (sem comércio na história e sem mudança de posição).
E para funcionar corretamente, temos de encontrar muletas na forma de espera de um evento (um recurso muito útil! Mas não neste caso) ou pesquisar a história (também com espera).
De fato, há um problema para FOREX (eu dirigi o mesmo Expert Advisor em FOREX)
Mas no modo assíncrono (FOREX) funciona bem
É claro, todos receberão a mensagem. Mas eles não saberão que alguém não recebeu a mesma mensagem antes e não acionou um novo envio de pedidos.
Nova idéia.
Escreva um sincronizador EA. Uma vez feito o OrderSend, os dados são enviados a esta EA e aguardam a resposta da mesma.
Embora, a diferença com a variante slip seja os mesmos ovos. Tudo em resumo, sua variante é ótima, infelizmente.
O mesmo com uma ordem de mercado (na Bolsa)
Adicionado
Se uma ordem de mercado é enviada, uma vez que recebemos o bilhete, vamos com ela para a história e
ver o que aconteceu com ele.
OrderSend() é uma função absolutamente sincronizada - se um bilhete é recebido, tudo é executado.
Abaixo está um exemplo
Adicionados, e aqui estão os logs
https://www.mql5.com/ru/forum/38456/page85#comment_2888263
Agradeço pelo link. Mas minha pergunta foi um pouco diferente. Ao contrário, não foi uma pergunta, mas um argumento a favor da verificação do estado do pedido no local sem esperar que o evento OnTrade() fosse processado.
Você não deve ter olhado para o código do exemplo.
{
if(order_ticket>0)
{
if(OrderSelect(order_ticket))
{
RemoveOrderSyncMode(order_ticket);
}
else
{
Print(__FUNCTION__," Order not select! Ticket = ",order_ticket);
}
}
}
A exclusão da ordem em modo sincronizado (OrderSend()) deveria ter sido após a resposta de
Função SendOrserSyncMode, mas isso não aconteceu.
2016.10.14 02:18:20.292 Trades'3941932': pedido de cancelamento falhado #102956267 limite de compra 1,00 GBPUSD a 1,22374 [Pedido inválido]
Aqui é onde está o erro. De acordo com a documentação, caso tenhamos recebido um bilhete, o pedido foi colocado no sistema comercial,
Mas isso (em FOREX) não é feito, e a exclusão ocorreu no corpo da funçãoRemoveOrderAsyncMode, ou seja
após o recebimento de uma mensagem na OnTradeTransaction
Adicionado
Para responder à pergunta do iniciante superior, após enviar um pedido usando o OrderSend(),
o pedido pode ser tratado após o recebimento do evento na OntradeTransaction (OnTrade).
Parece que os desenvolvedores irão resolver o problema.
Adicionado
Agora eu olhei para FORTS - este problema também está lá
2016.10.17 18:45:19.081 Trades '1007932': accepted buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.081 Trades '1007932': buy limit 1.00 GAZR-12.16 at 12847 placed for execution
2016.10.17 18:45:19.091 Trades '1007932': order #52178167 buy limit 1.00 / 1.00 GAZR-12.16 at 12847 done in 17.440 ms
2016.10.17 18:45:19.091 Trades '1007932': failed cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847.00000 [Invalid request]
2016.10.17 18:45:19.091 Trades '1007932': cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.098 Trades '1007932': accepted cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.099 Trades '1007932': cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847 placed for execution in 7.215 ms
2016.10.17 18:45:19.074 TestOrders (GAZR-12.16,M1) OnChartEvent Send Order Sync mode
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) SendOrderSyncMode Order sent in sync mode
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) RemoveOrderSyncMode Order not sent (remove) in sync mode.
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_ADD
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_ADD
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_PLACED
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order plased done. Ticket = 52178167
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) RemoveOrderAsyncMode Order sent (remove) in async mode
2016.10.17 18:45:19.098 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.098 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order get ticket done. Ticket = 52178167
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_DELETE
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_HISTORY_ADD
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order remove done. Ticket = 52178167
Para responder à pergunta do comerciante de topo, após enviar um pedido usando o OrderSend(),
você pode operar com o pedido após receber o evento na OntradeTransaction (OnTrade)
No caso de dois EAs com o mesmo símbolo?
Sim, dois EAs sobre o mesmo símbolo.
{
ENUM_TRADE_REQUEST_ACTIONS action; // Тип выполняемого действия
ulong magic; // Штамп эксперта (идентификатор magic number)
ulong order; // Тикет ордера
string symbol; // Имя торгового инструмента
double volume; // Запрашиваемый объем сделки в лотах
double price; // Цена
double stoplimit; // Уровень StopLimit ордера
double sl; // Уровень Stop Loss ордера
double tp; // Уровень Take Profit ордера
ulong deviation; // Максимально приемлемое отклонение от запрашиваемой цены
ENUM_ORDER_TYPE type; // Тип ордера
ENUM_ORDER_TYPE_FILLING type_filling; // Тип ордера по исполнению
ENUM_ORDER_TYPE_TIME type_time; // Тип ордера по времени действия
datetime expiration; // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED)
string comment; // Комментарий к ордеру
ulong position; // Тикет позиции
ulong position_by; // Тикет встречной позиции
};
Eliminando as posições, ordens e negócios "errados".