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

 
¿Cómo sé que no hayOBJ_RECTANGLE en las barras N?
 
neverness:

¿Ha cambiado algo realmente en MT5?

No existe tal cosa ni en mt4 ni en mt5.

En mt5 hay incluso un error con la visualización del separador en el período actual, en tiempos sobre H2

 
Ghabo:
¿Cómo sé que no hayOBJ_RECTANGLE en N barras?
¿Intentarlo de esta manera tal vez?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());
  Print(n);
 
Vitaly Muzichenko:

No existe tal cosa ni en mt4 ni en mt5.

En mt5 hay incluso un error al mostrar el separador en el periodo actual, en tiempos superiores a H2

Por fin he visto la única "respuesta constructiva" a mi pregunta en toda esta "discusión".

En cuanto a los errores, están presentes en todos los separadores-semanas en el marco actual (último) tanto en MT4 como en MT5.

En la última semana el separador MT4/MT5 dibuja el separador 7 días en lugar de 5.

Pero esa no es la cuestión. Los errores siempre han estado y estarán. Todo esto puede corregirse si existe un código de programa para dibujar delimitadores.

No son los errores los que me sorprenden, es algo totalmente distinto.

¿A nadie se le ha ocurrido escribir un programa para dibujar delimitadores en la zona prevista durante todo el tiempo de existencia de MT4/MT5?

Después de todo, el programa es el más sencillo.

Todo lo que necesita saber es la posición del último divisor y la "solución" del tiempo a lo largo del eje X (es decir, qué intervalo de tiempo ocupa 1 píxel).

Y hasta ahora nadie ha hecho nada...

Eso sí que me sorprende.

De nuevo tendré que hacerlo todo yo.

 
Igor Makanu:

No es difícil, pero parece que no entiendes cómo funcionan los indicadores en MT y cuáles son sus ventajas

Probablemente tengas razón.

Hay una anécdota matemática:

Se pregunta a un matemático: "¿Cómo se hierve el agua en una tetera?

El matemático responde: - Coge una tetera vacía, vierte agua en ella, ponla en la cocina, enciende la cocina y espera a que el agua hierva.

- DE ACUERDO. ¿Pero qué pasa si la tetera ya está llena? - pregunta el matemático.

- Vierte el agua de la tetera y resuelve el problema de la forma anterior. - responde el matemático.

Así que ahí tienes.

Esta broma es sobre ti.

 
neverness:

Esta broma es sobre ti.

hmm, no sé si sonreír o .... Si conoces un terminal de trading que cumpla todos tus caprichos, ¿para qué? Yo estoy 100% satisfecho con MT4/5, puedo hacer de todo con él, mantener el indicador que dibuja periodos D1 en el gráfico, si te interesas por la programación, modificarlo para que se adapte a tus necesidades... No creo que seas capaz de hacerlo ....

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot line1
#property indicator_label1  "Period"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label2  "Period"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input int      Days=3;
//--- indicator buffers
double         Pmax[],Pmin[];
bool run=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pmax);
   SetIndexBuffer(1,Pmin);
   run=true;
   switch(_Period)
     {
      case PERIOD_M1:   SetIndexShift(0,1440*Days);SetIndexShift(1,1440*Days);   break;
      case PERIOD_M5:   SetIndexShift(0,288*Days); SetIndexShift(1,288*Days);    break;
      case PERIOD_M15:  SetIndexShift(0,96*Days);  SetIndexShift(1,96*Days);     break;
      case PERIOD_M30:  SetIndexShift(0,48*Days);  SetIndexShift(1,48*Days);     break;
      case PERIOD_H1:   SetIndexShift(0,24*Days);  SetIndexShift(1,24*Days);     break;
      case PERIOD_H4:   SetIndexShift(0,6*Days);   SetIndexShift(1,6*Days);      break;
      default: run=false; SetIndexShift(0,0); SetIndexShift(1,0);ArrayInitialize(Pmax,EMPTY_VALUE);ArrayInitialize(Pmin,EMPTY_VALUE); break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(prev_calculated==0)
     {
      run=true;
      ArrayInitialize(Pmax,EMPTY_VALUE);
      ArrayInitialize(Pmin,EMPTY_VALUE);
     }
   if(run)
     {
      int i=0,lastperiod=TimeDay(time[0]);
      double maxvalue;
      if(!ChartGetDouble(ChartID(),CHART_PRICE_MAX,0,maxvalue)) maxvalue=1000.0;
      maxvalue*=10.0;
      while(i<rates_total)
        {
         if(TimeDay(time[i])!=lastperiod)
           {
            lastperiod=TimeDay(time[i]);
            Pmax[i-1]=maxvalue;
            Pmin[i-1]=0.0;
           }
         else
           {
            Pmax[i]=EMPTY_VALUE;
            Pmin[i]=EMPTY_VALUE;
           }
         i++;
        }
      run=false;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
Gráfico EURUSD.e, H1, 2018.11.09 13:11 UTC, RoboForex (CY) Ltd, MetaTrader 4, Demo


ya lo he probado y no sé por qué, es la primera vez que lo veo así, parece que inicializo los buffers cuando cambio de timeframe

 
neverness:

Por fin he visto la única "respuesta constructiva" a mi pregunta en toda esta "discusión".

En cuanto a los errores, están presentes en todos los separadores-semanas en el marco actual (último) tanto en MT4 como en MT5.

En la última semana el separador MT4/MT5 dibuja el separador 7 días en lugar de 5.

Pero esa no es la cuestión. Los errores siempre han estado y estarán. Todo esto puede corregirse si existe un código de programa para dibujar delimitadores.

No son los errores los que me sorprenden, es algo totalmente distinto.

¿A nadie se le ha ocurrido escribir un programa para dibujar delimitadores en la zona prevista durante todo el tiempo de existencia de MT4/MT5?

Después de todo, el programa es el más sencillo.

Todo lo que necesita saber es la posición del último divisor y la "solución" del tiempo a lo largo del eje X (es decir, el intervalo de tiempo que ocupa 1 píxel).

Y hasta ahora nadie ha hecho nada...

Eso sí que me sorprende.

Una vez más, tendrás que hacerlo todo tú mismo.

Te lo dije, lo he hecho más de una vez. (y en el mercado, y en más de un indicador)

y dijiste que ya habías escrito el código, ¿lo escribirás de nuevo?)

 
Igor Makanu:

hmm, no sé si sonreír o .... Si conoces un terminal de trading que cumpla todos tus caprichos, ¿para qué? Yo estoy 100% satisfecho con MT4/5, puedo hacer de todo con él, mantener el indicador que dibuja periodos D1 en el gráfico, interesarme por la programación, modificarlo para que se adapte a tus necesidades... No creo que seas capaz de hacerlo ....


No sabría decir por qué, es la primera vez que veo un fallo así.

Gracias, por supuesto.

Como sospechaba, en los días incompletos sus separadores de periodo no coinciden con los estándar.

Pero eso no es muy importante, porque no creo que debas intentar redibujar los separadores estándar, sino acoplar los separadores del área de previsión a los separadores del historial.

En ese caso, la posición de los delimitadores del día del historial incompleto no afectará a los delimitadores de la previsión.

Otra diferencia importante entre su indicador y los delimitadores estándar es que los delimitadores estándar se actualizan en cada evento del propio gráfico, pero su indicador se actualiza en cada evento OnCalculate(). Pensé que se notaría, pero en realidad apenas se nota.

Por supuesto, este indicador debería ser rediseñado, pero gracias de todos modos. Fue interesante verlo.

 
Ghabo:

Resulta ser el índice de la barra del objeto con el nombre especificado. Hay más de un objeto y su nombre es "QUADRO "+Tiempo[i+1] ¿Cómo puedo saber que no hay tal objeto en diez barras?

Está claro con el buffer, si el valor está vacío no se muestra nada en el gráfico, pero ¿qué pasa con el objeto?

if (ObjectFind(0,"QUADRO"+Time[10])<0)
        {
        //объекта нет на 10 баре
        }
 
Vitaly Muzichenko:
¿Puedo probarlo así?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());

Gracias. Resulta ser el índice de barra (120983) del objeto con el nombre especificado. Hay más de un objeto y su nombre es "QUADRO "+Tiempo[i+1] ¿Cómo puedo saber que no hay tal objeto en diez barras?

Lo entiendo con el buffer, si el valor está vacío no se muestra nada en el gráfico, pero ¿qué pasa con el objeto?