Perguntas sobre MQL5 Wizard e biblioteca padrão de classes comerciais - página 12
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
Até agora, existe apenas uma única solução para resolver 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, com identificador duplo getMainSingnal(), que se refere a 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 está em modo apenas de leitura, a segurança não é comprometida de forma alguma.
Para o fazer
Quase tudo é claro. A única coisa que quero esclarecer: "porque é que este vosso desejo de ver o sinal ao nível do MM e do trailing deve ser implementado ao nível da classe base?
Não creio que isso seja uma coisa boa (ou seja, má). O algoritmo não é típico (do meu ponto de vista). Pelo que entendi, tem os seus próprios módulos MM e de rastreio (com os seus próprios algoritmos ligados ao sinal).
Aqui e colocar neles o correspondente 1.,2.,3.
Quase tudo é claro. A única coisa que gostaria de esclarecer é "porque é que este seu desejo de ver o sinal a nível de MM e de trailing deve ser implementado a nível de classe base".
Não creio que isso seja uma coisa boa (ou seja, má). O algoritmo não é típico (do meu ponto de vista). Como eu entendi, têm os vossos próprios módulos de MM e trailing (com os vossos próprios algoritmos ligados ao sinal).
Por isso, ponha neles os 1, 2, 3 apropriados.
A questão é que o Master toma a classe SEhregt como base. E consequentemente, não posso substituir as funções necessárias nos módulos que crio, porque já são incompatíveis com esta classe CEhregt muito básica desde o início, porque não têm acesso a uma instância de classe de módulos de sinais.
Porque a instância da classe do módulo de sinal é armazenada apenas no campo da classe SEhregt no ficheiro Expert.mqh, linha 67
CExpertSignal *m_signal; // trading signals object
e este campo não é partilhado (inacessível) com outras classes e módulos criados a partir delas.
Por esta mesma razão, não há maneira de anular as classes CExpertMoney e CExpertTrailing para as tornar compatíveis com o feiticeiro.
Afinal de contas, se o acesso for negado nas classes dos pais, os descendentes não o obterão de forma alguma.
Chegar à raiz (c) "Aphorismos" de Kozma Prutkov
Descobri como passar sinais de negociação do módulo de sinal para os módulos de manutenção de posição e de gestão de dinheiro e risco sem passar instâncias de CExpertSignal.
Vamos adicionar duas linhas cada uma às classes CExpertMoney e CExpertTrailing:
Para o ficheiro ExpertMoney.mqh:
Para o ficheiro ExpertTrailing.mqh:
Ao fazê-lo, definimos os campos e métodos necessários para passar os sinais comerciais. Agora precisamos de passar estes sinais comerciais para as classes de módulos. Fazemo-lo em Expert.mqh, ou seja, para a classe CExpert
Escreveremos uma linha para passar os nossos sinais de negociação para a classe de apoio às posições
e inseri-lo logo no início do método, que é chamado antes de cada paragem, ou seja, CheckTrailingStop():
Iremos escrever uma linha para passar sinais de negociação para a classe de gestão de dinheiro e risco:
e inseri-lo logo no início do método, que é chamado antes da abertura de cada posição, ou seja, CheckOpen():
E é só isso, o problema está resolvido.
Agora, podemos obter o valor actual dos sinais de negociação nos módulos de gestão de posições e gestão de acções e riscos, acedendo ao valor do campo m_signaldirection. Tudo o que temos de fazer agora é registar os novos campos e métodos nas classes CExpertMoney e CExpertTrailing na documentação e adicionar os ficheiros modificados às actualizações.
Aqui estão os ficheiros. No Expert, as linhas 100 e 123 são manuscritas.
Se tiver mais alguma pergunta, não hesite em fazer.
Aqui estão os ficheiros. No Expert, as linhas 100 e 123 são manuscritas.
Se tiver mais alguma questão, não hesite em contactar-me.
Que tipo de pessoas são estes criadores? Quando começarão a ouvir o que os comerciantes, que já têm experiência na criação de sistemas de negociação, precisam em vez de terem a sua própria visão de conceber sistemas de negociação que são praticamente inutilizáveis para os utilizadores finais, porque precisam de ajustar manualmente o código fonte? Quantas vezes tenho de explicar que posso subir e corrigir manualmente, e mesmo assim demorarei muito tempo a compreender o que é o quê, apesar de estar familiarizado com programação. E é pouco provável que o utilizador final entre no código, porque ele não compreende a programação. O senhor mesmo declarou, e passo a citar:
"O conhecimento de linguagens de programação já não é um pré-requisito para a criação de robôs comerciais. "Ver https://www.mql5.com/ru/articles/240.
"A primeira versão do MQL5 Wizard já tinha a possibilidade de criar rapidamente um Expert Advisor pronto a usar como um conjunto de módulos simples sob a forma de um código fonte na MQL5. Nem sequer precisava de conhecer a MQL5- bastava ler"Build your own Expert Advisor in MQL5 Wizard" (ver https://www.mql5.com/ru/articles/275).
Agora acontece que o conhecimento de linguagens de programação é necessário, uma vez que o utilizador tem de introduzir o código após o Wizard e editar algo lá. Ou seja, todas as declarações anteriores são invenções e enganos dos criadores.
Por exemplo, se eu escrever o meu próprio módulo de gestão de dinheiro e risco que deve abrir uma posição de acordo com o nível de sinal comercial emitido por um módulo escrito por outro desenvolvedor de módulos. Como resultado, o meu módulo será incompatível com o feiticeiro. Como explicar aos utilizadores que têm de ir a algum lugar no código e inserir algumas cordas para que o módulo funcione? Afinal, os criadores de módulos devem criar módulos, e o assistente deve combiná-los automaticamente num sistema consistente, para que os módulos, no mínimo, não entrem em conflito uns com os outros e sejam totalmente compatíveis uns com os outros. Mas no seu caso, o feiticeiro não o faz, porque depois do feiticeiro, tem de entrar em código e refazer tudo manualmente.
É realmente tão difícil colocar apenas seis linhas nos ficheiros das turmas de pais, que apontei no meu post anterior? E o problema será resolvido por si só e ninguém terá de entrar nas fontes e mudar alguma coisa aí. O que lhe vai cair das mãos? Porquê perder o seu tempo numa algaraviada com a demonstração de como algo deve ser corrigido manualmente depois do feiticeiro? Não pode passar este mesmo tempo numa tarefa mais útil, para que ninguém tenha de entrar no código para resolver problemas semelhantes mais tarde?
Qual é a ideologia da sua empresa - por um lado declara a automatização completa, mas quando se trata da prática, sugerem que entre no código e refaça tudo à mão depois da chamada "automatização"?
Em suma, como eu entendo, é inútil explicar tudo isto. Não se deve surpreender que os comerciantes não queiram mudar para o MT5 porque a plataforma é grosseira e desenvolvida não para a conveniência da auto-negociação, mas para a conveniência dos criadores dessa mesma plataforma. E a menos que o utilizador aprenda bem a programação, é melhor que se mantenha afastado do comércio automático.
Se não quiser, não tem de o fazer. Se não tiver mais nada para fazer, então sente-se aqui e explique a cada utilizador onde e como precisa de entrar no código fonte com as suas mãos e o que deve exactamente corrigir.
Em qualquer caso, com este nível de argumentação e levando quase todas as questões para além dos limites do exagero, não pode haver trabalho consigo. O verdadeiro trabalho envolve a tomada de decisões conscientes, não a demagogia verbal.
Receio que esteja no aperto do maximalismo ou simplesmente não compreenda os limites de aplicabilidade das ferramentas.
Em qualquer caso, com este nível de argumentação e levando quase todas as questões para além dos limites do exagero, não pode haver trabalho consigo. O verdadeiro trabalho implica uma tomada de decisão consciente, não uma demagogia verbal.
Em geral, não pedi trabalho, ou seja, para ganhar dinheiro, e fiquei bastante satisfeito por cooperar numa base voluntária. Como e onde ganho o meu sustento eu decido.
Bem, não o fará e não tem de o fazer. O nosso negócio é oferecer, tem o direito de recusar. Como se costuma dizer: o mestre é o chefe.
Se a sua empresa já compreendeu tudo e até ensinou bonecos a criar os chamados Expert Advisors "ready-made". Além disso, a questão é que eles são apenas bons para demonstração do Wizard, mas não são muito bons para negociação automatizada, porque mesmo nos dados históricos a curva de equidade parece inconveniente à medida que a modularidade é implementada, mas falta a consistência dos módulos para um sistema de negociação completo.
Boa sorte!
...
Por exemplo, se eu escrever o meu próprio módulo de gestão de dinheiro e risco, que deverá abrir uma posição de acordo com o nível do sinal de negociação emitido pelo módulo escrito por outro desenvolvedor de módulo. O resultado será que o meu módulo já é incompatível com o feiticeiro. Como explicar aos utilizadores que têm de ir a algum lugar no código e inserir algumas cordas para que o módulo funcione? Afinal, os criadores de módulos devem criar módulos, e o assistente deve combiná-los automaticamente num sistema consistente, para que os módulos, no mínimo, não entrem em conflito uns com os outros e sejam totalmente compatíveis uns com os outros. E tem um feiticeiro que não o faz, porque depois disso tem de entrar em código e refazer tudo manualmente.
É realmente tão difícil escrever apenas seis linhas nos ficheiros das turmas de pais, que apontei no meu post anterior? E o problema será resolvido por si só e ninguém terá de ir às fontes e mudar alguma coisa lá. O que lhe vai cair das mãos? Porquê desperdiçar o seu tempo numa algaraviada, demonstrando como consertar algo manualmente depois do feiticeiro? Não pode passar este mesmo tempo em algo mais útil, para que ninguém tenha de entrar em código mais tarde para resolver problemas semelhantes?
...A sua abordagem viola o encapsulamento de classes, e como resultado traz confusão hierárquica.
Leia o livro de Steve McConell "O Código Perfeito" à sua vontade.
Imagine como uma fábrica para a produção de luvas, há um carimbo de cinco dedos para a mão direita e esquerda, mas depois vem uma pequena encomenda de luvas de seis dedos. Afinal de contas, há pessoas assim. Mas em vez de fazer um carimbo para eles (que fará um lote e aí permanecerá durante algum tempo), sugere a modificação do carimbo de cinco dedos, fazendo um dedo deslizante. Parece ser universal e tudo é grande, mas a força do selo de cinco dedos será enfraquecida em nome da universalidade (em nome de uma pequena necessidade de ocasionalmente produzir luvas de seis dedos). E então um lote de 300 quatro dedos será encomendado, e mais uma vez desmoronará o modelo bem provado e fiável.
Já lhe foi dito acima:
Não creio que seja bom (ou seja, mau). O algoritmo não é típico (do meu ponto de vista). Pelo que entendi, tem os seus próprios módulos MM e de rastreio (com os seus próprios algoritmos ligados ao sinal).
Em vez de alterações à Bíblia padrão, seria melhor fazer desenvolvimentos para a alargar (através da herança). Então seria realmente interessante.
HZZ Além disso, para que as pessoas não tenham de lidar com os meandros do código (como escreveu acima), pode embrulhar os módulos prontos em biblio e deitá-los no mercado, depois basta ligar o módulo a partir de Reshetov e carregar no botão [download dough].
A sua abordagem viola o encapsulamento de classes, e como resultado introduz confusão hierárquica.
Leia o livro "Código Perfeito" de Steve McConell à sua vontade.
Simplificando, pense no Mestre como uma fábrica de luvas, há um carimbo de cinco dedos para a mão direita e esquerda, mas depois chega uma pequena encomenda de luvas de seis dedos. Afinal de contas, há pessoas assim. Mas em vez de fazer um carimbo para eles (que fará um lote e aí permanecerá durante algum tempo), sugere a modificação do carimbo de cinco dedos, fazendo um dedo deslizante. Parece ser universal e tudo é grande, mas a durabilidade do selo de cinco dedos será enfraquecida em nome da universalidade (em nome de uma pequena necessidade de produzir ocasionalmente luvas de seis dedos). E então um lote de 300 quatro dedos será encomendado, e novamente desmoronará o modelo bem provado e fiável.
Já lhe foi dito acima:
Em vez de fazer alterações à Bíblia padrão, seria melhor fazer desenvolvimentos para a alargar (através da herança). Então será realmente interessante.Por exemplo, uma paragem móvel é executada de acordo com um sistema de sinais separado desenvolvido por um terceiro desenvolvedor do módulo, tal como uma onda móvel ou parabólica, cujos sinais em alguns pontos contradizem os sinais do módulo e o sistema de negociação começa a funcionar de forma inconsistente. O módulo de gestão de dinheiro e risco também não pode adivinhar telepaticamente que o sinal de negociação é fraco e é tempo de reduzir o volume de posições abertas e agir de acordo com algumas regras independentes do módulo de sinal, ou seja, uma delas pede para abrandar nas esquinas e a outra acelera. E todo o sistema comercial, criado com a ajuda do seu chamado mestre, revela-se como na fábula de Krylov chamada "O caranguejo e o lúcio". Nem mais nem menos. E esta mesma ideologia fábula da montagem de consultores imprudentes, a sua empresa está a tentar impor-nos para o autotrading. Será que precisamos dele?
O resultado são sistemas comerciais com tais gráficos de equidade e equilíbrio que só podem assustar tanto os comerciantes como os investidores, ver https://www.mql5.com/ru/code/833.
Isto não se deve ao facto do criador do módulo, neste caso particular Nikolay Kositsin, ter feito algo de errado, mas porque os restantes módulos do sistema de comércio não podem ser coordenados uns com os outros e estão a funcionar de forma inconsistente.
Mas é inútil explicar. Os criadores da plataforma, em vez de escreverem uma miserável seis linhas para corrigir os problemas, escreverão quilómetros de notas de rodapé nos fóruns, acusando os criadores de sistemas comerciais de espalhar demagogia, violações de encapsulamento e outros pecados mortais, mas não levantarão um dedo para corrigir as suas próprias deficiências e mal-entendidos.
Por isso, não vale a pena continuar as discussões. Fique com a sua opinião e faça o que lhe apetecer. Estou farto disto e é inútil, porque os criadores da plataforma não se importam, porque não fazem as suas próprias coisas e se estas mesmas ferramentas podem ser utilizadas pelos utilizadores da plataforma para auto-comercialização, os criadores não se importam. Um homem que está bem alimentado não conhece um homem faminto.
...
Reshetov, não quero sequer ler os seus rabiscos emocionais. Se quer discutir, argumente o seu caso.
O objectivo de um feiticeiro é criar um modelo que vá ao encontro das necessidades da maioria dos comerciantes. Tenho um modelo de EA no cherver (fui eu que o escrevi), ele define a funcionalidade básica. E na prática tem sempre de ser corrigido. Mas as edições são mínimas. Se eu tivesse criado um modelo para não o editar de todo, teria sido um código enorme para todas as ocasiões, em que se poderia perder.
O mago cria um modelo que já está a funcionar, e uma pessoa que não sabe programar pode utilizá-lo tal como está. Se compreender a codificação, é fácil mudá-la para o que se quer. Basta apenas uma vez para compreender como as coisas são criadas e onde estão separadas na biblioteca padrão. Além disso, também pode utilizar a biblioteca padrão como modelo e simplesmente copiar as secções que desejar para o seu próprio código.