Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1497

 
¡HOLA GENTE ! Ayuda POR FAVOR tiene un informante, necesita ser REMOvido ... ¿Puedo hacer que cuente el beneficio neto, sin canjes, comisiones? Muy agradecido de antemano
Archivos adjuntos:
 
ANDREY:

Buenos días a todos!
Pregunta sobre la sentencia for() en mql4. La cabecera del bucle contiene una disminución o aumento secuencial de algún valor de la variable

for(int A=14; A>=0;A--) o for(int A=0; A<14;A++) o for(int A=0; A<14;A=+2) Se supone que los tamaños de la variable A aumentan , o disminuyen siempre igual en los ejemplos dados 1 o 2.

PREGUNTA: Si una variable es un valor de tiempo (1 (minuto),5,15,30,60,240,1440), es obvio que los tamaños de aumento o disminución de esta variable no pueden ser iguales. En este caso, cómo formatear la cabecera del for para que la variable A comience con 1 y luego se incremente en cada iteración en el número de minutos requerido, de forma no uniforme.

El ejemplo de la variable A es un caso especial. En general, ¿cómo puedo formatear un bucle si la variable de la cabecera del bucle debe modificarse de forma no uniforme en los intervalos deseados?
¿O hay algún otro operador que deba utilizarse para estos casos? Pero como me parece que los otros operadores son muy voluminosos en comparación con for. Por favor, ayúdeme a resolver mi problema exactamente con la ayuda de la sentencia for, y exactamente con su cabecera. Porque para resolver mi problema dentro del cuerpo de la sentencia for, por supuesto, se pueden usar sentencias if, pero será muy engorroso y la sentenciafor tendrá que hacer 1440 iteraciones para filtrar 7 valores correctos.
Gracias.

Aquí hay un error. Debería ser for(int A=0; A<14;A+=2)

Lo más fácil que se me ocurre es poner los puntos en el array

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

Lo más sencillo que se me ocurre es marcar los periodos en una matriz

Gracias, a mí también me vendría bien)

 
Alexey Viktorov:

Aquí hay un error. Debería ser for(int A=0; A<14;A+=2)

Lo más fácil que se me ocurre es almacenar los periodos en un array


Muchas gracias por el consejo. Resultó ser mucho más sencillo de lo que pensaba.
Solo entiendo una cosa. El nombre de la matriz es per. ¿Y ENUM_TIMEFRAMES es un identificador de un tipo de variable? No he encontrado dicho identificador en mql4 Reference. Sólo hay

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

Muchas gracias por el consejo. Resultó ser mucho más fácil de lo que pensaba.
Sólo hay una cosa que no entendí. El nombre de la matriz por. ¿Y ENUM_TIMEFRAMES es un identificador del tipo de variable? No he encontrado dicho identificador en mql4 Reference. Sólo hay

aquí

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

aquí

¿He entendido bien que me has enviado información sobre mql 5? ¿O esta información también se aplica a mql 4?

 
ANDREY:

¿He entendido bien que me has enviado información sobre mql 5? ¿O esta información también se aplica a mql 4?

Lo he corregido.
 
MakarFX:
Lo he corregido.

Gracias.

 
ANDREY:

Gracias.

Una pequeña recomendación: acostúmbrese inmediatamente a ENUM_TIMEFRAMES y olvídese de la representación numérica como número de minutos.

En primer lugar PERIOD_W1 es más informativo que 10080, es más claro que es una semana.

En segundo lugar, en mql5 el periodo no se corresponde con el número de minutos y no será un problema innecesario durante la migración a mql5, y es inevitable.

Bueno, si realmente necesitas el número de minutos en un período, entonces puedes

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
Chicos, ayudadme a adjuntar una alerta al indicador.
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }
Razón de la queja: