Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 305
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Gracias, pero me devuelve cero. ¿Cuál podría ser la razón?
No puede ser otra razón. Ningún ordenador conoce un año menos que 1970. Empiece por el año que aparece en las cotizaciones del corredor.
No podía ser otro año. Ningún ordenador conoce un año menos que 1970. Empiece por el año que aparece en las cotizaciones del corredor.
Es un buen trabajo, el primer año de nuestra era).
Qué pasa, es bueno, el primer año de nuestra era)
Utilice CopyXXX()
Gracias.
En MT5 se puede desplazar el gráfico de esta manera:
PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod);
Gracias.
En MT5 es posible desplazar el gráfico de esta manera:
PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod);
Yo elegí allí.
SetIndexShift(0,InpChannelPeriod);
Tal vez alguien pueda ayudar. La esencia del indicador es dibujar el canal de Doncian como de costumbre y luego desplazar las líneas del último valor del canal detrás de la barra negativa.
En MT5 todo parece funcionar, pero en MT4 no entiendo qué es lo que falla - lo he redibujado aquí y allá, pero sigue dibujando sin sentido - desplaza el propio canal, aunque hago por separado el cálculo de los valores que irán a shift....
Tal vez alguien pueda ayudar. La esencia del indicador es dibujar el canal de Doncian como de costumbre y luego desplazar las líneas del último valor del canal detrás de la barra negativa.
En MT5 todo parece funcionar, pero en MT4 no entiendo qué es lo que falla - lo he redibujado aquí y allá, pero sigue dibujando sin sentido - desplaza el propio canal, aunque hago por separado el cálculo de los valores que irán a shift....
Bueno, mira el código del cocodrilo, el cambio funciona allí. Aunque, tal vez, la lógica sea diferente.
Bueno, mira el código del caimán, ahí es donde funciona el turno. Sin embargo, la lógica puede ser diferente.
Sí, a mí también me funciona el turno.
Lleno el array con un desplazamiento, pero se llena como si no hubiera desplazamiento, pero el desplazamiento en sí sucede visualmente.
La primera parte del código deja el buffer sin llenar hasta la profundidad deInpChannelPeriod desde la última barra:
La segunda parte debería llenar esta zona:
Pero en realidad resulta así:
Código en MT5
#property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Label1 #property indicator_label1 "Predicted_high_price"; #property indicator_type1 DRAW_LINE; #property indicator_color1 clrAquamarine; #property indicator_style1 STYLE_DOT; #property indicator_width1 1; //--- plot Label2 #property indicator_label2 "Predicted_low_price"; #property indicator_type2 DRAW_LINE; #property indicator_color2 clrAquamarine; #property indicator_style2 STYLE_DOT; #property indicator_width2 1; //--- input parameters input int InpChannelPeriod=48; // Period //--- indicator buffers double ExtHighBufferPrognoz[]; double ExtLowBufferPrognoz[]; //--- int i,limit,start; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ExtHighBufferPrognoz,INDICATOR_DATA); SetIndexBuffer(1,ExtLowBufferPrognoz,INDICATOR_DATA); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //--- set first bar from what index will be drawn PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpChannelPeriod); PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpChannelPeriod); PlotIndexSetInteger(0,PLOT_SHIFT,InpChannelPeriod); PlotIndexSetInteger(1,PLOT_SHIFT,InpChannelPeriod); //--- 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[]) { //--- check for rates if(rates_total<InpChannelPeriod) return(0); //--- preliminary calculations if(prev_calculated==0) limit=InpChannelPeriod; else limit=prev_calculated; //--- the main loop of calculations for(i=limit;i<rates_total && !IsStopped();i++) { start=i-InpChannelPeriod; ExtHighBufferPrognoz[i-InpChannelPeriod]=high[ArrayMaximum(high,start,InpChannelPeriod)]; ExtLowBufferPrognoz[i-InpChannelPeriod]=low[ArrayMinimum(low,start,InpChannelPeriod)]; } for(int x=rates_total-InpChannelPeriod;x<rates_total && !IsStopped();x++) { //int calc=x--; ExtHighBufferPrognoz[x]=ExtHighBufferPrognoz[rates_total-InpChannelPeriod-1]; ExtLowBufferPrognoz[x]=ExtLowBufferPrognoz[rates_total-InpChannelPeriod-1]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+Resultado:

ZS: Cambiado el código - el ME equivocado era.