Errores, fallos, preguntas - página 31

 
Urain:
Puede, pero a veces funciona, aunque cuando pongo 3, el nombre corto muestra 3 valores y sólo quiero uno del buffer principal.

Entonces tal vez así:

#property indicator_buffers 3
#property indicator_plots   1
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   SetIndexBuffer(1,L,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,S,INDICATOR_CALCULATIONS);

Sólo se muestra un valor en el gráfico.

 
DC2008:

Entonces tal vez sea así:

El gráfico sólo muestra un valor.

Así resulta que el nombre corto del indicador muestra 3 números, mientras que el buffer para dibujar uno, almacena todo lo que necesita saber,

El problema es que en el 4 sólo se puede solicitar el valor de la onda en la barra deseada y aquí tengo que descargar todo el buffer y almacenarlo en algún sitio

Este almacenamiento no es necesario para las necesidades del indicador. Pero no sé cómo recibir el valor de la onda.

 
DC2008:

Entonces tal vez así:

Sólo se muestra un valor en el gráfico.

También glitchy ....
 
Interesting:

Ahí no se trata de la inicialización. Ni siquiera se trata de esas dos líneas que llama Mashek.

Incluso si asumimos que el parámetro SYMBOL es realmente necesario (personalmente lo dudo), el trabajo con los buffers es penoso, y ni siquiera estoy hablando del bloque de la calculadora...

Veo que el indicador muestra el valor del ángulo de regresión lineal del instrumento erróneo en el que se está ejecutando,

y la prescrita en la entrada, por lo que es de esperar que oculte el verificador.

Ahora, por otro lado, dígame inteligentemente qué ve de incongruente en lo que sucede en el cálculo.

No pretendo que esté bien (como sólo aprender cinco y naturalmente al vapor, como muchos).

Lo primero que se me ocurre es que la duración de la historia en los distintos pares es diferente y por eso falla,

Pero los desarrolladores me aseguraron que el terminal cargará todos los datos necesarios por sí mismo.

 
Urain:

El problema es que en el 4 sólo puedes pedir el valor de la forma de onda en la barra necesaria y aquí tienes que cargar todo el buffer,

el problema es que en el 4 puedes simplemente solicitar el valor de la onda en la barra necesaria, pero aquí tienes que descargar todo el buffer y almacenarlo en algún lugar

Tengo que cargar todo el buffer, pero no lo necesito para mis necesidades de indicador. No sé cómo conseguirlo de otra manera.

Puedo hacerlos bien, o casi bien. Para el resto de topes podemos trabajar (las series no se utilizan, lo que es extraño). Pero lo que sucede en la calculadora es una gran pregunta...
 
Urain:

Veo que el indicador muestra el valor del ángulo de regresión lineal del instrumento erróneo en el que se está ejecutando,

sino la que está prescrita en la intuición, por lo que es de esperar que oculte el corrector.

Ahora, en frío, dime razonablemente qué ves de absurdo en lo que pasa en el cálculo?

No pretendo que esté bien (como sólo aprender cinco y naturalmente al vapor, como muchos).

Lo primero que se me ocurre es que la duración de la historia en diferentes pares de diferentes y por lo tanto los fallos,

Los desarrolladores me han asegurado que el terminal cargará toda la información necesaria por sí mismo.


¿Qué hay que discutir? Tomamos el sombrero de la calculadora y vemos lo que vemos allí, y esto es lo que vemos:

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[])

Después de eso, está el control de las barras...

   int count=rates_total-prev_calculated;
   if(count==0)count=1;
Si no conoce la contraseña, recibirá una advertencia. Así que dime, ¿dónde está la lógica?
 

He reescrito el cálculo así:

  {
//---
   int count=rates_total-prev_calculated;
   if(count>_Bars())count=_Bars()-1;
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<count;i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int _Bars(){return(Bars(symbol,_Period));}
Los mensajes de error han desaparecido, pero sigue sin funcionar correctamente.
 

Aquí es donde nos devanamos los sesos con un pavo similar. Mira lo que salió de él

 
Urain:

He reescrito el cálculo así:

Los registros de error han desaparecido pero sigue sin funcionar como debería.

La única forma correcta 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 tal calculadora BÁSICA es llamada en el Asesor Experto (si se proporciona la operación mecánica) o calculadora (si es necesario mostrar la información en el gráfico de la NO-CALCULADORA).

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...

 
Urain:

He reescrito el cálculo así:

Los mensajes de error han desaparecido, pero sigue sin funcionar correctamente.

Eso es probablemente mejor:

#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);
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   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);
//---
   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;
   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);
  }
//+------------------------------------------------------------------+

Parece que funciona correctamente.