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

 
EVGENII SHELIPOV #:

Buenas tardes.

El valor del fractal diario se muestra en forma de su valor o de una línea vertical. La línea no se muestra y el valor es 0.

Este es un fragmento de código


Por favor, dime qué pasa.

Porque el valor es 0. El fractal se forma después de n velas.

 
Vitaly Muzichenko #:

Array para toda la historia disponible, no necesito eso.

Necesito literalmente 50-100 barras.

Así.


¿Para qué sirve el indicador? Si no es un secreto, por supuesto) El problema está en la visualización de la hora. Es decir, no es tiempo de tictac real, es tiempo de números. Cada número en su propia barra de la TF.

 
Valeriy Yastremskiy #:

¿Para qué sirve el indicador? Si no es un secreto, por supuesto) El problema ahí es, por supuesto, con la visualización de la hora. Es decir, no es el tiempo real, sino el tiempo numerado. Cada número en su propia barra de TF.

El punto, ver los últimos ticks en el gráfico abierto :)

P.D. * Cambio de oferta y demanda

Como en Market Watch


 
Tretyakov Rostyslav #:

Porque el valor es 0. Se forma un fractal después de n velas

Se forma un fractal si no hay un nuevo extremo y después de tres barras éstas son 0, 1, 2.

double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 2);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);

Nada ha cambiado.

O algo está mal otra vez.

 
Vitaly Muzichenko #:

Lo hice, funciona.

---

Algo me dice que puedes prescindir del ciclo.

¿Es esto cierto?

Parece que no hay función de desplazamiento en MQL, por lo que sé. Por lo tanto, el desplazamiento sólo puede hacerse con la ayuda de un bucle. ¿Por qué no te conviene?

P.D. Sobre la matriz extra, no era necesaria. ¡Has hecho correctamente el cambio y escribes el valor de la oferta justo en el buffer!

 
EVGENII SHELIPOV #:

Buenas tardes.

El valor del fractal diario se muestra en forma de su valor o de una línea vertical. La línea no se muestra y el valor es 0.

Este es un fragmento de código


Por favor, dime qué pasa.

¿Por qué estás seguro de que el fractal de la barra cero debe ser distinto de cero? ¡Cuando, no será 0 sólo si está allí!


Tretyakov Rostyslav #:

Porque el valor es 0. El fractal se forma después de n velas

Y estotampoco ocurre siempre. Sólo en el caso de que la n-ésima barra sea un fractal.

 
Vitaly Muzichenko #:

Es decir, para ver los últimos ticks en un gráfico abierto :)

P.D. * Cambio de oferta y demanda

Como en Market Watch


Estaba pensando en medidas de velocidad)))

 
Vitaly Muzichenko #:

Es decir, para ver los últimos ticks en un gráfico abierto :)

P.D. * Cambio de oferta y demanda

Como en Market Watch


¿Qué pasa conArrayCopy()?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
¿ArrayCopy() no es una buena solución?

ArrayCopy, sirve para copiar de un array a otro. Y aquí hay que desplazar los valores antes de añadir cada tilde. Por lo tanto, sólo puede resolverse utilizando un bucle.

 
Artyom Trishkin #:
¿ArrayCopy() no le conviene?

¿Cómo se usa esto, puedes mostrarme?

Esta es la tarea.

Aquí está el código listo, pero el bucle es un poco de miedo

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_label1  "Bid"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_label2  "Ask"

double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0,Buffer1);
  ArraySetAsSeries(Buffer1,true);
  SetIndexBuffer(1,Buffer2);
  ArraySetAsSeries(Buffer2,true);
  ArrayInitialize(Buffer1,EMPTY_VALUE);
  ArrayInitialize(Buffer2,EMPTY_VALUE);
  IndicatorSetInteger(INDICATOR_DIGITS,Digits());
  IndicatorSetString(INDICATOR_SHORTNAME,"Tick:");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
{
  int H=100;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }
  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  double a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  return(rates_total);
}
//+------------------------------------------------------------------+

---

De nuevo, hay un bucle dentro de ArrayCopy() y probablemente más de uno. Así que el código difícilmente se volverá más ligero y rápido debido a esta sustitución

Razón de la queja: