ayúdenme por favor [resuelto] - página 2

 
MOSTRAR EL CÓDIGO.
 

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }
He eliminado todas las demás funciones que no uso, todo mi código es sólo eso
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

Su doble declaración de billete .

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

La declaración de ticket esconde ... blah blah ... ver yo soy el compilador humano .

Elimina el segundo int .

 
mrluck1:

Pongo

bool order y

int ticket

en variables globales, y el resto del código en OnTick, pero sigue sin hacer ninguna entrada ahora

Sin compilar, sin probar

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Marco: He eliminado el int duplicado, pero ahora no se hace ningún comercio, necesito 1 comercio, si el precio> nube ichimoku, que el código primero era grande, pero continuó para crear nuevos oficios si

el precio estaba por encima de la nube, solo necesito ayuda para codificar de manera que el script se detenga después de la 1 operación.

Honest Knave: he probado tu código, acabo de definir magic_no que faltaba, funciona bien, espera a que el nuevo comercio el precio toque la nube de nuevo, será realmente útil para los próximos proyectos, pero

pero necesito que se detenga después de la primera operación, ¿qué debo hacer?

Gracias a todos por vuestra ayuda

 
bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

Este es el problema.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>-1)
        {
         order=1;
        }
      }
    }
  }


Así que pruebe esto y lo señalé en un post anterior.

Marco vd Heijden:

También tenga en cuenta que el OrderSend devuelve el número de ticket, o -1 menos uno si falla.

Ver.
 
mrluck1:

Honest Knave: he probado tu código, solo he definido el magic_no que faltaba, funciona bien, espera a una nueva operación si el precio vuelve a tocar la nube, será realmente útil para próximos proyectos, pero

pero necesito que se detenga después de 1 operación, ¿qué debo hacer?

Gracias a todos por su ayuda

¿No debería operar más de 1...? Eso es lo que hace esto:

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Honestamente Knave:

Tu EA es genial, pero crea nuevas operaciones si el precio vuelve a bajar a la nube de ichimoku y luego vuelve a subir. No repite las ordenes en la misma vela, como el problema que tuve, y voy a aprender mucho con este ejemplo que me diste, para crear nuevas

EA's, pero necesito una forma de codificar que después de la primera operación, el EA o script se cierre inmediatamente, por lo que solo necesito 1 operación realizada.

Marco: Probé tu nueva actualización, pero no hace ninguna operación, puse justo la forma en que publicaste la última vez, sólo quité la segunda int, en la entrada. Pero el primer comercio nunca se hace en el probador de la estrategia, ¿qué hacer ahora?

 
mrluck1:

Honestamente Knave:

Tu EA es genial, pero crea nuevas operaciones si el precio vuelve a bajar a la nube de ichimoku y luego vuelve a subir. No repite las ordenes en la misma vela, como el problema que tuve, y voy a aprender mucho con este ejemplo que me diste, para crear nuevas

EA's, pero necesito una forma de codificar que después de la primera operación, el EA o script se cierre inmediatamente, por lo que solo necesito 1 operación realizada.

No entiendo lo que quieres decir.

Ese código no puede abrir más de 1 orden a la vez.

Pero si la orden se cierra, y el disparador ocurre de nuevo, se abrirá otra.

¿Quiere decir que sólo quiere que se abra una operación cada vez?

 
honest_knave:

No entiendo lo que quieres decir.

Ese código no puede abrir más de 1 orden a la vez.

Pero si la orden se cierra, y el disparador ocurre de nuevo, se abrirá otra.

¿Quieres decir que quieres que sólo se abra una operación CADA VEZ?

Si señor, solo 1 operación cada vez, pero tu ejemplo fue genial, será muy útil como base para crear nuevas eas