Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1683

 
Sí, por supuesto. Primero: 0, último: OrdersTotal()-1
 
Aleksei Stepanenko #:
Sí, por supuesto. Primero: 0, último: OrdersTotal()-1

Ah, hay una matriz, realmente desde cero...

 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
                                                              
extern int RSIPERIOD=3;
extern double KOEFF1=2.5;
extern double KOEFF2=1.86; 
                                                                                                                                                                  
double mass0[],Buf1[],Buf2[];
double D10,D11,D12;
                                                                                                                                                                                                                                                                                                                                             
int init()
  {
   IndicatorDigits(0);
   string short_name="RSITEST";           
   IndicatorShortName("RSITEST");
   
   D10=RSIPERIOD;D11=D10*KOEFF1;D12=D11*KOEFF2;;
 
   SetIndexBuffer(0,mass0);
   SetIndexLabel (0,"Stoch "+Ds_0(D10)+")\n");
   SetIndexBuffer(1,Buf1);
   SetIndexLabel (1,"Stoch ("+Ds_0(D11)+")\n");
   SetIndexBuffer(2,Buf2);
   SetIndexLabel (2,"Stoch ("+Ds_0(D12)+")\n");
   return(0);
  }
                                                                                                               
int start()
  {
   if(Bars<=RSIPERIOD) return(0);
   int ExtCountedBars=IndicatorCounted();
   if (ExtCountedBars<0) return(-1);
   if (ExtCountedBars>0) ExtCountedBars--;
   for(int i=0;i<Bars-RSIPERIOD;i++)
      {
       mass0[i] = iRSI(NULL,0,D10,0,i);
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))
       Buf1[i] = Buf2[i];
       Buf1[i] = DRAW_LINE;
       Buf2[i] = EMPTY_VALUE;
      }
   return(0);
  }

string Ds_0(double DOUBLE) {return(DoubleToStr(DOUBLE,0));}
MakarFX #:
en tu caso solo funcionaba 2 de las 3 líneas, lo he adaptado a la tarea en cuestión y resulta que la primera línea se queda (como debería) y el nivel de las otras dos (roja y azul) con las condiciones dadas (en lugar de línea roja y azul era una sola línea - y era roja siRSI2>RSI3 y azul siRSI2<RSI3) se vuelven rectos y sólo rojos como si no supiera que es RSI
Adjunto una captura de pantalla.
Archivos adjuntos:
 
Andrey Kipyatkov #:
en tu caso, resulta que sólo 2 de las 3 líneas, lo adapté al problema, y resulta que la primera línea se queda (como debería) y el nivel de las otras dos (roja y azul) con las condiciones dadas (en lugar de una línea roja y azul era una sola línea - y era roja siRSI2>RSI3 y azul siRSI2<RSI3) se vuelven rectos y sólo rojos como si no supiera que es RSI
Adjunto una captura de pantalla.

¿Cómo se igualan Buf1 y Buf2?

¡En su estado son 0!

 
Andrey Kipyatkov #:
en tu caso solo funcionaba 2 de las 3 líneas, lo he adaptado a la tarea en cuestión y resulta que la primera línea se queda (como debería) y el nivel de las otras dos (roja y azul) con las condiciones dadas (en lugar de línea roja y azul era una sola línea - y era roja siRSI2>RSI3 y azul siRSI2<RSI3) se convierten en rectas y sólo en rojo como si no supiera que es RSI
Adjunto una captura de pantalla.


Archivos adjuntos:
RSITEST-1.mq4  4 kb
 
Hola a todos, ¿podéis decirme por favor cuál es la diferencia entre un robot de trading y un Expert Advisor?
 
Daniil Osipov #:
Hola a todos, ¿podéis decirme la diferencia entre un robot de trading y un asesor de trading?
Es lo mismo... un juego de palabras
 
MakarFX #:

Gracias por ayudar con el código pero si no es difícil me gustaría entender el punto. Cuando escribes todo en una línea:
Buf0[i] = iRSI(NULL,0,D10,0,i); - se especifica en esta cadena que el array cero es una línea rsy con el parámetro dado anteriormente
if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) entonces está diciendo que Rsai con el parámetro D11 >D12
Buf1[i] = Buf0[i]; y luego se hace coincidir (superponer una línea sobre la otra) psi con el parámetro D11 y D10
si no
Buf1[i] = EMPTY_VALUE; y le dices que no renderice xy con el parámetro D11.
pero cuando se trabaja con 3 líneas
Buf0[i] = iRSI(NULL,0,D10,0,i); se dice como dibujar 1
línea Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2; a continuación suma y divide por 2 2 y 3 - Esta acción no me queda muy clara porque antes igualabas las matrices y superponías una línea sobre la otra por qué esta es la sintaxis.
si(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) entonces se repite el ejemplo dices que Rsai con el parámetroD11>D12
Buf2[i] = Buf1[i]; y equiparas
las líneas
3 y 2
else
Buf2[i] = EMPTY_VALUE; y decir que no se dibuje la segunda línea

Veo correctamente como das los "parámetros" del lenguaje y por qué en el segundo caso has añadido arrays y dividido por 2

 
MakarFX #:
Es lo mismo... juego de palabras
Vitaly Muzichenko #:

Un juego de palabras.

De un hilo vecino. Sin coludirse...

 
Andrey Kipyatkov #:
Te agradezco tu ayuda con el código, pero si no es mucha molestia, me gustaría entender lo esencial. Cuando escribes todo en una línea:

Andrew, primero definamos tu condición desde el primer post

Quería aclarar si hay una manera de prescribir en el código en lugar de una línea roja y azul (RSI2 y RSI3 en la imagen (adjunta también), respectivamente) fue una línea - y fue rojo si RSI2>RSI3 y azul si RSI2 < RSI3

por lo que, en lugar de la roja y la azul, obtenemos la media de estas líneas, es decir

Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2;

y esta línea, por defecto, tiene color rojo.

Además, cuando se cumple la condición

if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))

no cambiamos el color de la línea porque no se puede hacer en MT4,

tomamos y superponemos otra línea con otro color

Buf2[i] = Buf1[i];