[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 167

 
Hacer una variable booleana global o estática como flag. Cuando la condición ha ocurrido y flag=true abra la orden y haga flag=false. Ahora, si la orden se cierra, no se abrirá una nueva orden. Cuando la condición haya desaparecido, vuelva a poner flag=True.
 
Roger:
Hacer una variable booleana global o estática de tipo bandera. Cuando se alcanza la condición y flag=true, abrir una orden y hacer flag=false. Ahora, si la orden se cierra, no se abrirá una nueva orden. Cuando la condición haya desaparecido, vuelva a poner flag=True.

¿Cómo puedo saber si un pedido se abrió pero se cerró por la condición N? Porque hay muchas condiciones, y la presencia de la condición N no garantiza que la orden se haya cerrado.

Es decir, necesito saber que la orden se ha ejecutado, pero se ha cerrado hace n velas porque se ha disparado la condición N. Y si la condición N ha desaparecido, y no han pasado más de n velas desde el cierre de la orden, debemos abrir la orden de nuevo.

 
Xaoss1990:

¿Cómo puedo saber si un pedido se abrió pero se cerró por la condición N? Porque hay muchas condiciones, y la presencia de la condición N no garantiza que la orden se haya concluido.

Es decir, necesito saber que la orden se ha concluido pero se ha cerrado hace n velas por la activación de la condición N. Y si la condición N ha desaparecido y no han pasado más de n velas desde el cierre de la orden, debemos abrir la orden de nuevo.


¡Sé más activo usando Alert(), Print() con Logic!
 
Xaoss1990:

¡Por favor, aconséjennos, señores!

Imagínese la situación: se activa una parada, debido a la activación de la condición N-ésima. Pero después de un par de velas, la condición N-ésima ha caído. Con la ayuda de qué función se puede volver a abrir el trato después de que la condición N-ésima caiga. Es decir, hay que determinar que se activó un stop hace un número de barras, y como la condición N-ésima se cayó, ¡reabrir la operación!


si programáticamente - al abrir una orden - hay un magik y un comentario - se puede codificar la información sobre la condición en que se abre la orden, en el magik o en el comentario

en general, el stop no se activa por una condición, sino cuando el precio alcanza un nivel de precio - esta orden puede ser cerrada por una condición

 
Xaoss1990:

¿Cómo puedo saber si un pedido se abrió pero se cerró por la condición N? Porque hay muchas condiciones, y la presencia de la condición N no garantiza que la orden esté cerrada.

Es decir, necesito saber que la orden se ha ejecutado, pero se ha cerrado hace n velas debido a la activación de la condición N. Y si la condición N ha desaparecido y no han pasado más de n velas desde que se cerró la orden, necesito abrir la orden de nuevo.

¿No quiere complicar demasiado las cosas? Al fin y al cabo, la orden podría haberse cerrado si la condición X hubiera estado presente, aunque la condición N también podría haber estado presente.

La solución depende mucho de su lógica de gestión de posiciones, por ejemplo, para encontrar las órdenes que se han cerrado a más tardar en n velas y comprobar el evento N en el momento en que se cierra la orden, así como para el momento actual.

 
 int CountH,NewCountH,CountL,NewCountL;
 double ResistH,ResistL;
 
 //========================
 
 int start(){

 //--------------------------
   double bid = Bid;
   double UPPprice = bid+3000.0*Point;
   double LOWprice = bid-3000.0*Point;
   NewCountH=0;
   ResistH=0;
   NewCountL=0;
   ResistL=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountL++;
       } 
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+5*Point;
    }
 //----------------------------
 
 return(0);
 }
¿Cómo puedo hacer este ciclo más "fácil"? Se necesita mucho tiempo para contar.
 
DhP:

¿Cómo puedo hacer este ciclo más "fácil"? Se necesita mucho tiempo para contar.


tal vez algo que no entiendo, pero aquí:

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) CountL++;
la misma condición
 
abolk:


tal vez no lo entendí bien, pero aquí:

la misma condición - en todo momento CountH es igual a CountL

No, si el precio es superior a la Oferta, entonces cuenta la CuentaH, si es inferior, entonces cuenta la CuentaL
 
DhP:
No, si el precio es mayor que el de la oferta, entonces cuenta H. Si es menor, entonces cuenta L.


es posible acelerar el cálculo:

reducir i<=6000

 
abolk:


Es posible acelerar el cálculo:

a) Reducir i<=6000
b) Calcular sólo al principio de la barra

a) Reducir el número de i puede hacerse, pero no es deseable. Así es como se toman las barras para el año.

b) Al principio de un bar... Esta es probablemente una opción. Funciona en M15.

Sin embargo, en cualquier caso, cuenta casi 2 segundos.