Ao investigar a execução de ordens TP, notei que algumas ordens TP foram criadas com um atraso significativo em relação aos carrapatos que as aceitavam.
O debriefing mostrou que esta situação se repete não apenas em corretores diferentes, mas também na situação em que a negociação é feita no Terminal, que está na mesma máquina que o Servidor de Negociação. Isto é, com um ping muito baixo e a única conta de negociação para o Trading Server.
Escrever a funçãoGetAcceptedTick nos permitiu investigar a fundo o problema e demonstrar de forma construtiva o problema.
Roteiro.
Portanto, o seguinte roteiro está localizado no trailer.
// Скрипт выводит самое длительное или конкретное акцептирование SL/TP-ордера. #property script_show_inputs input datetime inFrom = D'2020.01.01'; // С какого времени проверять ордера input ulong inTicket = 0; // Отдельно проверяемый тикет // Возвращает самый медленный TP/SL-ордер с определенной даты. ulong GetSlowestOrder( const datetime From ); // Распечатывает подробности акцепта SL/TP-ордера. void PrintOrder( const ulong MaxTicket ); void OnStart() { Print("\n\nStart " + MQLInfoString(MQL_PROGRAM_NAME) + TOSTRING(inFrom) + TOSTRING(inTicket) + "\n"); PrintOrder(inTicket ? inTicket : GetSlowestOrder(inFrom)); }
O resultado de executá-lo no MQ-Demo.
Total Orders (from 2020.09.01 00:00:00) = 58493, calculated = 439 Calculation time = 00:00:11.328, Performance = 38.0 orders/sec. ServerName: MetaQuotes-Demo Last Tick 2020.09.30 19:07:32.917 1.80181 1.80205 Accepted Tick 2020.09.30 19:07:32.716 1.80178 1.80202 Accepted Length = 357 ms. Order 726444166 ORDER_TYPE_BUY GBPAUD 2020.09.30 19:07:33.073 1.80206 ORDER_REASON_TP ORDER_STATE_FILLED 2020.09.30 19:07:33.082, Position created 2020.09.30 17:21:17.933, StopLevel = 0 Orders (2) before 726444166 with PositionID = 725926764: ------------------------ Checked Orders = 0 ------------------------
O roteiro afirma ter encontrado uma ordem TP e um tique que foi o gatilho para sua criação (destacado em cores no texto). Parece que se o preço atingiu o nível TP de uma posição aberta no servidor comercial (especialmente na demonstração), a ordem TP correspondente deve ser criada (não necessariamente executada) imediatamente. No entanto, nesta situação, não aconteceu imediatamente, mas após 357 milissegundos!
Deixe-me dizer com antecedência que mesmo um atraso de um milissegundo não é muito pouco. Chegar a tempo é um verbo significativo em algotrading.
Verificação.
Não vamos confiar cegamente no roteiro e verificar esta situação manualmente. Portanto, aqui está nosso pedido.
O correspondente carrapato de aceitação encontrado pelo roteiro pode ser visto aqui.
A seta mostra entre os carrapatos que nasceu a ordem TP. As capturas de tela mostram claramente que o roteiro estava certo e a criação da ordem TP aconteceu com um enorme atraso do lado do servidor comercial.
Resultado.
Agora existe uma ferramenta que mostra os valores de defasagem no lado do Trade Server quando se comercializa via níveis TP/SL. No momento, eles são enormes. E isto é definitivamente uma séria desvantagem da plataforma que precisa ser corrigida.
Infelizmente, é impossível registrar a aceitação de pedidos pendentes, uma vez que esta informação não está disponível no lado do Terminal. Mas quase invariavelmente, a presença de atrasos significativos no lado da ordem TP/SL não pode deixar de afetar os atrasos na execução das ordens. Como a causa parece ser da mesma natureza.
No total, a plataforma MT5 está atualmente 100% atrasada especificamente nestas situações. E requer correções até que haja zero de atraso.
Eu os encorajo a compartilhar os resultados de suas contas. Contribua para melhorar o MT5!
Incentive-o a compartilhar os resultados de suas contas. Ajude a melhorar o MT5!
Total Orders (from 2020.11.01 00:00:00) = 21725, calculated = 10465 Calculation time = 00:04:33.609, Performance = 38.0 orders/sec. ServerName: RannForex-Server Last Tick 2020.11.16 00:34:35.201 104.630 104.640 Accepted Tick 2020.11.16 00:34:06.309 104.627 104.639 Accepted Length = 28894 ms. Order 1715452 ORDER_TYPE_SELL USDJPY 2020.11.16 00:34:35.203 104.627 ORDER_REASON_TP ORDER_STATE_REJECTED 2020.11.16 00:34:35.217, Position created 2020.11.16 00:33:51.196, StopLevel = 0 Orders (4) before 1715452 with PositionID = 1715287: ----------------------- Last Tick 2020.11.16 00:34:06.309 104.627 104.639 Accepted Tick 2020.11.16 00:34:06.309 104.627 104.639 Accepted Length = 3 ms. Order 1715425 ORDER_TYPE_SELL USDJPY 2020.11.16 00:34:06.312 104.625 ORDER_REASON_TP ORDER_STATE_REJECTED 2020.11.16 00:34:06.327, Position created 2020.11.16 00:33:51.196, StopLevel = 0 Checked Orders = 1 ------------------------
28 segundo de atraso! Provavelmente é melhor entrar em contato com o corretor já nessas situações.
2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) ServerName: ICMarkets-MT5 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Last Tick 2020.11.24 23:00:49.327 1.33569 1.33570 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Accepted Tick 2020.11.24 23:00:49.327 1.33569 1.33570 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Accepted Length = 7 ms. 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Order 106887648 ORDER_TYPE_BUY GBPUSD 2020.11.24 23:00:49.334 1.33572 ORDER_REASON_TP ORDER_STATE_FILLED 2020.11.24 23:00:49.830, Position created 2020.11.24 22:57:47.071, StopLevel = 0 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) Orders (2) before 106887648 with PositionID = 106886713: 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) ------------------------
2020.11.25 02:47:22.624 CheckOrders (EURUSD,H1) ServerName: ICMarkets-MT5 2020.11.25 02:47:22.624 CheckOrders (EURUSD,H1) 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Last Tick 2020.11.18 12:44:37.354 1.18748 1.18748 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Accepted Tick 2020.11.18 12:44:37.354 1.18748 1.18748 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Accepted Length = 17 ms. 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Order 105637485 ORDER_TYPE_SELL EURUSD 2020.11.18 12:44:37.371 1.18749 ORDER_REASON_SL ORDER_STATE_FILLED 2020.11.18 12:44:37.476, Position created 2020.11.17 22:24:15.116, StopLevel = 0 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) Orders (2) before 105637485 with PositionID = 105516718: 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) ------------------------
2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) ServerName: OctaFX-Real 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Last Tick 2020.11.23 18:14:35.081 1.18108 1.18115 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Accepted Tick 2020.11.23 18:14:35.081 1.18108 1.18115 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Accepted Length = 11 ms. 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Order 8950107 ORDER_TYPE_SELL EURUSD 2020.11.23 18:14:35.092 1.18105 ORDER_REASON_TP ORDER_STATE_FILLED 2020.11.23 18:14:35.104, Position created 2020.11.23 18:11:38.678, StopLevel = 20 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) Orders (2) before 8950107 with PositionID = 8950014: 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) ------------------------
2020.11.25 02:54:37.912 CheckOrders (EURUSD,H1) ServerName: Pepperstone-MT5-Live01 2020.11.25 02:54:37.912 CheckOrders (EURUSD,H1) 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Last Tick 2020.09.03 01:00:02.426 106.199 106.199 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Accepted Tick 2020.09.03 01:00:02.426 106.199 106.199 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Accepted Length = 4 ms. 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Order 18982771 ORDER_TYPE_SELL USDJPY 2020.09.03 01:00:02.430 106.191 ORDER_REASON_TP ORDER_STATE_FILLED 2020.09.03 01:00:02.466, Position created 2020.09.02 22:57:47.081, StopLevel = 0 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) Orders (2) before 18982771 with PositionID = 18975080: 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) ------------------------
outra explosão cerebral do fxsaber. eu nem sei o que dizer.
Penso que a única solução viável é encontrar o gargalo junto com o corretor e, se possível, tentar consertá-lo.
para uma correção interna, você terá que
- suportar uma barragem de críticas dos desenvolvedores e provar que o atraso ocorreu (levando em conta coisas que você pode não saber, por exemplo, o hardware do servidor do corretor)
- convencê-lo de que é fundamental
- esperar por uma correção
- empurrando zelosamente o corretor para atualizar para a última construção, que pode ser muito mais difícil do que todos os itens anteriores.
ServerName: RannForex-Server
Accepted Length = 28894 ms.
Há uma forte suspeita aqui da tecnologia muito legal do corretor pelo qual você está negociando.
Algo está diminuindo a velocidade dos plugins de processamento de limites personalizados.
Aqui é onde há uma forte suspeita da tecnologia muito legal do corretor para o qual você está negociando.
... Os servidores do corretor podem ser o que você quiser, ou pode ser um link para um tópico sobre atrasos na seção de troca, só podemos adivinhar.
Para uma correção interna, você terá que
- Você terá que sofrer uma barragem de críticas por parte dos desenvolvedores e provar que o atraso ocorre (considerando as nuances que você pode não conhecer, por exemplo, o hardware da parte do servidor do corretor).
Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste
fxsaber, 2020.11.25 00:47
Resultado da sua execução no MQ-Demo.
Total Orders (from 2020.09.01 00:00:00) = 58493, calculated = 439 Calculation time = 00:00:11.328, Performance = 38.0 orders/sec. ServerName: MetaQuotes-Demo
Tem sido afirmado repetidamente em outro tópico que até mesmo o Terminal está desacelerando devido a um grande número de fatores. Como consequência, o Servidor Comercial muito mais complexo está fadado a desacelerar ainda mais. Eu ainda espero que a otimização algorítmica ainda seja possível. Mesmo um atraso de 5 ms já é muito ruim. Muito menos centenas de milissegundos.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Este ramo tratará de ordens que são criadas como resultado do acionamento de níveis SL/TP de posições abertas.
Escrevi uma função complicada, mas útil, de obter um tique que serve como gatilho para uma ordem SL/TP especificada.
A aplicação desta grande função é a razão para a criação deste ramo. Tenho certeza de que não peguei todos os bugs do código, mas para o bem da história e do entendimento de que é realmente difícil, eu dei uma lista completa.