Discussão sobre a implementação dos conselheiros.

 

Olá, estou estudando o mql5 e já faz muito tempo que eu não conseguia sair do chão. Porque todos estão escrevendo programas de maneira diferente, todos estão certos de sua abordagem, e é difícil para os iniciantes entender qual deles é o ideal.

Eu mesmo gostaria de entender e penso que a comunidade se beneficiaria da discussão pública sobre a implementação de soluções ótimas para os blocos típicos da EA. Por exemplo, alguém escreve quase nada na inicialização, e alguém preenche muito bem este bloco. O que verifica um EA deve ou não deve fazer. Virtual Takes and Stops ou não, etc. As próprias maneiras de implementar a estratégia também são interessantes.

Portanto, minha sugestão é que se alguém quiser compartilhar o conhecimento. Depois podemos discutir a implementação, por exemplo, sobre o exemplo do nettler, ou um simples Expert Advisor baseado na média móvel, como se houvesse um desvio em relação à média, então aguarde o retorno à média. Ou qualquer outra estratégia que você gostaria de mostrar. Coloque o código com comentários sobre a razão pela qual você decidiu escrevê-lo desta maneira.

Agradecemos antecipadamente àqueles que decidem contribuir para educar e melhorar a qualidade do código na comunidade de código aberto.

 
Ivan_Invanov:

Olá, estou estudando o mql5 e já faz muito tempo que eu não conseguia sair do chão. Porque todos estão escrevendo programas de maneira diferente, todos estão certos de sua abordagem, e é difícil para os iniciantes entender qual deles é o ideal.

Eu mesmo gostaria de entender e penso que a comunidade se beneficiaria da discussão pública sobre a implementação de soluções ótimas para os blocos típicos da EA. Por exemplo, alguém escreve quase nada na inicialização, e alguém preenche muito bem este bloco. O que verifica um EA deve ou não deve fazer. Virtual Takes and Stops ou não, etc. As próprias maneiras de implementar a estratégia também são interessantes.

Portanto, minha sugestão é que se alguém quiser compartilhar o conhecimento. Depois podemos discutir a implementação, por exemplo, sobre o exemplo do nettler, ou um simples Expert Advisor baseado na média móvel, como se houvesse um desvio em relação à média, então aguarde o retorno à média. Ou qualquer outra estratégia que você gostaria de mostrar. Coloque o código com comentários sobre a razão pela qual você decidiu escrevê-lo desta maneira.

Agradecemos antecipadamente àqueles que optam por contribuir para educar e melhorar a qualidade do código na comunidade de código aberto.

você leu todos os artigos sobre o desenvolvimento da EA neste site e não achou suficiente? e você é um literalista)

 
Aleksey Mavrin:

você leu todos os artigos sobre o desenvolvimento da EA neste site e acha que isso não é suficiente? e você é um literalista)

Acho difícil formar um paradigma para a execução do programa. Sim, eu vi este artigo sobre redução de tempo, é muito útil. Mas qual é a utilidade de reduzir o tempo de execução de uma única peça. Quando, por exemplo, a própria abordagem da solução diminui significativamente em comparação com outra abordagem de solução. Você tem certeza de que não há melhor maneira de escrever EAs do que você. Parabéns, você deve ser do mais alto nível. Talvez você possa nos mostrar um exemplo de código então?
 
Ivan_Invanov:
Acho difícil formar um paradigma para a execução de um programa. Sim, eu vi este artigo sobre redução de tempo, ele é muito útil. Mas qual é a utilidade de reduzir o tempo de execução de uma única peça. Quando, por exemplo, a própria abordagem da solução diminui significativamente em comparação com outra abordagem de solução. Você tem certeza de que não há melhor maneira de escrever EAs do que você. Parabéns, você deve ser do mais alto nível. Talvez você possa me mostrar um exemplo de código então?
Você faz o que você faz. E você desenvolverá seu próprio paradigma no tempo.
 
Ivan_Invanov:
Eu não posso formar um paradigma de execução de programas. Sim, eu vi este artigo sobre redução de tempo e ele é muito útil. Mas não faz sentido diminuir o tempo de funcionamento de um fragmento separado. Quando, por exemplo, a própria abordagem da solução diminui significativamente em comparação com outra abordagem de solução. Você tem certeza de que não há melhor maneira de escrever EAs do que você. Parabéns, você deve ser do mais alto nível. Talvez você possa nos mostrar um exemplo de código então?

Os links para artigos aqui são inseridos automaticamente por palavras-chave.

E eu quis dizer muitos artigos com Expert Advisors prontos, onde os autores explicam o código especialmente para pessoas como você. Você já olhou para eles? Há exemplos suficientes.

A maneira ideal é uma noção situacional.

Sua abordagem de sistema é boa.

Dividir o processo de criação da EA em duas etapas:

1. Algoritmo

2. O código.

O principal é aprender como formular o algoritmo. E você pode codificar de muitas maneiras, o que for mais conveniente.

Os autômatos finitos com vários feedbacks são familiares? Caso contrário, estude a teoria e você terá uma idéia melhor de por onde começar.

 
Ivan_Invanov:

Olá, estou estudando o mql5 e já faz muito tempo que eu não conseguia sair do chão. Porque todos estão escrevendo programas de maneira diferente, todos estão certos de sua abordagem, e é difícil para os iniciantes entender qual deles é o ideal.

Eu mesmo gostaria de entender e penso que a comunidade se beneficiaria da discussão pública sobre a implementação de soluções ótimas para os blocos típicos da EA. Por exemplo, alguém escreve quase nada na inicialização, e alguém preenche muito bem este bloco. O que verifica um EA deve ou não deve fazer. Virtual Takes and Stops ou não, etc. As próprias maneiras de implementar a estratégia também são interessantes.

Eu não entendo o objetivo do tópico.

É claro que cada codificador tem suas próprias preferências, seus próprios princípios, suas próprias visões sobre a estrutura do programa. Para desenvolvê-los, você precisa escrever o código e testá-lo. Ao descobrir as regularidades e erros, você terá uma idéia de qual estrutura de programa se adapta melhor a você.

Implementações específicas estão no KodoBase, há muitas opções. Pegue qualquer um deles e os explore, use e modifique.

O que mais você precisa?

 
Georgiy Merts:

Eu não entendo o objetivo do tópico.

É claro que cada codificador tem suas próprias preferências, seus próprios princípios, suas próprias visões sobre a estrutura do programa. Para resolvê-los - você precisa escrever o código e testá-lo. Ao descobrir as regularidades e erros, você terá uma idéia de qual estrutura de programa se adapta melhor a você.

Implementações específicas - no KodoBase, muitas opções. Pegue qualquer um deles e os explore, use e modifique.

O que mais você precisa?

Estou olhando para a kodobase, é claro. Não tenho dúvidas sobre o código de apenas um autor, metaquotes, é desenvolvedor oficial. Estou aprendendo com ele. O homem lá escreve logicamente e usa funções embutidas ao máximo. Mas ele tem muito poucos Conselheiros Especializados. Em geral, há muitos códigos questionáveis escritos por diferentes autores, e muitas vezes acontece que você olha para o código e não consegue entender por que ele foi escrito de tal maneira. Bem, estou surpreso como as pessoas estão confiantes nestas implementações. Talvez eu esteja muito preocupado, é claro. Eu provavelmente deveria escrevê-lo apenas para que funcione, como eles disseram aqui.

 
Mas me parece que mais cedo ou mais tarde haverá algum tipo de consenso em código aberto. Afinal, as pessoas escrevem a mesma coisa uma e outra vez, apenas com variações. Então, por que não fazer peças prontas e discuti-las? Como aqui, temos uma implementação de um gerador de fluxo líquido e agora ele é trazido para a velocidade e funcionalidade ideais. Eu o farei. Eu simplesmente não tenho conhecimento suficiente para utilizar as soluções ideais. Vou desenhar um esquema, e o que me vier à cabeça primeiro, será isso. Ou pedirei emprestado a outra pessoa com o mesmo nível de conhecimento. Mas se fizéssemos exemplos de implementação, pessoas experientes e eruditas se juntariam, consertariam algo, discutiriam entre si e chegariam a um consenso. No final, todos receberiam um código de qualidade, ou pelo menos um exemplo a ser seguido.
 
Ivan_Invanov:
Mas me parece que, mais cedo ou mais tarde, haverá um consenso em código aberto. Afinal de contas, as pessoas escrevem a mesma coisa de tempos em tempos, apenas com variações. Então, por que não fazer peças prontas e discuti-las? Como aqui, temos uma implementação de um gerador de fluxo líquido e agora ele é trazido para a velocidade e funcionalidade ideais. Eu o farei. Eu simplesmente não tenho conhecimento suficiente para utilizar as soluções ideais. Agora vou desenhar um esquema, e o que vier primeiro à minha mente, será isso. Ou pedirei emprestado a outra pessoa com o mesmo nível de conhecimento. Mas se fizéssemos exemplos de implementação, pessoas experientes e eruditas se juntariam, consertariam algo, discutiriam entre si e chegariam a um consenso. No final, todos receberiam um código de qualidade, ou pelo menos um exemplo a ser seguido.

A idéia é boa. A base de Igor Kim foi muito útil na época, muito obrigado por seu trabalho :)

 
Ivan_Invanov:

Olhando para a kodobase, é claro. Não tenho dúvidas sobre o código por parte de apenas um autor, metaquotes, que é o desenvolvedor oficial. Estou aprendendo com ele. O homem lá escreve logicamente e usa ao máximo as funções embutidas. Mas ele tem muito poucos Conselheiros Especializados. Em geral, há muitos códigos questionáveis escritos por diferentes autores, e muitas vezes acontece que você olha para o código e não consegue entender por que ele foi escrito de tal maneira. Bem, estou surpreso como as pessoas estão confiantes nestas implementações. Talvez eu esteja muito preocupado, é claro. Talvez eu tenha que escrevê-lo apenas para que funcione, como dizem aqui.

Essa é outra questão.

Note que às vezes eu olho para meu próprio código e não consigo entender por que ele está escrito em um lugar tão particular. É por isso que eu tento comentar tais fragmentos em grande detalhe tentando mencionar todas as sutilezas. Mas ainda vejo regularmente que não tenho considerado algumas coisas.

Além disso, utilizo o seguinte código (para determinar o tipo de execução), que foi escrito por um usuário muito autoritário do fórum:

ENUM_ORDER_TYPE_FILLING CSymbolInfo::GetTypeFilling(string strSymbol,ENUM_ORDER_TYPE_FILLING otfFilingType)
{
   #ifndef __MQL5__
      return(otfFilingType);
   #else // __MQL5__
      
   const ENUM_SYMBOL_TRADE_EXECUTION steExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(strSymbol, SYMBOL_TRADE_EXEMODE);
   const int iFillingMode = (int)::SymbolInfoInteger(strSymbol, SYMBOL_FILLING_MODE);

   return((iFillingMode == 0 || (otfFilingType >= ORDER_FILLING_RETURN) || ((iFillingMode & (otfFilingType + 1)) != otfFilingType + 1)) ?
         (((steExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (steExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((iFillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          otfFilingType);
  
   #endif // __MQL5__
};

Além disso, o próprio forumista disse quando lhe perguntaram que não se lembra mais, é que este código já foi testado muitas vezes e pode ser confiado.

Bem, se eu tiver a chance de substituir essas estúpidas "perguntas" por declarações reais, vou descobrir como fazer... Por enquanto...

 
É melhor fazer um diagrama de blocos e escrever diretamente com esses blocos, eu fiz isso no início, depois você começa a usar funções, mas eu só uso o OOP de outras pessoas. Em geral, você tem que escrever de tal forma que possa facilmente fazer mudanças em um pedaço de código sem ter que reescrever tudo.