Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 757

 
User_mt5:


En general, existe un concepto llamado "gradiente". Es un indicador que describe la "inclinación" (de un gráfico). Para esta industria, este indicador puede expresarse en términos de punto/tiempo. Es esencialmente una tasa. Este indicador no dependerá de la escala, ya que no está unido al gráfico. Utilice un gradiente y no utilice un ángulo.


¿Cómo se calcula este gradiente?

¿Hay alguna manera de que pueda desarrollar su idea? Tenga en cuenta en qué hilo del foro he escrito mi pregunta.

 
igorbel:

¿Cómo se calcula este gradiente?

¿Hay alguna manera de que pueda desarrollar su idea? Ten en cuenta en qué hilo del foro he escrito mi pregunta.

No tengo ni idea.

Estoy hablando de matemáticas simples. El gradiente es la velocidad. La velocidad en sí es cuando el tiempo está en el denominador. En el uso familiar es la velocidad de un coche, expresada en km/hora. Pero la velocidad en general puede ser diferente. Por ejemplo, la velocidad de escritura de código de software se mide en número de líneas por día. En el caso de un gráfico de precios, la velocidad se mide en número de puntos por minuto. Convencionalmente, podemos suponer que si el gradiente (pendiente, tasa de ascenso) en alguna parte del gráfico es superior a, por ejemplo, 100 puntos/minuto, entonces esta parte puede considerarse una tendencia, y si es menor, un plano.

 

Hola 2017.07.07_15:55 GMT+3. No lo entiendo. Parece que debería haber una señal, pero en el probador de estrategias no la hay. ¿En qué se diferencia entonces su alabado probador de MT5 del de MT4? Lo escribí casi como en la Media Móvil estándar.mq5 . Pero logré probar el Asesor Experto en mi cuenta demo. Abrió una operación pero tuvo que cerrarla sola. He arreglado el cierre. Pero he escrito algo más y el EA ha dejado de abrir operaciones de nuevo. Cero errores y cero advertencias no son un indicador del buen estado del Asesor Experto. Me quedé atascado aquí. ¿Cómo sé que dice que el Asesor Experto no está funcionando? Tengo que volver a molestar a Karputov. Si hubiera recibido la lista completa de prohibiciones, lo habría hecho yo mismo. Voy a publicar los archivos, aunque no todos. 16:06 GMT+3.

Archivos adjuntos:
 

¡Por favor, ayuda!

Para obtener el valor del indicador en MQL4 es suficiente la siguiente función

double CMAf(int index)
  {
   return NormalizeDouble(iMA(Symbol(),0,period_CMA,0,0,0,index),Digits);
  }
¿Cómo conseguir un análogo para MQL5?
 
-Aleks-:

¡Por favor, ayuda!

Para obtener el nombre de un indicador en MQL4, basta con una simple función

¿Cómo conseguir un análogo para MQL5?

¿Has mirado la ayuda deiMA?

Paso uno: En la "cabecera", declare una variable para almacenar el mango del indicador iMA:

Segundo paso: crear el manejador del indicador en OnInit().

//+------------------------------------------------------------------+
//|                                                       iMAGet.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int                  ma_period=10;                 // period of ma 
input int                  ma_shift=0;                   // shift 
input ENUM_MA_METHOD       ma_method=MODE_SMA;           // type of smoothing 
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;    // type of price 
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // timeframe 
//---
int                        handle_iMA;                   // variable for storing the handle of the iMA indicator 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iMA
   handle_iMA=iMA(Symbol(),period,ma_period,ma_shift,ma_method,applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double ma_0=iMAGet(0);
   double ma_1=iMAGet(1);

   Comment("MA #0: ",DoubleToString(ma_0,Digits()+1),"\n",
           "MA #1: ",DoubleToString(ma_1,Digits()+1));
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA                                 |
//+------------------------------------------------------------------+
double iMAGet(const int index)
  {
   double MA[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(MA[0]);
  }
//+------------------------------------------------------------------+


Y el resultado (la retícula en la captura de pantalla está fijada en la barra nº 1):

iMAGet

Archivos adjuntos:
iMAGet.mq5  7 kb
 
Vladimir Karputov:

¿Has visto la ayuda deiMA?

Primer paso: declarar una variable en la "cabecera" para almacenar el indicador iMA:

Segundo paso: crear el manejador del indicador en OnInit().

Y el resultado (la retícula en la captura de pantalla está ajustada a la barra nº 1):

Gracias por la respuesta.

En MQL4 todo se declara en una función - por lo que hay un conjunto de funciones que se activan dependiendo de la configuración de EA. Si no me equivoco, en tu caso la memoria se asignará para decenas de indicadores diferentes que el ST permite utilizar, lo cual no es racional, ¿o no se asignará la memoria?

 

¿Es posible llamar a una función de clase sin tener un objeto específico de esa clase? Así que sería algo así:

class test
  {
public:
                     test(void);
                    ~test(void);
  public: void PrintInfo (){Print ("Class test");}
  };
//---
void OnStart()
  {
      test.PrintInfo() ;
  }

¿O es necesario crear un objeto? Incluso si esta función se refiere a la definición de la propia clase, en lugar de una instancia de la misma.

 

Si la función no necesita acceder a las variables de la clase, hágala estática.

class test
{
public:
   test();
   ~test();

   static void PrintInfo()
   {
      Print( "Class test" );
   }
};

void OnStart()
{
   test::PrintInfo();
}
 
Koldun Zloy:

Si la función no necesita acceder a las variables de la clase, hágala estática.

Gracias, es justo lo que se necesita.
 

Obtención de errores: ¿qué ocurre? En MQL4 funciona...


   double arrFibo[17]=
     {
      0,
      0.236,
      0.382,
      0.5,
      0.618,
      0.764,
      1,
      1.236,
      1.382,
      1.5,
      1.618,
      2.0,
      2.236,
      2.382,
      2.5,
      2.618,
      2.764,
      3        //Всего уровней 17 + 0
     };
'{' - demasiados inicializadores TZ_Sky_and_Ground_V_04.mq5 2484 6
Razón de la queja: