Olá! A descrição diz: "Consequentemente, o OrderSelect no modo SELECT_BY_TICKET no MT5, em casos raros (no testador), pode não selecionar o que foi planejado no MT4. "Você pode explicar em quais casos exatamente?
Quando os tíquetes de posição/negociação/ordem coincidem.
Quanto melhor for a redação de um Expert Advisor MT4, mais fácil será convertê-lo para o MT5. E o tamanho/complexidade do EA original não importa na conversão.
Se o OnTradeTransaction permite que você escreva um consultor não comercial (Serviço) que rastreia a presença de um consultor "clone" comercial em execução na conta.
fechamento de uma posição, é deduzida imediatamente do saldo.
Por esse motivo, o patrimônio líquido antes de fechar todas as posições não mostra qual será o saldo após o fechamento.
Isso significa que simplesmente não é possível calcular o ponto de equilíbrio no MT5.
O MT4Orders ainda tem uma comissão para posições. Por esse motivo, ocorre a seguinte situação
#include <MT4Orders.mqh>
#define PRINT(A) Print(#A + " = " + (string)(A))
voidOnStart()
{
double ProfitWithoutCommission = 0;
double ProfitWithCommission = 0;
for (int i = OrdersTotal(); i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
{
OrderPrint();
ProfitWithoutCommission += OrderProfit() + OrderSwap(); // Calcular o lucro atual sem levar em conta a comissão
ProfitWithCommission += OrderProfit() + OrderSwap() + OrderCommission(); // Calcular o lucro atual com a comissão levada em conta
}
PRINT(AccountInfoDouble(ACCOUNT_EQUITY) - AccountInfoDouble(ACCOUNT_BALANCE));
PRINT(ProfitWithoutCommission);
PRINT(ProfitWithCommission);
}
Como você pode ver, a diferença entre o patrimônio líquido e o saldo difere de acordo com o valor da comissão. E pode parecer que a expressão clássica do MT4
ProfitWithCommission += OrderProfit() + OrderSwap() + OrderCommission(); // Calcular o lucro atual com a comissão levada em conta
perde seu significado no MT5. Mas isso não acontece. De fato, ao fechar uma posição, o saldo será alterado por esse valor, e não pelo que o patrimônio líquido mostrava antes. Grosso modo, o valor do Patrimônio Líquido no MT5 é falso, do ponto de vista desse conceito no MT4.
Leve em conta essa peculiaridade do MT5. A biblioteca é mais precisa nesse caso. E será fácil calcular o mesmo ponto de equilíbrio.
// Lista de modificações:// 13.02.2018// Adicionar: adicionado o registro de erros do MT5-OrderSend.// Correção: agora somente as ordens de fechamento do MT5 (SL/TP/SO, fechamento parcial/completo) estão "invisíveis".// Correção: O mecanismo para determinar SL/TP de posições fechadas após OrderClose foi corrigido - funciona se StopLevel permitir.
// Lista de modificações:// 15.02.2018// Correção: a verificação de sincronização MT5-OrderSend agora leva em conta possíveis peculiaridades da implementação ECN/STP.
Como teste, você pode executar esse script em uma conta demo complicada FXOpen-MT5.
O MT5 não está funcionando bem. Um exemplo mostrando o problema
// Exemplo de leitura incorreta do ambiente de negociação em cada tick// O script emula dois ticks do TS, que deve abrir uma posição se não houver nenhuma.#include <Trade/Trade.mqh>
// Retorna o número de posições por caractereint GetAmountPositions( conststring Symb )
{
int Res = 0;
// Este código MQL5 tem um errofor (int i = PositionsTotal() - 1; i >= 0; i--)
if (PositionGetSymbol(i) == Symb)
Res++;
/*
// No MT4, esse código é executado sem erros
for (int i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL) && (OrderSymbol() == Symb))
Res++;
*/return(Res);
}
// Exemplo de OnTickvoid ExampleOnTick()
{
static CTrade Trade;
// Se não houver posição, abririf (!GetAmountPositions(_Symbol))
Trade.Buy(1);
}
// Emulação da chegada de dois eventos TickvoidOnStart()
{
ExampleOnTick();
Sleep(10); // Entre dois ticks ~10 ms.
ExampleOnTick();
}
O que você acha, se executar esse script em um símbolo sem posições, o que acontecerá no final?
A resposta correta é que uma ou duas posições serão abertas.
Esse problema é contornado se você escrever no estilo MQL4, pelo menos parcialmente. Para ter certeza disso, basta fazer GetAmountPositions no estilo MQL4 (comentado no código-fonte), removendo o estilo MQL5.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Olá! A descrição diz: "Consequentemente, o OrderSelect no modo SELECT_BY_TICKET no MT5, em casos raros (no testador), pode não selecionar o que foi planejado no MT4. "Você pode explicar em quais casos exatamente?
Quando os tíquetes de posição/negociação/ordem coincidem.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Expert Advisors: eaBreakeven
fxsaber, 2018.01.11 08:13 pm.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Como alterar o volume de uma ordem pendente?
fxsaber, 2018.01.19 16:34
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Expert Advisors: Arbitragem de três pontos
fxsaber, 2018.01.20 09:58
fechamento de uma posição, é deduzida imediatamente do saldo.
O MT4Orders ainda tem uma comissão para posições. Por esse motivo, ocorre a seguinte situação
Resultado
Como você pode ver, a diferença entre o patrimônio líquido e o saldo difere de acordo com o valor da comissão. E pode parecer que a expressão clássica do MT4
perde seu significado no MT5. Mas isso não acontece. De fato, ao fechar uma posição, o saldo será alterado por esse valor, e não pelo que o patrimônio líquido mostrava antes. Grosso modo, o valor do Patrimônio Líquido no MT5 é falso, do ponto de vista desse conceito no MT4.
Leve em conta essa peculiaridade do MT5. A biblioteca é mais precisa nesse caso. E será fácil calcular o mesmo ponto de equilíbrio.
posição aberta. Para fazer isso, basta fazer qualquer negociação sem um comentário sobre o símbolo da posição.
A biblioteca não perderá o comentário no caso descrito - OrderComment() produzirá o comentário que estava lá quando a posição foi aberta.
Algumas peculiaridades da operação do MT5são descritas aqui em detalhes. A biblioteca funcionou corretamente nessa situação por um longo tempo. Mas ela estava jurando (Alert) que a situação não era padrão.
Agora ela não vai mais jurar
Como teste, você pode executar esse script em uma conta demo complicada FXOpen-MT5.
Resultado
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Organização do ciclo de força bruta da ordem
fxsaber, 2018.02.16 09:40
O MT5 não está funcionando bem. Um exemplo mostrando o problema
O que você acha, se executar esse script em um símbolo sem posições, o que acontecerá no final?
A resposta correta é que uma ou duas posições serão abertas.
Esse problema é contornado se você escrever no estilo MQL4, pelo menos parcialmente. Para ter certeza disso, basta fazer GetAmountPositions no estilo MQL4 (comentado no código-fonte), removendo o estilo MQL5.
Seja especialmente vigilante com o estilo MQL5.