Especialistas: Multik

 

Multik:

Este Expert Advisor se baseia na ideia apresentada no artigo Criando um Consultor Especialista, que negocia em um número de instrumentos.

Ele negocia os pares EURUSD e GBPUSD no gráfico diário. Ele compra quando a MA está para cima e vende quando a MA está para baixo.

Ele utiliza um função especial para o gerenciamento do dinheiro. O período de teste foi o ano passado.

Expert Advisor multimoeda

Autor: Andrew Kornishkin

 

Vamos normalizar todos os pares pelo instrumento atual?

dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits);      // MA no local 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits);      // MA no local 1-2
 
Valmars:

Vamos normalizar todos os pares pelo instrumento atual?


Sim, há um erro aqui. Além disso, a função de definir uma nova barra pode ser implementada sem usar a função de cópia de tempo.
 
Valmars:

Vamos normalizar todos os pares pelo instrumento atual?


E como implementar isso corretamente para que não haja avisos?

Na versão original, é assim:

     int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
     dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_);      // MA no local 2-3
     dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_);      // MA no local 1-2
[Excluído]  
AM2:

Qual é a maneira correta de implementá-lo sem avisos?

Na versão original, é assim:

O que +4 tem a ver com isso? É assim que deve ser logicamente

int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // MA no local 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // MA no local 1-2
 
Interesting:

O que isso tem a ver com +4? É para ser lógico.

O aviso também é assim:

possível perda de dados devido à conversão de tipos Multik.mq5 218 18

 
AM2:

O aviso também é assim:

possível perda de dados devido à conversão de tipos Multik.mq5 218 18

Para evitar os avisos, você precisa fazer a conversão da seguinte forma

int Digits_ = (int)SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
 

Bom trabalho, mas o multi-instrumento não perde o sentido quando você negocia pares correlacionados com as mesmas configurações? Eu esperaria que seus saques ocorressem na mesma época e isso pode ser um problema. Infelizmente, porém, todos os pares de moedas são tão correlacionados que isso pode ser inevitável. Na verdade, também negocio os pares EUR/USD e GBP/USD juntos, mas com um deles uso um seguidor de tendência e com o outro uso um EA do tipo reversão, topos e fundos.

 
sergey1294:

Se não quiser receber avisos, você deve fazer a conversão desta forma.

Obrigado, está funcionando!
 

request.volume = Money_M();

Esse EA é um ótimo exemplo de código organizado e tem ótimos comentários. No entanto, tenho uma pergunta relacionada à sua função de tamanho de lote chamada Money_M(). Qual é e onde está a árvore de decisão por trás disso?

Tentei pesquisar no site de suporte, mas não consegui encontrar nenhuma referência e ela não parece estar vinculada a uma classe associada.

[Excluído]  
bdwezensky:

request.volume = Money_M();

Esse EA é um ótimo exemplo de código organizado e tem ótimos comentários. No entanto, tenho uma pergunta relacionada à sua função de tamanho de lote chamada Money_M(). Qual é e onde está a árvore de decisão por trás disso?

Tentei pesquisar no site de suporte, mas não consegui encontrar nenhuma referência e ela não parece estar vinculada a uma classe associada.

double Money_M()
  {
   double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1) Lots=NormalizeDouble(Lots,1);
      else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }

Essa função é usada para calcular o tamanho dos lotes de negociação.

double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;

Nessa string, o tamanho calculado dos lotes de negociação. O cálculo é realizado com dinheiro livre(ACCOUNT_FREEMARGIN). Risco = 10% dos fundos livres disponíveis.

Lots=MathMin(5,MathMax(0.1,Lots));
Nessa linha, é executada a normalização dos lotes de negociação. 0,1 <= Lote <= 5,0