[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 829

 
dimon74:
¡¡¡Podría ser útil!!! Intenta basarte en un precio: digamos que la oferta. El precio de apertura para OP_SELLSTOP será Bid , y para OP_BUYSTOP - Bid+87*Point (o lo que necesite).
Ya veo la idea, ¡gracias!
 
Vinin:

Ahora un mago, los parámetros se ajustan a

Mira el mensaje privado...
 

Por favor, ayuda. Tal vez alguien sepa cómo implementar una función en el código, que compare el penúltimo valor del historial con el último (estamos hablando de posiciones cerradas) sin importar el valor (por ejemplo OrderCloseTime()), y si son diferentes (en este caso el penúltimo es menor que el último) - hacer un BLA-BLA-BLA. Si es posible, perfecciona mi código, o escribe el tuyo propio si lo tienes mal orientado.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

¡¡¡GRACIAS DE ANTEMANO!!!

 

Ayuda para la comprobación.

Después de que aparezca la primera unidad en el ciclo, compruebe si esta unidad se mantendrá durante el tiempo t+t1 (compruebe cada delta de segundos). Si se mantiene, lo compramos, y si en algún momento no se mantiene, salimos del bucle. En otras palabras, la señal es válida, si se comprobó cada intervalo delta y siempre fue uno.

¿Estoy pensando correctamente?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

Ayuda para la comprobación.

Después de que aparezca la primera unidad en el ciclo, compruebe si esta unidad se mantendrá durante el tiempo t+t1 (compruebe cada delta de segundos). Si se mantiene, entonces compramos, y si en algún momento no se mantiene, entonces salimos del bucle.

¿Estoy pensando correctamente?


El resultado es un bucle while infinito (t es siempre <t+t1, sólo si t1=0). En el bucle sign1 siempre =1
 
abolk:

El resultado es un bucle while infinito (t es siempre <t+t1, sólo si t1=0). En el bucle sign1 siempre =1

¿Cómo solucionar el error?
 
gince:

¿Cómo corregir un error?

Para solucionar un error, hay que detallar el algoritmo (no el código, sino el algoritmo). Y luego superponer el código en el algoritmo
 
abolk:

Para corregir el error, hay que detallar el algoritmo

Se recibe una señal binaria 0 o 1. Si se recibe un 1, entonces a partir de este momento empezamos a comprobar si se mantendrá durante 10 min (600 seg) comprobando cada 60 seg. Si los 10 minutos había uno - Comprar, y si al menos una vez no había nadie entonces terminar de comprobar y considerar que no hay ninguna señal de apertura.
 
gince:

Se recibe una señal binaria 0 o 1. Si se recibe un 1, a partir de este momento se empieza a comprobar si se mantendrá durante 10 minutos (600 segundos) comprobando cada 60 segundos. Si todos los 10 minutos fueron uno - Comprar, y si al menos una vez no fue uno entonces terminar de comprobar y considerar que no hay señal de apertura.

No está claro en el código cómo cambia la señal discreta sign0. En el código presentado la señal no cambia. Hay un intento infructuoso de trabajar con el cambio de t
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Esto está tomado de Moving Average.mq4
Razón de la queja: