O MT4Orders é do estilo do MT4 no MT5. Portanto, o comportamento do OrderSend é o mesmo de sua contraparte do MT4.
Sim, essa parte funciona e o tíquete da ordem pendente vai para o tíquete da posição e tudo é modificado, mas não funciona o tempo todo. Ao fechar uma posição, aparece uma negociação nas ordens SL ou TP e a verificação no tíquete para o momento de fechar uma ordem a mercado não funciona.
Quebrei minha cabeça. Fechamento por SL. No testador, se o tíquete da ordem for 3, ele coincide com o tíquete da transação e o último seletor está normal. Se for 2, o erro de seleção é 4754. No real/demo sempre não coincide.
Лог
2020.10.2216:46:14.665 Trades '25610628': accepted modify #745859775 sell 1 EURUSD sl: 1.18258, tp: 1.18197 -> sl: 1.18254, tp: 1.181942020.10.2216:46:14.672 Trades '25610628': modify #745859775 sell 1 EURUSD -> sl: 1.18254, tp: 1.18194 done in129.694 ms
2020.10.2216:48:06.783 Trades '25610628': deal #725926213 buy 1 EURUSD at 1.18254 done (based on order #745887632)
// verificar o fechamento da posiçãoif(OrderSelect(Tickets, SELECT_BY_TICKET)==true) // Ao fechar pelo SL e retornar o erro 4754.
{
if(OrderCloseTime()==0) //O quesubstituir, como saber que a posição não está no histórico
{
ModifyTral();
return;
}
if(OrderCloseTime()!=0) // E, em seguida, substitua-o para perceber que a posição foi para o histórico
{
End=true;
Alert("Nossa ordem de mercado foi encerrada. O trabalho do Consultor está concluído.",
" Swap = ", OrderSwap(), " Comissão = ", OrderCommission()); // эта часть работает в тестере)))
return;
}
}
Тикет ордера позиции не 3
LO 019:16:54.104 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:10:17Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 2 Or 0
ON 019:16:54.104 Trade 2018.07.0200:10:19 stop loss triggered #2 buy 1 EURUSD 1.16771 sl: 1.16719 tp: 1.17241 [#4 sell 1 EURUSD at 1.16719]
LQ 019:16:54.104 Trades 2018.07.0200:10:19 deal #3 sell 1 EURUSD at 1.16719 done (based on order #4)
HN 019:16:54.104 Trade 2018.07.0200:10:19 deal performed [#3 sell 1 EURUSD at 1.16719]
RI 019:16:54.104 Trade 2018.07.0200:10:19 order performed sell 1 at 1.16719 [#4 sell 1 EURUSD at 1.16719]
FJ 019:16:54.104 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:10:19Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 2 Or 0
FI 019:16:54.104 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:10:19Alert: OrderSelect() нашего рыночного ордера вернул ошибку - 4754
IQ 019:16:54.104 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:10:19Alert: Или Наш рыночный ордер закрылся. время закрытия 1970.01.0100:00:00 Tickets 2 Своп = 0.0 Комиссия = 0.0
KN 019:16:54.104 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:10:21Alert: Работа эксперта завершена. Прибыль/убыток = 0.0
Тикет ордера-позиции 3
PF 019:21:30.198 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:44:36Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 3 Or 1
KH 019:21:30.198 Trade 2018.07.0200:44:37 stop loss triggered #3 sell 1 EURUSD 1.16740 sl: 1.16800 tp: 1.16277 [#4 buy 1 EURUSD at 1.16800]
DN 019:21:30.198 Trades 2018.07.0200:44:37 deal #3 buy 1 EURUSD at 1.16802 done (based on order #4)
LJ 019:21:30.198 Trade 2018.07.0200:44:37 deal performed [#3 buy 1 EURUSD at 1.16802]
EF 019:21:30.198 Trade 2018.07.0200:44:37 order performed buy 1 at 1.16802 [#4 buy 1 EURUSD at 1.16800]
CL 019:21:30.198 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:44:37Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 3 Or 1
QJ 019:21:30.198 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:44:37Alert: Наш рыночный ордер закрылся. время закрытия 2018.07.0200:44:37 Tickets 3 Своп = 0.0 Комиссия = 0.0
NE 019:21:30.198 Time_Open_Trail_2_21 (EURUSD,M5) 2018.07.0200:44:37Alert: Работа эксперта завершена. Прибыль/убыток = -62.0/Solução estúpida, é claro.if(OrderSelect(Tickets, SELECT_BY_TICKET)==true)
{
if(OrderCloseTime()==0) // Se nossa ordem a mercado não estiver fechada
{
ModifyTral();
return;
}
if(OrderCloseTime()!=0) // Se nossa ordem a mercado tiver sido fechada
{
End=true;
Alert("Nossa ordem de mercado foi encerrada. horário de encerramento".,OrderCloseTime(),"Tickets ",Tickets,
" Swap = ", OrderSwap(), " Comissão = ", OrderCommission());
return;
}
}
else
{
Alert("OrderSelect() de nossa ordem de mercado retornou um erro - ",GetLastError());
End=true;
Alert("Ou Nossa ordem de mercado foi fechada. horário de fechamento".,OrderCloseTime(),"Tickets ",Tickets,
" Swap = ", OrderSwap(), " Comissão = ", OrderCommission());
return;
}
Sim, essa parte funciona, e o tíquete da ordem pendente vai para o tíquete da posição e tudo é modificado, mas não funciona imediatamente. Ao fechar uma posição, aparece uma transação nas ordens SL ou TP e a verificação no tíquete para o tempo de fechamento de uma ordem a mercado não funciona.
Quebrei minha cabeça. Fechamento por SL. No testador, se o tíquete da ordem for 3, ele coincide com o tíquete da transação e o último seletor é normal. Se for 2, o erro de seleção é 4754. No real/demo sempre não coincide.
Forneça-me o arquivo mq5 que você acha que não está funcionando. Você está desperdiçando muitas informações. Isso não ajuda a entender o que você quer dizer. Melhor a fonte.
Dê-me o arquivo mq5 que você acha que não está funcionando. Você está desperdiçando muitas informações. Isso não ajuda a entender o que você quer dizer. Melhor a fonte.
2020.10.2222:16:20.1962020.10.2100:03:10 market buy 1 EURAUD sl: 1.67661 (1.67664 / 1.67761)
2020.10.2222:16:20.1962020.10.2100:03:10 deal #2 buy 1 EURAUD at 1.67761 done (based on order #2)
2020.10.2222:16:20.1962020.10.2100:03:10 deal performed [#2 buy 1 EURAUD at 1.67761]
2020.10.2222:16:20.1962020.10.2100:03:10 order performed buy 1 at 1.67761 [#2 buy 1 EURAUD at 1.67761]
2020.10.2222:16:20.1982020.10.2100:12:59 stop loss triggered #2 buy 1 EURAUD 1.67761 sl: 1.67661 [#3 sell 1 EURAUD at 1.67661]
2020.10.2222:16:20.1982020.10.2100:12:59 deal #3 sell 1 EURAUD at 1.67638 done (based on order #3)
2020.10.2222:16:20.1982020.10.2100:12:59 deal performed [#3 sell 1 EURAUD at 1.67638]
2020.10.2222:16:20.1982020.10.2100:12:59 order performed sell 1 at 1.67638 [#3 sell 1 EURAUD at 1.67661]
2020.10.2222:16:20.1982020.10.2100:12:59true2020.10.2222:16:20.1982020.10.2100:12:59#32020.10.2100:03:10.025 buy 1.00 EURAUD 1.677611.676610.000002020.10.2100:12:59.8741.676380.000.00 -123.00 sl 1.6766102020.10.2222:16:20.1982020.10.2100:12:592020.10.212020.10.2222:16:20.1982020.10.2100:12:59ExpertRemove() function called
Se alguém invadir, ao usar essa biblioteca no MT5 na RannForex com a configuração "Send limit orders to the market at a price worse than the current one by N points" (Enviar ordens de limite ao mercado a um preço pior do que o atual em N pontos) ao modificar uma ordem de limite, o alt voará para este lugar
Isso se deve ao fato de que o MT4Orders vê a ordem perdida marcada a favor, mas o corretor corrige imediatamente o preço de volta e, ao solicitar os parâmetros da ordem, o preço já é diferente. Portanto, parece ser um recurso.
Se alguém invadir, ao usar essa biblioteca no MT5 da RannForex com a configuração "Send limit orders to the market at a price worse than the current one by N pips" (Enviar ordens de limite para o mercado a um preço pior do que o atual por N pips), ao modificar o limitador, o alt voará para este local
Isso se deve ao fato de que o MT4Orders vê a ordem perdida marcada a favor, mas o corretor corrige imediatamente o preço de volta e, ao solicitar os parâmetros da ordem, o preço já é diferente. Portanto, parece ser um recurso.
Tenho um EA MT4 que estou tentando portar para o MT5 usando o MT4Orders para que eu possa manter uma única fonte, mas me deparei com alguns problemas...
1) quando uma ordem atinge SL ou TP, os textos usuais [sl] ou [tp] não são anexados ao comentário da ordem se o EA adicionou um comentário durante OrderSend().
Esse é um comportamento normal do MT5? Em caso afirmativo, existe uma maneira confiável de determinar se uma ordem realmente atingiu a SL/TP ou foi fechada manualmente?
(tentar decidir verificando o preço de abertura / preço de fechamento / SL / TP não é confiável devido à derrapagem - especialmente se o SL foi movido muito perto do TP).
** Curiosamente, OrdersToString() mostra "[sl x.xxxxxx]" nos comentários, mas a guia Histórico de ordens não mostra essa informação (e ela não está incluída em OrderComment() no testador de estratégia)
2) quando ocorre um fechamento parcial, os comentários sobre a ordem das partes aberta e fechada não mostram "to #xxxxxxxxxxxxxxx" e "from #xxxxxxxxxxx"
novamente, existe uma maneira confiável (e, esperamos, simples) de determinar o que aconteceu com uma determinada ordem?
3) o número do ticket de uma negociação aberta muda quando ela é fechada, portanto, não posso usar OrderTicket() para seguir uma ordem, mas OrderTicketID() parece funcionar como OrderTicket() no MT4 e mantém o mesmo ID para uma negociação fechada.
Esse valor é constante ou pode mudar entre as reinicializações da plataforma?Se for constante, qual é a melhor maneira de usar OrderTicketID() e manter a compatibilidade com o MT4 (já que OrderTicketID() não é uma função do MT4)?
** O OrderTicketID() parece ignorar a diretiva MT4_TICKET_TYPE e é sempre "long"
O MT4Orders é do estilo do MT4 no MT5. Portanto, o comportamento do OrderSend é o mesmo de sua contraparte do MT4.
Sim, essa parte funciona e o tíquete da ordem pendente vai para o tíquete da posição e tudo é modificado, mas não funciona o tempo todo. Ao fechar uma posição, aparece uma negociação nas ordens SL ou TP e a verificação no tíquete para o momento de fechar uma ordem a mercado não funciona.
Quebrei minha cabeça. Fechamento por SL. No testador, se o tíquete da ordem for 3, ele coincide com o tíquete da transação e o último seletor está normal. Se for 2, o erro de seleção é 4754. No real/demo sempre não coincide.
Sim, essa parte funciona, e o tíquete da ordem pendente vai para o tíquete da posição e tudo é modificado, mas não funciona imediatamente. Ao fechar uma posição, aparece uma transação nas ordens SL ou TP e a verificação no tíquete para o tempo de fechamento de uma ordem a mercado não funciona.
Quebrei minha cabeça. Fechamento por SL. No testador, se o tíquete da ordem for 3, ele coincide com o tíquete da transação e o último seletor é normal. Se for 2, o erro de seleção é 4754. No real/demo sempre não coincide.
Forneça-me o arquivo mq5 que você acha que não está funcionando. Você está desperdiçando muitas informações. Isso não ajuda a entender o que você quer dizer. Melhor a fonte.
Dê-me o arquivo mq5 que você acha que não está funcionando. Você está desperdiçando muitas informações. Isso não ajuda a entender o que você quer dizer. Melhor a fonte.
O código está uma bagunça, peço desculpas.
O código está uma bagunça, peço desculpas.
Da próxima vez, será melhor quanto aos méritos.
Resultado.
Da próxima vez, será melhor quanto aos méritos.
Resultado.
Obrigado.
Da próxima vez, será melhor quanto aos méritos.
Resultado.
Encontrei o motivo, a versão antiga do MT4Orders 2018. Com ele e seu exemplo deu falso mudou para o mais recente tudo funcionou, e meu código também)
Muito obrigado.
Encontrei o motivo, a versão antiga do MT4Orders 2018.
Infelizmente, não descobri como fazer com que os usuários tropecem menos ao usar versões não atualizadas da biblioteca.
Se alguém invadir, ao usar essa biblioteca no MT5 na RannForex com a configuração "Send limit orders to the market at a price worse than the current one by N points" (Enviar ordens de limite ao mercado a um preço pior do que o atual em N pontos) ao modificar uma ordem de limite, o alt voará para este lugar
Isso se deve ao fato de que o MT4Orders vê a ordem perdida marcada a favor, mas o corretor corrige imediatamente o preço de volta e, ao solicitar os parâmetros da ordem, o preço já é diferente. Portanto, parece ser um recurso.
Se alguém invadir, ao usar essa biblioteca no MT5 da RannForex com a configuração "Send limit orders to the market at a price worse than the current one by N pips" (Enviar ordens de limite para o mercado a um preço pior do que o atual por N pips), ao modificar o limitador, o alt voará para este local
Isso se deve ao fato de que o MT4Orders vê a ordem perdida marcada a favor, mas o corretor corrige imediatamente o preço de volta e, ao solicitar os parâmetros da ordem, o preço já é diferente. Portanto, parece ser um recurso.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Bibliotecas: MT4Orders
fxsaber, 2020.09.29 08:45 AM
Com essa linha
você pode desativar tudo isso. Pode ser útil se o histórico de negociação do MT5 estiver ficando lento, porque o MT4Orders verifica a exatidão (e até corrige) do MT5-OrderSend às vezes acessando esse histórico.
Não recomendo isso.
Tenho um EA MT4 que estou tentando portar para o MT5 usando o MT4Orders para que eu possa manter uma única fonte, mas me deparei com alguns problemas...
1) quando uma ordem atinge SL ou TP, os textos usuais [sl] ou [tp] não são anexados ao comentário da ordem se o EA adicionou um comentário durante OrderSend().
Esse é um comportamento normal do MT5? Em caso afirmativo, existe uma maneira confiável de determinar se uma ordem realmente atingiu a SL/TP ou foi fechada manualmente?
(tentar decidir verificando o preço de abertura / preço de fechamento / SL / TP não é confiável devido à derrapagem - especialmente se o SL foi movido muito perto do TP).
** Curiosamente, OrdersToString() mostra "[sl x.xxxxxx]" nos comentários, mas a guia Histórico de ordens não mostra essa informação (e ela não está incluída em OrderComment() no testador de estratégia)
2) quando ocorre um fechamento parcial, os comentários sobre a ordem das partes aberta e fechada não mostram "to #xxxxxxxxxxxxxxx" e "from #xxxxxxxxxxx"
novamente, existe uma maneira confiável (e, esperamos, simples) de determinar o que aconteceu com uma determinada ordem?
3) o número do ticket de uma negociação aberta muda quando ela é fechada, portanto, não posso usar OrderTicket() para seguir uma ordem, mas OrderTicketID() parece funcionar como OrderTicket() no MT4 e mantém o mesmo ID para uma negociação fechada.
Esse valor é constante ou pode mudar entre as reinicializações da plataforma?Se for constante, qual é a melhor maneira de usar OrderTicketID() e manter a compatibilidade com o MT4 (já que OrderTicketID() não é uma função do MT4)?
** O OrderTicketID() parece ignorar a diretiva MT4_TICKET_TYPE e é sempre "long"