Mi indicador desaparece cada vez que cambio a un nuevo cuadro de tiempo
Posiblemente un error de matriz fuera de rango y el indicador está siendo eliminado
int limit=rates_total-prev_calculated;for(int i=0; i<limit; i++)
iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1))
Posiblemente esté recibiendo un mensaje en el registro sobre un fallo de inicialización global
Compruebe sus registros
Gracias por su sugerencia.
He comprobado el registro, no hay ningún error o aviso de advertencia.
No estoy seguro de que el (i+1) causar problemas, ya que de pie por sí solo (o simplemente la supresión de la segunda parte), este indicador funciona bien.
SCFX
Hay errores compilé su código y lo probé:
2014.05.22 22:39:43.936 Indicador personalizado Indicador de prueba 3 XAUUSD,M1: eliminado
2014.05.22 22:39:43.905 Indicador de prueba 3 XAUUSD,M1: inicialización global falló
2014.05.22 22:39:43.905 Indicador de prueba 3 XAUUSD,M5: uninit razón 3 //----------------------- cambiar gráfico
2014.05.22 22:39:17.323array fuera de rango en 'Test Indicator 3.mq4' (117,32)
2014.05.22 22:39:15.591 Indicador de prueba 3 XAUUSD,M5: inicializado
2014.05.22 22:39:09.570 Indicador personalizado Indicador de prueba 3 XAUUSD,M5: cargado con éxito
Gracias por su sugerencia.
He comprobado el registro, no hay ningún error o aviso de advertencia.
No estoy seguro de que el (i+1) causar problemas, ya que de pie por sí solo (o simplemente la supresión de la segunda parte), este indicador funciona bien.
SCFX
Entonces probablemente sea esto
roc_s[j]=Close[i+j]-Close[i+j+1];
Usted está tratando de obtener el precio de cierre de las barras que no existen
Deberías añadir una línea cuando el indicador se inicia primero : prev_calculated == 0,
algo así :
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated;
tampoco hay error en mi ordenador ;-)
Hola ffoorr,
Tu solución es realmente buena.
A decir verdad, anoche contraté a alguien para que lo arreglara. Sí lo hizo, pero el código es ineficiente, por favor, vea a continuación, ya que añade un for(i) más.
Te agradezco que me expliques qué significa eso de prev_calculado ==0. No lo entiendo.
//+------------------------------------------------------------------+ //| hf1.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| httakeprofit://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "httakeprofit://www.mql5.com" #property version "1.00" #property strict //--- indicator settings //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 5 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Orange #property indicator_color5 Orange //--- input parameter input int kperiod=30; input int dperiod=9; input int slow=9; input int sample_roc_quartile=100; //--- buffers double buy[]; double sell[]; double stoploss[]; double takeprofit1[]; double takeprofit2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) //*/*/*/*/*/ { //--- indicator buffers mapping //--- 1 additional buffer used for counting. //IndicatorBuffers(6); IndicatorDigits(Digits); //--- indicator line SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,buy); SetIndexArrow(0,241); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,sell); SetIndexArrow(1,242); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,stoploss); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,takeprofit2); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,takeprofit1); //--- name for DataWindow and indicator subwindow label //--- 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[]) { int limit=rates_total-prev_calculated; if(limit<=0)limit =2; double roc_s[]; ArrayResize(roc_s,sample_roc_quartile+1); //--- //------------------------------------------ for(int i=1; i<limit; i++) { //FIRST PSART if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { buy[i]=Close[i]; stoploss[i]=Low[i]-0.005; takeprofit1[i]=Close[i]+0.005; takeprofit2[i]=Close[i]+0.01; } if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { sell[i]=Close[i]; stoploss[i]=High[i]; takeprofit1[i]=Close[i]-0.0050; takeprofit2[i]=Close[i]-0.01; } } //SECOND PART //--------------------------------------- HERE IS THE WHAT HE DID int mid = (sample_roc_quartile +1)/2; for(int i=1; i<limit&&(i+1)<rates_total; i++) { //--------------------------------------------- for(int j=0;j<=sample_roc_quartile&&(i+j+1)<rates_total;j++) { roc_s[j]=Close[i+j]-Close[i+j+1]; ArraySort(roc_s); } if( (Close[i]-Close[i+1])<roc_s[mid] ) { buy[i]=0; stoploss[i]=0; takeprofit1[i]=0; takeprofit2[i]=0; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Hola a todos...
Estoy teniendo problemas para instalar el indicador tradicional IBFX MACD y otras plantillas en mi MT4.
En la versión anterior, sólo tenía que copiar y pegar mis archivos en la carpeta "indicator" ubicada en la carpeta "expert".
La actual sólo tiene la carpeta "MQL4" que consiste en una carpeta "expert" e "indicator" separadas.
He intentado pegar en ambas carpetas y reiniciar mi plataforma pero no funciona
no sucede.
¿Puede alguien por ahí, por favor, aconsejarme sobre este tema? o tal vez cualquier otra manera para mí conseguir el indicador MACD tradicional con 2 líneas EMA?
Gracias
Douglasdouglas_heng: Estoy teniendo problemas para instalar el indicador tradicional IBFX MACD y otras plantillas en mi MT4. | No No múltiples (6) puestos. No secuestrar el puesto de otras personas. |
Hola ffoorr,
Tu solución es realmente buena.
A decir verdad, anoche contraté a alguien para que lo arreglara. Sí lo hizo, pero el código es ineficiente, por favor, vea a continuación, ya que añade un for(i) más.
Te agradezco que me expliques qué significa eso de prev_calculado ==0. No lo entiendo.
bueno scfx, no entiendo la segunda parte de tu indicador, por lo que no puedo decirlo.
Cuando un indicador se inicia por primera vez, (poner en un gráfico) previous_calculated es egal a Cero por construcción, por lo que se puede fijar el punto de partida desde el que el indicador comenzará a calcular .
if( prev_calculated == 0) limit = 100;
o
if( prev_calculado < 50) limit = 500:
o decir
if( prev_calculated < 500) limit = 3000: (todo es igual, no se utiliza el principio del gráfico)
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated; at the first lauch of the indicator limit = 3000; for(int i=1; i<3000; i++) // draw 3000 bars at the second lauch limit = 0; // ( because rates_total-prev_calculated = 0) ; for(int i=1; i<0; i++) // draw the last bars only, faster
muy buena idea esta indi ......
Hola,
Comienzo con un indicador (La primera parte). Funciona bien, al cambiar de marco de tiempo.
Luego agrego la Segunda Parte que es: Si Close[i]-Close[i+1] es menor que la mediana del valor de la diferencia de las últimas 100 barras, asignaré el valor 0 a todo el buffer.
Ahora el indicador combinado funciona bien en 1 gráfico pero cuando cambio de marco temporal, ese indicador desaparece. Tengo que volver a colocarlo en el gráfico.
Creo que el problema es causado por el Array pero no sé cómo solucionarlo.
¿Alguien puede ayudarme con el error?
Muchas gracias.
SCFX