¿Cómo encontrar el momento de la barra donde se cruzaron las medias móviles? (código interior) - página 3

 

Sí, lo necesito específicamente para el gráfico PERIOD_H1. Como puedo cambiar los marcos de tiempo y quiero que codificado duro para que TF.

(Me preocupa que esté haciendo esto mal - especialmente lo que me has escrito dos veces ahora WHRoeder con respecto a MA y la declaración si ... - Así que me estoy preparando para algunas bofetadas, pero creo que eso me diría la barra donde las MA's se cruzaron (abajo). Así que esto seguramente funcionaría aplicándolo a iBarShift...)

if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[1];
 
WHRoeder:

Las medias móviles múltiples no se cruzan al mismo tiempo.

¿Por qué estás publicando dos veces? Tu pregunta fue respondida anteriormente.

Encuentre la primera barra en la que todos estaban en el orden correcto.


int DIR = 0;
for(int iBar = 0; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if(     MA20 > MA5 && MA5 > ...) DIR = -1;
   else if(MA20 < MA5 && MA5 < ...) DIR = +1; // All fanning up.
   else if (DIR != 0){ iBar--; break; }       // Last one was cross.
}
¿Puedo preguntar cuál es el propósito de las variables de la barra? Además, ¿qué significa "--"? ¿Las dos marcas "--" y "!"? (si son tan amables? He buscado en la sección de ayuda, pero no he encontrado cuál es su propósito).
 
DomGilberto:

¿Puedo preguntar cuál es el propósito de las variables de la barra? Además, ¿qué significa "--"? Las dos marcas "--" y "!" (si son tan amables? He mirado en la sección de ayuda, pero no he encontrado cuáles son sus propósitos).


¿Y puedo preguntarte por qué el basic from book sigue siendo desconocido?

https://book.mql4.com/basics/expressions

 
Tu pregunta es como si dijeras "¿qué es esta cosita de metal (una llave) y por qué una cosa pressey es un rectángulo (gas) y las otras son cuadradas?"
aprende a codificar.
 

Pero sé lo que es una llave de gas... - eso es más sencillo que la codificación...

Pero tenéis razón, tengo que leerlo todo.

Es porque aprendo mejor por ensayo y error (soy un tipo práctico cuando se trata de retener el conocimiento). Me ayuda a entender la lógica cuando la veo. Además, el sitio MQL4 no explica necesariamente las cosas con claridad sobre cómo funcionan todos juntos.

Así que para responder a su pregunta deVries, es por eso que sé algunos fundamentos y algunas cosas más avanzadas, pero viene parcheado porque me gusta jugar y aprender de esa manera.

¡Lo siento si me estoy convirtiendo en una molestia!

EDIT - Todavía no entiendo "Bar" parte de ese código que escribió WHRoeder - No estoy seguro de que es correcto?

 
DomGilberto: Pero sé lo que es una llave de gas... - eso es más simple que codificar...

Pero, ¿intentarías conducir sin saber lo que es? Eso sería una estupidez.

Estás tratando de codificar sin saber lo que es "--" y "!". ¿Cuál es la diferencia?

 

!=True, si x no es igual a y -(DIR != 0) - Si DIR (que es 0) no es igual a "0" entonces el operador Break devolverá el control al operador for. Y comenzará el bucle de nuevo.

-- Sustracción de 1 del valor de la variable. Así que "iBar--;" = iBar = 0, por lo que restar 1 = -1?

Hey - Estoy realmente tratando aquí. Lo siento si no aprendo tan rápido como lo hacen algunos (¡y no creas que prefiero ser así! Prefiero aprender por mí mismo y conseguirlo, ¡sin tener que pedir la ayuda de alguien!) pero estoy intentando lo mejor que puedo. Puede que no sea la chispa más brillante del mundo... Así que perdóname por eso al menos...

 
DomGilberto:

!=True, si x no es igual a y -(DIR != 0) - Si DIR (que es 0) no es igual a "0" entonces el operador Break devolverá el control al operador for. Y comenzará el bucle de nuevo.

-- Sustracción de 1 del valor de la variable. Así que "iBar--;" = iBar = 0, por lo que restar 1 = -1?

Hey - Estoy realmente tratando aquí. Lo siento si no aprendo tan rápido como lo hacen algunos (¡y no creas que prefiero ser así! Prefiero aprender por mí mismo y conseguirlo, ¡sin tener que pedir la ayuda de alguien!) pero estoy intentando lo mejor que puedo. Puede que no sea la chispa más brillante del mundo... Así que perdóname por eso al menos...


En este bucle

for(int iBar = 0; iBar < Bar; iBar++){//....do some stuff and come back}

iBar tiene aquí diferentes valores siempre que sea más pequeño como Bar se convertirá en el valor 1 más alto

iBar--;

significa....

iBar = iBar - 1;
 
int DIR = 0;
for(int iBar = 0; iBar < Bars; iBar++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,1); 
   double i2  = iMA(NULL,60,5,0,1,0,1);
   double i3  = iMA(NULL,60,8,0,1,0,1);
   double i4  = iMA(NULL,60,10,0,1,0,1);  
   double i5  = iMA(NULL,60,12,0,1,0,1);
   double i6  = iMA(NULL,60,15,0,1,0,1);  
   double i7  = iMA(NULL,60,30,0,1,0,1);
   double i8  = iMA(NULL,60,35,0,1,0,1);
   double i9  = iMA(NULL,60,40,0,1,0,1);
   double i10 = iMA(NULL,60,45,0,1,0,1);
   double i11 = iMA(NULL,60,50,0,1,0,1);
   double i12 = iMA(NULL,60,60,0,1,0,1); 
   double ema21 = iMA(NULL,60,21,0,1,0,1);

   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
   
   if (DIR != 0)
   { 
   iBar--; break; 
   }       // Last one was cross.

Ah - Creo que lo tengo funcionando ahora - Sólo mirando a Bar por un tiempo y luego se dio cuenta :) - Estoy empezando a darme cuenta de que lo que estoy tratando de codificar es un poco más complejo de lo que pensé al principio. Necesito que las MA's giren y se abaniquen hacia arriba o hacia abajo (dependiendo de si es una compra o una venta). Si su abanico hacia arriba (para un largo) Ellos no siempre tiene que estar en el orden correcto - es sólo un caso de identificar primero cuando están todos apilados y abanico aparte en el orden correcto - a partir de este punto todo lo que estoy queriendo es el precio para comprobar el 21 ema y luego colocar una orden por encima de los máximos. ¡Voy a tener un juego alrededor de por supuesto! NO espero que nadie me escriba el código - simplemente escribir mis pensamientos en voz alta.

¡Gracias!

 
Arregla la sangría o los corchetes que faltan
Código publicado
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21)
      OrderEntry(0);
  else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)
      OrderEntry(1);
Correctamente sangrado
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = -1;
   triggerBarTime = Time[1];
   if(Low[1]<ema21) OrderEntry(0);
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = +1; // All fanning up.
   triggerBarTime1 = Time[1];
   if(High[1]>ema21)  OrderEntry(1);
Con corchetes
   if(i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = -1;
      triggerBarTime = Time[1];
      if(Low[1]<ema21) OrderEntry(0);
   }
   else if(i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = +1; // All fanning up.
      triggerBarTime1 = Time[1];
      if(High[1]>ema21)  OrderEntry(1);
   }
Razón de la queja: