Auto-aprendizagem da linguagem MQL5 a partir do zero - página 80

 

Há erros, portanto o código não funcionará como o autor pretendia. Você tem que descobrir. Você tem o código, você tem os cartões para entregar.


Pelo que você mostrou, vejo que ou as velas são menos de 60, ou o cabo de um dos indicadores é INVÁLIDO, o que significa que os parâmetros são enviados para ele incorretamente. Ou há um erro em outra parte do código que eu não vejo.

Cumprimentos, Vladimir.

Oops, Alexey;)

 
MrBrooklin #:

Eu mesmo consegui descobrir onde está o problema, mas a pergunta era sobre outra coisa: o que esses erros podem afetar e o que devo mudar no código para eliminá-los?

Atenciosamente, Vladimir.

Se ocorrer um erro, o Expert Advisor não será anexado ao gráfico.

Você não tem que fazer nada. O que já foi feito - no caso de um erro, o Expert Advisor é destacado do gráfico

e informa o usuário.

Este erro não ocorre praticamente, exceto quando o computador está em uma bagunça.

==

No entanto, se isso acontecer sempre durante o processo de desenvolvimento...

Isso significa que o indicador não é chamado corretamente - fixar parâmetros indicadores.

 
Dmitry Fedoseev #:

Se ocorrer um erro, a EA não anexará ao gráfico.

Você não precisa fazer nada. O que já foi feito - no caso de um erro, o Expert Advisor se desprende do quadro

e informa o usuário.

Este erro não ocorre praticamente, exceto quando o computador está em uma bagunça.

==

No entanto, se isso acontecer sempre durante o processo de desenvolvimento...

Isso significa que o indicador é chamado incorretamente - fixar os parâmetros do indicador.

Obrigado, Dmitry, por sua resposta abrangente e compreensível!

Cumprimentos, Vladimir.

 
SanAlex #:

aqui funciona - talvez você não esteja definindo o período corretamente

Obrigado pela dica!!! Na verdade, o problema era que não era possível definir os períodos para ambos os indicadores a partir de "zero" e acima nas configurações do testador. Eu deveria tê-los colocado pelo menos de "um" e acima.

Obrigado a todos por sua participação!

Cumprimentos, Vladimir.

 
MrBrooklin #:

P.S. Você deve remover o código da EA "despojos", porque estes "despojos" incomodam muita gente. Eu já removi o meu.

Aqueles que são muito irritantes os deixam ir para o bosque periodicamente tomando a mãe-malte ou tintura de agárico de mosca.

Eu também não gosto desses chinelos, mas simplesmente não os observo.

 
Poucas pessoas querem aprender a língua. Por que isso seria
 
Vladimir Baskakov #:
Decidi aprender a língua, mas não há muitas pessoas que tenham começado a aprendê-la. Para quê?

Vladimir, é muito simples. Eu aprendi o que precisava aprender. Agora eu pego EAs diferentes e os faço para mim mesmo. O mais importante é que agora eu não olho mais para a MQL5 como os caracteres chineses, mas como uma peça normal de software. Muito obrigado a todos os profissionais que me ajudaram no meu auto-aprendizagem!

Cumprimentos, Vladimir.

 
MrBrooklin #:


Prefiro ter um spoiler do que baixar um arquivo e enfiá-lo em minha caixa de areia. )

 

Bom dia a todos e bom humor!

Auto-estudo contínuo da linguagem de programação MQL5. Chegou o momento em que tive que lidar com arrays. Decidi calcular o tamanho do lote em função do risco especificado nos parâmetros de entrada. Não tenho erros ou avisos após a compilação, mas o código de função não funciona. Você pode me dizer, por favor, onde está o erro?

Atenciosamente, Vladimir.

input double   Risk0=1.0;           //Риск (% от баланса)
.
.
.
.
input double   Risk9=1.0;           //Риск (% от баланса)

//+------------------------------------------------------------------+
//| Функция Money_Management рассчитывает размер лота в зависимости  |
//|  от риска, заданного во входных параметрах советника.            |
//+------------------------------------------------------------------+
double Money_Management()
  {
   static int Risk[];
   int Number=0;
//----+ Объвляем переменную для хранения размеров массивов переменных
   static int Size_ = 0;
//----+ Изменяем размер массивов переменных
   if(Number + 1 > Size_)
     {
      uint size = Number + 1;
      //---- Предварительно обнуляем ячейки массива
      Risk[Number] = false;
     }
   if(Risk[0] != Risk[Number])
     {
      Risk[Number] = Risk[0];
     }
   double Lots=AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk[Number]/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);
  }
//+------------------------------------------------------------------+
 
MrBrooklin da linguagem de programação MQL5. Chegou o momento em que tive que lidar com arrays. Decidi calcular o tamanho do lote em função do risco especificado nos parâmetros de entrada. Não tenho erros ou avisos após a compilação, mas o código de função não funciona. Você pode me dizer, por favor, onde está o erro?

Atenciosamente, Vladimir.

Espero sinceramente que não o tenha escrito...

Aqui está uma função de trabalho

/********************************************************************\
|   Calculate optimal lot size     Расчет объема лота                |
/********************************************************************/
double contractSize(double Lot)
 {
  double volume = Lot > 0.0 ? Lot : AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,
         v = volume,
         volumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP),
         minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN),
         maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  v = round(volume/volumeStep)*volumeStep;
  return(fmin(maxLot, fmax(minLot, v)));
 }/******************************************************************/

Tudo o que você precisa fazer é inserir a quantidade de risco, para que não conte a partir da margem livre total...

Razão: