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
Oi Enrico,
Descobri uma maneira de lidar com a função Calcular, que agora inclui um recurso de histerese que parece funcionar quando o indicador MA e TEMA se cruzam.
No entanto, encontrei um problema com o Order Manager. Isso acontece quando executo o testador de estratégia para alguns loops durante a otimização. Nos primeiros loops, ele funciona bem, mas depois de alguns loops, uma ordem é colocada para cada candle.
Aqui funciona bem:
Mas aqui o Order Manager começa a colocar várias ordens:
Quando depurei a seguinte parte do código do COrderManager, a instrução orders_total = OrdersTotal(); torna-se 1 quando funciona, mas torna-se 0 quando falha, o que faz com que a condição if m_max_order>orders_total seja sempre avaliada como verdadeira.
Espero que você possa me ajudar a resolver isso.
Com os melhores cumprimentos/
Karl
Olá, Karl,
Nunca encontrei esse problema antes. O método OrdersTotal() simplesmente conta o número de objetos COrder ativos. Se houver algo errado com a estratégia codificada, isso deverá ser corrigido. Caso contrário, deve haver algum problema na forma como as instâncias de ordem são gerenciadas (criadas/destruídas) e/ou como são contadas. Eu o informarei assim que me deparar com esse problema.
Olá, Enrico,
Uma pesquisa no Google sobre problemas com o OrdersTotal() do mt5 revela que outras pessoas também têm problemas. Por exemplo testador de estratégia com essa estratégia. O Expert Set também foi carregado para que você possa executar o testador de estratégia com a mesma entrada que eu fiz.
Atenciosamente/
Karl
Oi Enrico,
Uma pesquisa no Google sobre problemas com o OrdersTotal() do mt5 revela que outras pessoas também têm problemas. Por exemplo testador de estratégia com essa estratégia. O Expert Set também foi carregado para que você possa executar o testador de estratégia com a mesma entrada que eu fiz.
Com os melhores cumprimentos/
Karl
Obrigado pelos arquivos, Karl. Encontrei o problema que você está descrevendo.
No arquivo de inclusão principal, altere este (OnInit):
para isto:
E isto (OnDeinit):
para isto:
Por algum motivo, os dados salvos de sessões anteriores estão sendo recarregados para sessões futuras. É por isso que o problema só existe após o backtest inicial, às vezes com algum vazamento de memória. Com base em meus testes, o problema parece existir somente no modo de compensação, não no modo de cobertura do MT4 ou do MT5. Mas informe-me se você continuar a ter esse problema. O código acima impede o carregamento e o salvamento de dados durante o backtesting e a otimização (esqueci de mencionar isso ao escrever o artigo final).
Além disso, com relação ao OrdersTotal() no MT5, ele conta apenas as ordens pendentes (não o equivalente ao OrdersTotal do MT4). O código no TradeOpen para o OrderManager:
usa o método OrdersTotal() da classe, que é apenas um wrapper do método COrders (também com o mesmo nome). COrders estende CArrayObj, portanto, não está realmente usando a função OrdersTotal() nativa do MT5. O que foi dito acima também é equivalente a usar:
Por outro lado, se usarmos:
isso chama explicitamente a função nativa do MT5. É possível que você já esteja familiarizado com isso, mas apenas para o caso de outras pessoas encontrarem um problema semelhante.
Obrigado, Enrico. O problema desapareceu.
/Karl
Olá, Enrico,
No Github, em iceron/MQLx, há um aviso de alteração de m_new_signal e m_new_signal_close.
O m_signal_new pode ser alterado pelo método void CSignalsBase::NewSignal(const bool value), mas não há nenhum método disponível para alterar o m_new_signal_close.
Você poderia explicar melhor o uso de m_new_signal e m_new_signal_close?
Com os melhores cumprimentos/
Carlos
Esses métodos funcionam com seu MT5Bridge?
Olá, mestres!
Estou com um problema sério para entender a "contagem de velas" (primeiro, segundo, terceiro = idx, idx++, ...) no código de sinal Mql a seguir, que pertence à classe SignalAC.
Alguém poderia me ajudar a penetrar no número idx ao mover os códigos para baixo?
Desde já agradeço.