![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Opa, considerando que o seu EA esteja funcionando de acordo com a sua descrição na abertura do tópico, se você deseja implementar essa alteração de permanecer com as posições abertas até o encerramento pelos stops, acho que o mais simples seria apenas inibir os comandos de encerramento das mesmas, deixando a função EncerraPosicao() apenas atualizando a variável flagStopDiario (melhor também pensar noutro nome pra função...😊):
Estou considerando também, claro, que em algum outro local do seu código, a cada novo dia, a variável flagStopDiario retorna para o seu valor inicial false...
Se com essa pequena alteração o EA não funcionar conforme o esperado, descreva o problema claramente, anexe possíveis mensagens de erros das abas Diário e Experts, que ficam na Caixa de Ferramentas, dentre outras ações que você julgar que poderão facilitar a compreensão do problema...
Opa, considerando que o seu EA esteja funcionando de acordo com a sua descrição na abertura do tópico, se você deseja implementar essa alteração de permanecer com as posições abertas até o encerramento pelos stops, acho que o mais simples seria apenas inibir os comandos de encerramento das mesmas, deixando a função EncerraPosicao() apenas atualizando a variável flagStopDiario (melhor também pensar noutro nome pra função...😊):
Estou considerando também, claro, que em algum outro local do seu código, a cada novo dia, a variável flagStopDiario retorna para o seu valor inicial false...
Se com essa pequena alteração o EA não funcionar conforme o esperado, descreva o problema claramente, anexe possíveis mensagens de erros das abas Diário e Experts, que ficam na Caixa de Ferramentas, dentre outras ações que você julgar que poderão facilitar a compreensão do problema...
//============================================================= void EncerraPosicao(double Pontos_History) { //ulong Ticket = 0; // if(Pontos_History < ((-1)*((perdaDiaria/100)*balanceAccount)) && perdaDiaria>0) if(Pontos_History < ((-1)*perdaDiaria) && perdaDiaria>0) { /*for(int i = 0; i <= PositionsTotal(); i++) { Ticket = PositionGetTicket(i); if(Ticket > 0) { ulong magic = PositionGetInteger(POSITION_MAGIC); if(magicNumber == magic) { if(PositionGetSymbol(i)==_Symbol) trade.PositionClose(_Symbol,ULONG_MAX); } } }*/ flagStopDiario = true; } //if(Pontos_History>((ganhoDiario/100)*balanceAccount) && ganhoDiario>0) if(Pontos_History>ganhoDiario && ganhoDiario>0) { /*for(int i = 0; i <= PositionsTotal(); i++) { Ticket = PositionGetTicket(i); if(Ticket > 0) { ulong magic = PositionGetInteger(POSITION_MAGIC); if(magicNumber == magic) { if(PositionGetSymbol(i)==_Symbol) { trade.PositionClose(_Symbol,ULONG_MAX); } } } }*/ flagStopDiario = true; } } //==========================================================================================
Muito obrigado foi exatamente isso, porem deixe o stop como estava antes, pq ele nao estava contabilizando, em um teste chegou a 1000 pontos negativo e nao encerrou a posição que estava configurado para uma perca de 50reais
Porem mesmo antes de eu querer mudar isso, nos backteste se eu coloco 2 dias ou mais pra testar, ele opera em um dia e no outro nao opera, nao estou conseguindo saber onde posso mecher para arrumar isso, voce ou alguem pode me ajudar
desde ja agradeço
Muito obrigado foi exatamente isso, porem deixe o stop como estava antes, pq ele nao estava contabilizando, em um teste chegou a 1000 pontos negativo e nao encerrou a posição que estava configurado para uma perca de 50reais
Porem mesmo antes de eu querer mudar isso, nos backteste se eu coloco 2 dias ou mais pra testar, ele opera em um dia e no outro nao opera, nao estou conseguindo saber onde posso mecher para arrumar isso, voce ou alguem pode me ajudar
desde ja agradeço
Realmente, e pelo comentário na sequência, parece ser exatamente isso...
desde ja agradeço
Infelizmente, por esses trechos do código que você postou e pela narrativa, eu não consegui identificar devidamente o problema... Você pode esperar pra ver se alguém consegue compreender e lhe passar alguma orientação válida, ou também pode postar o código completo e tentar melhorar a exposição do problema, dentre outras possibilidades... Boa sorte!! 👍
Infelizmente, por esses trechos do código que você postou e pela narrativa, eu não consegui identificar devidamente o problema... Você pode esperar pra ver se alguém consegue compreender e lhe passar alguma orientação válida, ou também pode postar o código completo e tentar melhorar a exposição do problema, dentre outras possibilidades... Boa sorte!! 👍
tesntando aqui e realmente ate mesmo na conta real, ele opera um dia outro nao, o que eu percebe so ocorre isso nos backteste quando coloco meta diaria, se eu deixar sem a meta diaria, ele opera normalmente todos os dias
porem não achei conflito se puderem me ajudar novamente
coloca mais um trecho aqui
desde ja agradeços a todos
bool HorarioFechamento() { TimeToStruct(TimeCurrent(), DiaHoraAtual); if(DiaHoraAtual.hour >= HorarioEncerramento.hour) { if(DiaHoraAtual.hour == HorarioEncerramento.hour) if(DiaHoraAtual.min >= HorarioEncerramento.min) { trade.PositionClose(_Symbol,ULONG_MAX); int TotalDeOrdens = OrdersTotal(); flagStopDiario = false; for(int i = (TotalDeOrdens - 1); i >= 0; i--) { if(OrderGetTicket(i) > 0) trade.OrderDelete(OrderGetTicket(i)); } return true; } else { return false; } return true; } return false; }
Oi, segue:
Note que voce não pode em teoria colocar o horario que o mercado esta fechado, então se o mercado fecha 17h teria que ser colocar algo como 16h55 a depender de onde a função é chamada e não foi mostrada. É muito provavel que a chamada dessa função esteja no ponto errado.
EDIT: Vi mais uma melhoria no codigo em funcao de provavel leilao.Oi, segue:
Note que voce não pode em teoria colocar o horario que o mercado esta fechado, então se o mercado fecha 17h teria que ser colocar algo como 16h55 a depender de onde a função é chamada e não foi mostrada. É muito provavel que a chamada dessa função esteja no ponto errado.
EDIT: Vi mais uma melhoria no codigo em funcao de provavel leilao.opa,coloquei esse codigo e mudei tudo para TimeTradeServer, porem continua a mesma coisa, 1 dia opera no outro nao opera , tenho medo disso implicar na conta real, caso eu venha a coloca ele para opera em uma vps
Olá, se eu entendi direito, essa verificação, no seu código, deveria ser feita através da variável flagStopDiario... Pelos trechos de código que você postou, ela está sendo atualizada nas funções EncerraPosicao(), quando a meta diária é atingida, e HorarioFechamento(), que eu não entendi por quê... A meu ver, deveria funcionar mais ou menos como segue para não acontecer o que você descreveu acima:
... Então, mantém a atualização da variável flagStopDiario na função EncerraPosicao() e retira da função HorarioFechamento()... Teste essas alterações pra ver se muda alguma coisa... 👍
EDIT.1: E, claro, antes de abrir posição ou colocar ordem pendente, checar flagStopDiario...