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
NormalizeDoubles nesse ultimo EA está claramente errado. Stop level só é usado no momento de colocar a ordem. O código supostamente modificado estava intocado. Mas não é bem o ponto.
Muda a ordem no OnTick para o CloseAll ser feito depois da martingale e da open alguma coisa. Me parece que não esta tendo chance desse código executar já que as posições foram encerradas.
Boa tarde,
NormalizeDoubles nesse ultimo EA está claramente errado.
O que há de errado na função? Tenho total interesse em corrigir a função.
Stop level só é usado no momento de colocar a ordem.
Fiz essa correção por meio da função abaixo. A chamo sempre que uma nova posição vai ser aberta.
Muda a ordem no OnTick..
Fiz as modificações conforme sugerido, mas o problema com a posição do Take Profit ainda persiste, como pode ser observado na imagem abaixo.
Como não há um padrão consistente na quantidade de pontos adicionais sendo definidos para o Take Profit, isso torna tudo mais obscuro.
Mais uma vez obrigado pela disponibilidade em ajudar.
Ok, a partir do seu EA anexado, implementarei a função CalculateAverageTP() para realizar os testes que solicitei...
Adicionei ao seu código (editado) a função CalculateAverageTP() que foi sugerida anteriormente, testei (telas a seguir), e, aparentemente, funciona com precisão cirúrgica... 😁
Esse trecho de código foi inserido na função apenas para se comparar os valores previstos na mesma com os que foram efetivamente realizados:
Veja um exemplo do que foi previsto (clique para ampliar):
... E veja o que foi realizado (se não errei na soma, 😊 dá exatamente $ 4.14):
Então, a meu ver, a sua solicitação no comentário de abertura deste tópico foi devidamente atendida vários comentários atrás... 😁 Boa sorte!! 👍
Algumas alterações feitas no código original
- Removidas as constantes BUY e SELL
- Função CalculateTakeProfit() substituída pela função CalculateAverageTP() sugerida para testes
- Implementada a função UpdateAverageTP()
- Removida a função CloseAllForce()
- Removida a função CountPositions()
- Removida a função GetProfitPositions()
- Removida a função Martingale()
- Removida a função NormalizeDoubles()
- Adicionada a função NormalizePrice()
- Removido parâmetro de entrada ProfitMultiplier
- Removidas variáveis ClosePositions, stopLevel, _stopLevel, _tickSize
- Removida a função GetTicketLastPosition()
- Removidos parâmetro de entrada Stop e variável StopLoss
- Removidas variáveis MaximumNumberTrade, RepeatLot, IncrementSize
Exemplos bem básicos de funções, sem as devidas verificações de erro que o mercado real requer, apenas para testes...
Não sei se esqueci alguma coisa (provavelmente sim 😊), definitivamente não está "elegante", mas acho que, para os testes que solicitei, isso é suficiente.
Adicionei ao seu código (editado) a função CalculateAverageTP() que foi sugerida anteriormente, testei (telas a seguir), e, aparentemente, funciona com precisão cirúrgica... 😁
Esse trecho de código foi inserido na função apenas para se comparar os valores previstos na mesma com os que foram efetivamente realizados:
Veja um exemplo do que foi previsto (clique para ampliar):
... E veja o que foi realizado (se não errei na soma, 😊 dá exatamente $ 4.14):
Então, a meu ver, a sua solicitação no comentário de abertura deste tópico foi devidamente atendida vários comentários atrás... 😁 Boa sorte!! 👍
Algumas alterações feitas no código original
- Removidas as constantes BUY e SELL
- Função CalculateTakeProfit() substituída pela função CalculateAverageTP() sugerida para testes
- Implementada a função UpdateAverageTP()
- Removida a função CloseAllForce()
- Removida a função CountPositions()
- Removida a função GetProfitPositions()
- Removida a função Martingale()
- Removida a função NormalizeDoubles()
- Adicionada a função NormalizePrice()
- Removido parâmetro de entrada ProfitMultiplier
- Removidas variáveis ClosePositions, stopLevel, _stopLevel, _tickSize
- Removida a função GetTicketLastPosition()
- Removidos parâmetro de entrada Stop e variável StopLoss
- Removidas variáveis MaximumNumberTrade, RepeatLot, IncrementSize
Exemplos bem básicos de funções, sem as devidas verificações de erro que o mercado real requer, apenas para testes...
Não sei se esqueci alguma coisa (provavelmente sim 😊), definitivamente não está "elegante", mas acho que, para os testes que solicitei, isso é suficiente.
Adicionei ao seu código (editado) a função CalculateAverageTP() que foi sugerida anteriormente, testei (telas a seguir), e, aparentemente, funciona com precisão cirúrgica... 😁
Esse trecho de código foi inserido na função apenas para se comparar os valores previstos na mesma com os que foram efetivamente realizados:
Veja um exemplo do que foi previsto (clique para ampliar):
... E veja o que foi realizado (se não errei na soma, 😊 dá exatamente $ 4.14):
Então, a meu ver, a sua solicitação no comentário de abertura deste tópico foi devidamente atendida vários comentários atrás... 😁 Boa sorte!! 👍
Algumas alterações feitas no código original
- Removidas as constantes BUY e SELL
- Função CalculateTakeProfit() substituída pela função CalculateAverageTP() sugerida para testes
- Implementada a função UpdateAverageTP()
- Removida a função CloseAllForce()
- Removida a função CountPositions()
- Removida a função GetProfitPositions()
- Removida a função Martingale()
- Removida a função NormalizeDoubles()
- Adicionada a função NormalizePrice()
- Removido parâmetro de entrada ProfitMultiplier
- Removidas variáveis ClosePositions, stopLevel, _stopLevel, _tickSize
- Removida a função GetTicketLastPosition()
- Removidos parâmetro de entrada Stop e variável StopLoss
- Removidas variáveis MaximumNumberTrade, RepeatLot, IncrementSize
Exemplos bem básicos de funções, sem as devidas verificações de erro que o mercado real requer, apenas para testes...
Não sei se esqueci alguma coisa (provavelmente sim 😊), definitivamente não está "elegante", mas acho que, para os testes que solicitei, isso é suficiente.
Bom dia, Vinicius.
Vamos lá...
O código ainda está se comportando de maneira "inadequada".
Vou tentar explicar de outra forma o que estou pretendendo fazer. Para isso, vamos imaginar de maneira abstrata que eu tenha 3 posições abertas representadas por P1, P2 e P3, e cada uma tenha o seguinte flutuante:
Quando essas três posições atingirem o take profit, quero que o resultado seja algo semelhante ao seguinte:
Como pode ser observado, a soma das posições positivas ($1,50) é 3x maior do que a posição negativa (-$0,50). Não espero que o lucro final seja 3x maior, mas sim que a soma das posições positivas seja 3x maior que a negativa.
Talvez eu tenha me expressado de forma errada ou não tão clara anteriormente, e se isso aconteceu, peço desculpas antecipadamente.
Boa noite, Jeovane!! Sim, a explicação atual mudou o meu entendimento do que seria a sua solicitação inicial... 😁 Mas vamos lá: vou ver o que consigo por aqui (casa alguém não apresente uma solução mais adequada)...
Considerando que, matematicamente, a condição dada (APARENTEMENTE) não pode ser atendida de maneira exata com as posições disponíveis e os preços de abertura, volumes e a relação desejada entre lucros e perdas, considerando também que neste fórum nós não utilizamos "gambiarras" em nossas sugestões 😂, eu parti para uma "solução engenhosa de engenharia criativa" (ou "inovação improvisada") 😁. A função seguinte parece estar funcionando corretamente, porém, como falei, trata-se de uma gigantesca gambiarra, acredito que, nem de longe, seja a solução mais inteligente e, definitivamente, também não está um código "elegante", mas pode ser útil em seus testes para validar (ou invalidar) a estratégia... Caso a estratégia se comprove eficiente, então você busca uma solução mais adequada para utilizar no seu código em conta real...
Fala, Vinicius.
Desculpa a demora pelo feedback, passei o dia preso em "burocracias" e só agora à tarde consegui parar para testar sua solução SUPER ELEGANTE.
A solução está tão elegante e funcional que nem precisa aplicar nenhuma técnica de Design Patterns haha.
MUITO BOA A SUA PROPOSTA DE SOLUÇÃO, PARABÉNS.
Mais uma vez, obrigado pela ajuda e disponibilidade. Fico feliz em saber que o fórum tem pessoas tão boas e dispostas a ajudar como você :-D
PARABÉNS E OBRIGADO.
De nada, Jeovane!! 😊 Boa sorte com seus projetos!! 👍