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 ......
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
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