Perguntas sobre MQL5 Wizard e biblioteca padrão de classes comerciais - página 11
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
Três perguntas:
Teoricamente, podemos, evidentemente, construir a EA usando o assistente e depois adicionar todas estas características manualmente ao código. Mas é desejável que tudo isto tenha sido implementado sob a forma de métodos padrão, ou seja, para bonecos que querem usar o feiticeiro, para que não tenham de entrar no código e editar, por exemplo, caso queiram substituir um módulo de sinal por outro.
Respondeu pessoalmente a todas as suas perguntas: "... ...construir a EA com a ajuda de um feiticeiro e depois... manualmente...". Ainda não há outras opções. O feiticeiro, muito provavelmente, não será desenvolvido num futuro próximo.
É uma pena que um tão bom empreendimento seja abandonado num canto distante.
Se tivesse sido actualizado, muito poderia ter sido feito, ou seja, poderíamos ter criado módulos prontos a partir dos quais os dummies e outros utilizadores poderiam montar vários EAs prontos sem ter de passar por códigos. Mas neste caso temos a mesma confusão que com o mql4 algorítmico, ou seja, pega-se num algoritmo, entra-se no código e utiliza-se manualmente. Mais uma vez, o princípio do OOP é violado. Por exemplo, se quiser substituir um módulo por outro, terá de voltar ao código e alterar tudo manualmente de novo. Recebe-se um monte de disparates, porque apenas "rastejar" através dos códigos, para pelo menos compreender onde e o que modificar, mataria muito tempo.
Foi um bom começo. É uma pena. Acabei de criar um módulo de sinal ontem, mas ainda estou intrigado com a forma de fazer com que toda a EA funcione sem ir sempre ao código fonte. Queria escrever um artigo sobre como utilizá-lo. Acabei de inserir e acrescentar gestão de posições, gestão de dinheiro e gestão de riscos, e tudo funciona. Mas não, não vai funcionar. Se um utilizador constrói uma EA usando o feiticeiro, esta não funcionará. Terá de escrever uma resma inteira de instruções onde procurar no código e o que mudar. Para não mencionar que ainda tenho de lidar com tudo isto pessoalmente antes de escrever uma instrução.
Portanto, agora não resta nada para os utilizadores a não ser aprender mql5, OpenCL, etc. para lidar com o autotrading. Caso contrário, não terão qualquer sorte.
Bem, uma vez que este projecto foi abandonado, vou agora pensar numa direcção diferente.
É uma pena que um esforço tão bom seja abandonado a um canto distante.
Esperemos que não seja abandonado mas sim adiado. Eu próprio tenho muitos pensamentos interessantes sobre o desenvolvimento do Feiticeiro. Mas...
A esperança morre por último (c) provérbio popular
À primeira pergunta, ou seja, como testar o módulo de sinal abrindo preços e trocando por carrapatos, encontrei uma solução para não ter de escavar os códigos, e até melhor do que a geralmente aceite.
Ainda não descobri como ler as indicações do módulo de sinal nos módulos de gestão de posição e de equidade e de gestão de risco. Pesquisei o código fonte e olhei à minha volta. O módulo de sinal obtém os seus resultados através do método direction(), ou seja, só preciso de abordar uma instância desta mesma classe de módulo na gestão de posições e módulos de gestão de equidade e risco e chamar este mesmo método para ler os seus valores. Como isto pode ser feito sem alterar o código, ainda não está claro.
A esperança brota eterna (c) provérbio popular
À primeira pergunta, isto é, como testar o módulo de sinal abrindo preços e comerciando por carrapatos, encontrei uma solução para não ter de entrar nos códigos, e ainda melhor do que a geralmente aceite.
E não consigo perceber como ler as indicações do módulo de sinal na gestão de posições e módulos de equidade e gestão de risco, sem escavar os códigos. Pesquisei o código fonte e olhei à minha volta. O módulo de sinal obtém os seus resultados através do método direction(), ou seja, só preciso de abordar uma instância desta mesma classe de módulo nos módulos de gestão de posições e gestão de capital e risco e chamar a este mesmo método para ler os seus valores. Como isto pode ser feito sem alterar o código, ainda não está claro.
Sem alterar os códigos, provavelmente não vai funcionar.
Não alterar os códigos provavelmente não vai funcionar.
Ainda não está tudo perdido. Pode criar classes herdadas de CExpert, CExpertMoneu e CExpertTrailing e acrescentar-lhes os métodos necessários para aceder a uma instância da classe do módulo de sinal. Mas também há aqui uma questão, como o feiticeiro escreve na EA criada #include <Expert\Expert.mqh> e não o seu descendente.
Ainda temos de pensar sobre isso.
Se os criadores tivessem adivinhado imediatamente que um módulo de sinal pode ser utilizado para todos os outros módulos como o principal e os sinais adicionais (como nesta versão do assistente) podem ser adicionados aos módulos de apoio à posição e à equidade e gestão de risco e os códigos teriam sido mais fáceis. Mas, no nosso caso, cada módulo requer a especificação de condições adicionais para os sinais e, portanto, precisam de configurações externas adicionais, o que resulta num tal monstro com muitos parâmetros a serem optimizados. Para não mencionar que os sinais de um módulo podem entrar em conflito, ou seja, um módulo de sinal pode abrir uma posição e um módulo de acompanhante - fechá-lo no tick seguinte, se as condições de entrada e saída do mercado forem contraditórias.
Ainda não está tudo perdido. Afinal, é possível criar classes herdadas de CExpert, CExpertMoneu e CExpertTrailing e acrescentar-lhes os métodos necessários de acesso a uma instância da classe do módulo de sinal. Mas também há aqui uma questão, como o feiticeiro escreve na EA criada #include <Expert\Expert.mqh> e não o seu descendente.
Ainda temos de pensar sobre isso.
Se os criadores tivessem adivinhado imediatamente que um módulo de sinal pode ser utilizado para todos os outros módulos como o principal e os sinais adicionais (como nesta versão do assistente) podem ser adicionados aos módulos de apoio à posição e à equidade e gestão de risco e os códigos teriam sido mais fáceis. Mas, no nosso caso, cada módulo requer a especificação de condições adicionais para os sinais e, portanto, precisam de configurações externas adicionais, o que resulta num tal monstro com muitos parâmetros a serem optimizados. Sem mencionar o facto de que os sinais de um módulo podem entrar em conflito, ou seja, um módulo de sinal pode abrir uma posição e um módulo de acompanhante - fechá-lo no tick seguinte, se as condições de entrada e saída do mercado forem contraditórias.
É assim que é concebido. O feiticeiro cria o "peixe" da EA. Além disso:
Era assim que se pretendia que fosse. O mestre cria o 'peixe' do conselheiro. A seguir:
Isso é o que é feio, coisas do género:
Queríamos o melhor. Acontece que é o mesmo de sempre (c) Chernomyrdin
Em geral, a maioria dos mal-entendidos podem ser corrigidos, mas isto deve ser feito ao nível da classe mãe raiz e depois as classes fixas podem ser distribuídas através de actualizações da plataforma. Isto é, é necessário abrir o acesso ao método Direction() do módulo de sinal a partir dos módulos de apoio à posição e de equidade e gestão de risco. Porque se os criadores de módulos individuais editarem o código fonte das classes pai, a incompatibilidade resultante do código fonte será incompatível e os módulos criados não funcionarão em outros computadores. Se os criadores de módulos criarem classes pai com métodos sobrepostos, a incompatibilidade ainda estará a nível de mestre, porque este último escreve os seus próprios inlúdios, e, consequentemente, os utilizadores finais precisam de voltar a escrever instruções, e dificilmente quererão entrar nas fontes, e se o fizerem, então erro num único símbolo ou noutro lugar, etc...
Esse é o problema, porque desde o início há coisas que não foram consideradas:
Queríamos o melhor. Acontece que é o mesmo de sempre (c) Chernomyrdin
Em geral, a maioria dos mal-entendidos podem ser corrigidos, mas é desejável fazê-lo ao nível da classe mãe raiz e depois distribuir classes fixas através de actualizações. Porque se o código fonte das classes mãe for corrigido pelos programadores de módulos, a incompatibilidade resultante do código fonte será incompatível e os módulos criados não funcionarão em outros computadores. Se o programador criar classes pai com métodos sobrepostos, então a incompatibilidade já está ao nível de mestre, porque ele escreve as suas próprias inclusões, e por isso precisa novamente de escrever instruções aos utilizadores finais, e é pouco provável que eles queiram entrar no código fonte, e se entrarem, então erro num único carácter ou noutro lugar, e assim por diante e assim por diante.
Deixe-nos dar-lhe algumas sugestões. Iremos revê-los.
Até agora, existe apenas uma única coisa que aborda as desvantagens acima referidas:
Acesso aberto à leitura dos valores devolvidos pelo método Direction() do módulo de sinal a partir dos módulos de gestão de posição e gestão de capital e risco.
Adicione mais um método, por exemplo o identificador duplo getMainSingnal(), que chama uma instância da classe do módulo de sinais e retorna o resultado do método Direction() do módulo de sinais. Uma vez que esta troca de informação tem lugar em modo apenas de leitura, a segurança não será quebrada de forma alguma.
Para o fazer
P.S. A classe CExpert tem uma referência a uma instância da classe do módulo de sinal.
CExpertSignal *m_signal; // trading signals object
Tem de criar campos análogos para as classes CExpertMoney e CExpertTrailing e passar o mesmo valor do campo acima mencionado para a classe CExpert durante a inicialização