Discussão do artigo "Expert Advisor Multiplataforma: As classes CExpertAdvisor e CExpertAdvisors" - página 2
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
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
Como faço para corrigir esses erros? O programa foi desenvolvido com base em sua amostra.
Na função OnDeinit(), tenho apenas experts.OnDeinit().
Em OnInit(), apenas experts.OnTick();
E na função de sinal, eu apenas crio objetos de indicadores personalizados da mesma forma que em suas amostras.
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
Como faço para corrigir esses erros? O programa foi desenvolvido com base em sua amostra.
Na função OnDeinit(), tenho apenas experts.OnDeinit().
Em OnInit(), apenas experts.OnTick();
E na função de sinal, eu apenas crio objetos de indicadores personalizados da mesma forma que em suas amostras.
Tudo bem, a culpa é minha
Deixe-me relatar outro possível bug, se você não se importar.
Ele não retornou o número de ordens abertas. Comecei a verificar e descobri que o problema está relacionado ao OrdersBase e ao modo de classificação.
Tive de adicionar o seguinte código:
Não sei por que ele não é inicializado com o modo de classificação adequado ou tenho que inicializá-lo adicionalmente... não faço ideia.
Deixe-me relatar outro possível erro, se você não se importar.
Ele não retornou o número de ordens abertas. Comecei a verificar e descobri que o problema está relacionado ao OrdersBase e ao modo de classificação.
Tive de adicionar o seguinte código:
Não sei por que ele não é inicializado com o modo de classificação adequado ou tenho que inicializá-lo adicionalmente... não faço ideia.
O construtor COrdersBase tem o seguinte código:
No início, ele classifica sua matriz interna de objetos se ela ainda não estiver classificada, mas tenho certeza de que você já sabe disso.
Ele pode se tornar não classificado se outros itens forem adicionados a ele sem usar NewOrder() (por exemplo, Add()).
Não consigo reproduzir o problema que você tem. Meus resultados sempre retornam ordenados durante todo o teste. Tente encontrar o momento em que a matriz é desordenada pela primeira vez em seu teste. Isso pode lhe dar uma pista sobre a origem do problema.
Olá,
Eu o informarei se eu enfrentar o problema novamente.
Tenho outra pergunta. Como faço para obter a instância do especialista atual que está chamando o módulo de sinal?
Digamos que eu tenha uma classe de sinal que tem uma função para verificar os resultados de ordens anteriores. Tenho várias instâncias de especialista. Então, como obtenho as ordens de especialista atuais que estão chamando as funções de verificação de sinal?
Ou talvez haja outra solução adequada. Você poderia compartilhar alguma ideia ou trecho de código para isso?
Meu objetivo é criar um sinal que funcione de forma diferente dependendo do resultado da ordem/posição anterior.
Há muitas maneiras de fazer isso, que podem variar de um programador para outro. Por padrão, as instâncias de especialistas agem independentemente umas das outras. Você pode implementá-lo de modo que as instâncias possam compartilhar as mesmas informações.
Se quiser diferenciar as negociações abertas por cada um dos especialistas, você pode começar atribuindo um número mágico exclusivo para cada instância. Não posso ajudá-lo mais a menos que você mostre seu código.
Enrico,
Meu código é totalmente baseado em seus últimos exemplos.
Tenho apenas uma definição global CExpertAdvisors experts;
Em OnInit(), inicializo o módulo money/stops/signal e, em seguida, adiciono-os a cada instância de especialista.
Em OnTick(), tenho apenas experts.OnTick()
E tenho minha classe de sinal personalizada com Calculate(), LongCondition(), ShortCondition() e outras. Esse sinal é adicionado a cada instância de especialista.
Agora, só quero que a lógica do sinal dependa do resultado da última ordem/posição de cada instância de especialista específica. Isso não está relacionado ao número mágico (aliás, todas as minhas instâncias de especialista têm mágicas diferentes). Nas funções chamadas de sinal Calculate(), LongCondition(), ShortCondition(), não tenho mágica ou qualquer outro detalhe que possa me ajudar a identificar a instância de especialista e, em seguida, encontrar suas ordens.
Quanto ao código, que seja a função Calculate() assim:
Espero que você tenha entendido. Há alguma maneira de implementar isso sem modificar o código de sua biblioteca?
Olá Enrico,
Ainda estou tentando encontrar uma maneira possível de identificar qual instância especializada está chamando as funções de verificação de sinal. Como posso fazer isso? Alguma dica, por favor?
Outra pergunta. Se eu quiser ter um expert negociado em vários pares, como faço para inicializá-lo? Em CExpertAdvisorBase::Init(), preciso especificar um nome de símbolo.
Como faço para criar um tipo de MM com base nos resultados de pedidos anteriores? É tão pouco flexível...