Discussão do artigo "Crie o seu próprio robô de negociação em 6 passos!"

 

Novo artigo Crie o seu próprio robô de negociação em 6 passos! foi publicado:

Se você não sabe como as classes de negócio são construídas, e se assusta com as palavras "Programação orientada a objeto", então, este artigo é para você. Na realidade, você não precisa saber os detalhes para escrever seu próprio módulo de sinais de negociação. Apenas siga algumas regras simples. Todo o resto será feito pelo Assistente MQL5, e você terá um robô de negócio pronto para uso!

Autor: MetaQuotes Software Corp.

 
E tudo ficaria bem - os robôs de negociação são criados com 5 cliques do mouse, podem ser testados em um testador para o sistema de negociação оптимизации параметров, você pode colocar o robô resultante para negociar em sua conta e não precisa modificar nada com um arquivo.
Esse robô pode ser autorizado a operar? Afinal, a biblioteca de classes de negociação não contém o processamento de vários erros, que era uma condição necessária até mesmo no campeonato, quanto mais na negociação real. É mais correto escrever que você pode criar um Expert Advisor em cinco cliques apenas para uma verificação rápida das ideias no testador, mas esse Expert Advisor não será adequado para negociação.
 
Obrigado por seu trabalho! E obrigado pela foto com a caixa e os cubos! Sistematiza :-)
 

para continuar...

Pensei em converter as linhas deste exemplo:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

No algoritmo:

1) duas matrizes:

a primeira contém m_method_fast e m_method_slow

o segundo contém os valores de enumeração ENUM_MA_METHOD.

2) Em um loop, pegando o valor da primeira matriz, verifique se ele é encontrado na segunda.

Você pode me dizer como implementar isso?

Entendo que é necessário conectar o CArray. Mas de que tipo?

Quem puder, por favor, escreva uma parte do código, porque coisas básicas e elementares, e com sintaxe que ainda não consigo entender.

Muito obrigado!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 
bivmail:

para continuar...

Pensei em converter as linhas deste exemplo:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

No algoritmo:

1) duas matrizes:

a primeira contém m_method_fast e m_method_slow

o segundo contém os valores da enumeração ENUM_MA_METHOD.

2) Em um loop, pegando o valor da primeira matriz, verifique se ele é encontrado na segunda.

Você pode me dizer como implementar isso?

Entendo que é necessário conectar o CArray. Mas de que tipo?

Quem puder, por favor, escreva uma parte do código, porque coisas básicas e elementares, e com sintaxe que ainda não consigo entender.

Obrigado!

Assim:

func(int& array1[],int& array2[])
  {
   int total1=ArraySize(array1);
   int total2=ArraySize(array2);
//---
   for(int i=0;i<total1;i++)
     {
      for(int j=0;j<total2;j++)
        {
         if(array1[i]==array2[j])
           {
            // encontrou
           }
        }
     }
  }
 

Sim, eu já cheguei a esse ponto em C++ para iniciantes :-)

Exceto pelo fato de que esse tipo de dados ENUM_MA_METHOD não existe

Como posso descobrir em que tipo de dados essa enumeração consiste? É possível fazer um loop pela própria enumeração ENUM_MA_METHOD?

Vejo duas maneiras agora:

//primeira maneira de descrever as duas matrizes

  ENUM_MA_METHOD l_array_enum_ma_method[3];

  l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

  print("array size %d", ArraySize(l_array_enum_ma_method));

  print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD));

  

   ENUM_MA_METHOD l_array_select_method[1];

   l_array_select_method[0]=m_MethodFast;

   l_array_select_method[1]=m_MethodSlow;

   //mais de acordo com o esquema

   

   /segunda maneira, conecte a biblioteca

   //#include <Arrays\ArrayInt.mqh>

     CArrayInt *l_array_enum_ma_method=new CArrayInt;

   l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

   l_array_enum_ma_method.Sort();

   //--- elemento de pesquisa

   if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found");

   else                        printf("Element not found");

   //--- excluir matriz

   delete l_array_enum_ma_method;

Na segunda maneira, você precisa conectar uma biblioteca de um tipo específico, e que tipo é ENUM_MA_METHOD?

hmm... estranho, eu cliquei em responder e acabou sendo uma nova postagem....

 
Veja como inserir o código corretamente.
 
bivmail:

Sim, eu já cheguei a esse ponto em C++ para iniciantes :-)

Exceto pelo fato de que esse tipo de dados ENUM_MA_METHOD não existe

Como posso descobrir em que tipo de dados essa enumeração consiste? É possível fazer um loop pela própria enumeração ENUM_MA_METHOD?

Vejo duas maneiras agora:

Na segunda maneira, você precisa conectar uma biblioteca de um tipo específico, e que tipo é ENUM_MA_METHOD?

hmm... estranho, eu cliquei em responder e acabou sendo uma nova postagem....

Primeira maneira:

 ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};
//--- mais abaixo na linha

Segunda forma:

#include <Arrays\ArrayInt.mqh>

CArrayInt l_array_enum_ma_method;
//---
l_array_enum_ma_method.Add(MODE_SMA);
l_array_enum_ma_method.Add(MODE_EMA);
l_array_enum_ma_method.Add(MODE_SMMA);
l_array_enum_ma_method.Add(MODE_LWMA);
//--- mais abaixo na linha

Não consigo entender por que são necessárias tantas etapas?

 

oops... muito obrigado, é isso que estou tentando fazer... off.

No primeiro caso, já tinha visto essa forma de registro, mas ainda não tinha percebido o que eu precisava,

e, no segundo caso, fiquei confuso com ArrayInt. Pensei que, como Int, isso significava que apenas o valor numérico era armazenado, mas ,

parece que o compilador converte MODE_SMA em um número e, ao obter o valor de volta, será necessário realizar uma conversão implícita (usando parênteses) para o tipo(ENUM_MA_METHOD), ou seja, algo semelhante ao seguinte.

  ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

P.S. Na terceira seção 3. Métodos para definir parâmetros, devemos apagar linhas declaradas prematuramente, acho que
:

 CiCustom          m_fast_ma;        // indicador como um objeto
   CiCustom          m_slow_ma;        // indicador como um objeto
 
bivmail:

P.S. Na terceira seção 3. Métodos para definir parâmetros, acho que devemos apagar as linhas declaradas prematuramente:

Removido, obrigado.
 

Eu estava ficando animado, mas não consigo contornar isso (comm - li sobre transferência de endereço de memória, mas também não funcionou dessa forma):

O compilador retorna o erro 'm_MethodFast' - expressão constante necessária, ' m_MethodSlow' - expressão constante necessária

É claro que essas são perguntas para leigos. Talvez eu devesse fazer essas perguntas em outro tópico, para não atrapalhar o artigo?

//primeira maneira de descrever as duas matrizes
//int *Finger_m_MethodFast;
//int *Finger_m_MethodSlow;
//Finger_m_MethodFast=&m_MethodFast;
//Finger_m_MethodFast=&m_MethodSlow;
// int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast};
   ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow};
   ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};

   int total_array1=ArraySize(l_array1_select_method);
   int total_array2=ArraySize(l_array2_enum_ma_method);
   bool NoErrorsFlag=false;
   for(int i_array1=0;i_array1<total_array1;i_array1++)
     {

      for(int i_array2=0;i_array2<total_array2;i_array2++)
        {
         if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2])
           {
            NoErrorsFlag=true;
           }
        }
      if(!NoErrorsFlag)
        {
         PrintFormat("Tipo de suavização inválido %s média móvel!",EnumToString(l_array1_select_method[i_array1]));
        }

     }

   if(!NoErrorsFlag)
     {
      return(false);
     }