Errores, fallos, preguntas - página 32

 
Ahora también tengo un fallo... Hasta que no se vuelva a compilar, los últimos compases se renderizan.
 
Interesting:

La única forma correcta de hacerlo es muy sencilla.

Se escribe un indicador que funciona al 100%, y se hace de forma clásica sin el parámetro "Symbol", es decir, se calcula con el símbolo y el periodo actuales.

Después de eso, dicha calculadora BÁSICA se llama en el Asesor Experto (si se proporciona el trabajo mecánico) o calculadora (si necesita mostrar información en el gráfico del INSTRUMENTO NO CALCULANTE).

PS

De lo contrario, si la calculadora o una función separada tiene que hacer un cálculo adicional, y luego vincular los resultados a los datos del gráfico actual...

Sugerencia digna de consideración,

Pero claro, desde el punto de vista de la lógica común es como rascarse la oreja izquierda con la mano derecha (pero no es para ti, es para los desarrolladores),

¿Por qué tengo que llamar a los datos de un instrumento no nativo?

Si tienes que crear indicadores personalizados y llamarlos desde un símbolo requerido de todos modos, en general, la conclusión es que lo compraré.

Pero de nuevo, llamo a un indicador listo para el EUR con datos sobre el JPY (por ejemplo, no hay suficiente historia para el Yen)

Si busco el mismo indicador, me dará la misma señal.

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

Esta es una opción viable:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1  "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input string             symbol      ="EURJPY";
input int                MA_Period   =25;          // период MA
input int                MA_shift    =0;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       =PRICE_OPEN;  // тип цены 
//--- indicator buffers
double  LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma;// Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   Lwma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_LWMA,price);
   Sma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_SMA,price);
   iPoint=1.0/SymbolInfoDouble(symbol,SYMBOL_POINT);
   iiMA=1.0/MA_Period;
   IndicatorSetString(INDICATOR_SHORTNAME,"LRma_symbol_"+symbol);
//---
   int count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   while(BarsCalculated(Lwma)<count){}
   while(BarsCalculated(Sma)<count){}
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int count=rates_total-prev_calculated;
   if(count>1)count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   if(count==0)count=1;
   while(BarsCalculated(Lwma)<count){}
   while(BarsCalculated(Sma)<count){}
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<MathMin(ArraySize(LRma),ArraySize(L));i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Puedo añadir otro dolor de cabeza. Si el indicador está en un gráfico, pero es de otro, hay que tener en cuenta que el número de barras puede ser diferente:

  1. Que el número de barras puede ser diferente. Creo que ya se ha tenido en cuenta .
  2. Tenga en cuenta que puede haber huecos en el historial para el instrumento, y 25 barras en el historial para un instrumento, puede ser lunes, y para otro - viernes...
  3. aunque hayas solucionado los dos primeros problemas, sigue habiendo sincronización por tiempo, para un instrumento ya ha empezado un nuevo compás, para otro aún no ha empezado...
  4. el indicador funciona sólo con la llegada de un nuevo tick, es decir, si se cuelga en el gráfico con pocos ticks, la barra 0 de otro gráfico es problemática...
  5. si dejas de contar las barras 0, sólo las completadas, entonces habrá un par de trampas más...
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
Prival:

Puedo añadir otro dolor de cabeza. Si el indicador está en un gráfico, pero se muestra desde otro, hay que tenerlo en cuenta:

  1. Que el número de barras puede ser diferente. Creo que ya lo hemos tenido en cuenta.
  2. Tenga en cuenta que puede haber huecos en el historial para el instrumento, y 25 barras en el historial para un instrumento, puede ser lunes, y para otro - viernes...
  3. aunque haya resuelto los dos primeros problemas, sigue habiendo sincronización por tiempo, para un instrumento ya ha empezado un nuevo compás, para otro aún no ha empezado...
  4. el indicador funciona sólo con la llegada de un nuevo tick, es decir, si se cuelga en un gráfico con pocos ticks, será problemático para la barra 0 de otro gráfico...
  5. Si dejas de contar las barras 0, sólo las completadas, entonces habrá un par de trampas más...

Gracias por las amables palabras :o)
 

Un error. Descripción. ATS siempre en mercado (rollover por doble lote 0,2).

Modo de prueba todos los ticks. Todo es normal.

Modo de prueba, abriendo los precios. la misma pieza.

Por alguna razón se divide en 2 oficios. tal vez es sólo la forma en que se muestra, pero no es correcto. no debería ser así.

 
Alexandr2385:

Hola, tengo un grave problema con el terminal MT5. Cuando arranco el terminal, sólo se mueve la línea de precio (bid), mientras que los candeleros (barras) no se dibujan/cambian. Por lo tanto, el precio se mueve sin cambiar el gráfico. Tengo una pregunta: ¿Cómo se puede resolver este problema? De hecho, ¡todo funciona bien en MT4! He intentado reinstalar el terminal, pero no ha servido de nada. Tuve un problema de este tipo con varios corredores... ¿Pueden decirme qué hacer en esta situación?
¿Alguien de los desarrolladores puede responder a la pregunta? ¿O debería preguntarlo en otro hilo?
Archivos adjuntos:
1.png  31 kb
 
Alexandr2385:
¿Puede alguno de los desarrolladores responder a la pregunta? ¿O debería preguntarlo en otro hilo?
+1 He visto lo mismo, pero parece que ahora funciona correctamente, deben haberlo arreglado
 
SHOOTER777:

+1 He visto lo mismo, pero parece que ahora funciona correctamente, deben haberlo arreglado

Sí, extrañamente, pero acaba de desaparecer, no sé por cuánto tiempo...

 
Prival:

Puedo añadir otro dolor de cabeza. Si el indicador está en un gráfico, pero se muestra desde otro, hay que tenerlo en cuenta:

  1. Que el número de barras puede ser diferente. Creo que ya lo hemos tenido en cuenta.
  2. Tenga en cuenta que puede haber huecos en el historial para el instrumento, y 25 barras en el historial para un instrumento, puede ser lunes, y para otro - viernes...
  3. aunque haya resuelto los dos primeros problemas, sigue habiendo sincronización por tiempo, para un instrumento ya ha empezado un nuevo compás, para otro aún no ha empezado...
  4. el indicador funciona sólo con la llegada de un nuevo tick, es decir, si se cuelga en un gráfico con pocos ticks, será problemático para la barra 0 de otro gráfico...
  5. Si dejas de contar las barras 0, al diablo, sólo las completadas, entonces habrá un par de trampas más...

Estoy de acuerdo con los problemas de agujeros e historia.

Con un funcionamiento normal y una sincronización de periodos, los nuevos compases deberían empezar (lógicamente) a la misma hora...