Autoaprendizaje del lenguaje MQL5 desde cero - página 80

 

Hay errores, por lo que el código no funcionará como el autor pretendía. Tienes que descubrirlo. Tienes el código, tienes las cartas a mano.


Por lo que has mostrado, veo que o bien las velas son menores de 60, o bien el mango de uno de los indicadores es INVÁLIDO, lo que significa que los parámetros se le envían de forma incorrecta. O hay un error en otra parte del código que no veo.

Saludos, Vladimir.

Oops, Alexey;)

 
MrBrooklin #:

Yo mismo he conseguido averiguar dónde está el problema, pero la pregunta era sobre otra cosa: ¿a qué pueden afectar estos errores y qué debo cambiar en el código para eliminarlos?

Sinceramente, Vladimir.

Si se produce un error, el Asesor Experto no se adjuntará al gráfico.

No tienes que hacer nada. Lo que ya se ha hecho - en caso de error, el Asesor Experto se desprende del gráfico

e informa al usuario.

Este error no se produce prácticamente, salvo cuando el ordenador está desordenado.

==

Sin embargo, si siempre ocurre durante el proceso de desarrollo...

Significa que el indicador no se llama correctamente - arreglar los parámetros del indicador.

 
Dmitry Fedoseev #:

Si se produce un error, el EA no se adjuntará al gráfico.

No necesitas hacer nada. Lo que ya se ha hecho - en caso de error, el Asesor Experto se separa del gráfico

e informa al usuario.

Este error no se produce prácticamente, salvo cuando el ordenador está desordenado.

==

Sin embargo, si siempre ocurre durante el proceso de desarrollo...

Significa que el indicador se llama de forma incorrecta - arregle los parámetros del indicador.

Gracias, Dmitry, por tu exhaustiva y comprensible respuesta.

Saludos, Vladimir.

 
SanAlex #:

aquí funciona - quizás no estás poniendo el punto correctamente

¡¡¡Gracias por el consejo!!! Efectivamente, el problema era que no se podían establecer los periodos de ambos indicadores a partir de "cero" en la configuración del probador. Debería haberlos puesto al menos a partir de "uno".

Gracias a todos por su participación.

Saludos, Vladimir.

 
MrBrooklin #:

P.D. Deberías eliminar los "despojos" del código de EA, porque estos "despojos" molestan a mucha gente. Yo ya he quitado el mío.

A los que son muy molestos dejarlos ir a los bosques tomando periódicamente agripalma o tintura de agárico de mosca.

A mí tampoco me gustan esas agujetas, pero es que no las miro.

 
No hay mucha gente que quiera aprender el idioma. ¿Por qué sería
 
Vladimir Baskakov #:
He decidido aprender el idioma, pero no hay mucha gente que haya empezado a aprenderlo. ¿Para qué?

Vladimir, es muy sencillo. He aprendido lo que necesitaba aprender. Ahora tomo diferentes Asesores Expertos y los desarrollo para mis propias necesidades. Lo más importante es que ahora ya no veo a MQL5 como los caracteres chinos, sino como una pieza normal de software. Muchas gracias a todos los profesionales que me han ayudado en mi autoestudio.

Saludos, Vladimir.

 
MrBrooklin #:


Prefiero tener un spoiler que descargar un archivo y meterlo en mi caja de arena. )

 

¡Buenos días a todos y buen humor!

Continuación del autoaprendizaje del lenguaje de programación MQL5. Llegó el momento en que tuve que tratar con matrices. He decidido calcular el tamaño del lote en función del riesgo especificado en los parámetros de entrada. No tengo errores ni advertencias después de la compilación, pero el código de la función no funciona. ¿Puede decirme, por favor, dónde está el error?

Sinceramente, 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 del lenguaje de programación MQL5. Llegó el momento en que tuve que tratar con matrices. He decidido calcular el tamaño del lote en función del riesgo especificado en los parámetros de entrada. No tengo errores ni advertencias después de la compilación, pero el código de la función no funciona. ¿Puede decirme, por favor, dónde está el error?

Sinceramente, Vladimir.

Espero que no hayas sido tú quien escribió esto...

Esta es una función que funciona

/********************************************************************\
|   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)));
 }/******************************************************************/

Todo lo que tiene que hacer es introducir la cantidad de riesgo, para que no cuente del margen libre completo...