Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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;
}
}
}
}
Su doble declaración de billete .
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 .
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
{
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
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.
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.
También tenga en cuenta que el OrderSend devuelve el número de ticket, o -1 menos uno si falla.
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:
{
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?
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?
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?