apertura Buy y Sell

Responder
Alanrooc777
Mensajes: 10
Registrado: 29 Ago 2022 19:14

apertura Buy y Sell

Mensaje por Alanrooc777 »

Buen día a todos y gracias al dueño de X-trader por este medio que permite comunicarnos con los temas que nos interesa...
En esta ocasión estoy necesitando alguna idea o si alguien tiene una parte de código, donde le indique al EA para que abra una operación inmediatamente una vez cierre otra operación.
Me explico, si acaba de cerrar una compra en TP, inmediatamente abra otra compra y si acaba de cerrar una venta en TP, inmediatamente abra otra venta.
Gracias por su atención, feliz día...
Avatar de Usuario
cdtrader
Mensajes: 588
Registrado: 28 Dic 2016 17:04

Re: apertura Buy y Sell

Mensaje por cdtrader »

seria mas o menos algo asi si no me equivoco:
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);

if(OrderCloseTime()>TimeCurrent()-2)
{
OrderSend(.....
}
no estoy seguro si seria 1 o 0 en orderselect y tambien depende de como lo tienes ordenado en la ventana del terminal
Imagen
sfriendsm2
Mensajes: 36
Registrado: 24 Jun 2020 17:20

Re: apertura Buy y Sell

Mensaje por sfriendsm2 »

La cuestión es que, aunque la idea es aparentemente sencilla, requiere ser muy fino porque:

1) Debes controlar muy bien que sólo abra una operación. Como tengas varias EAs abiertos, la puedes liar bien. Debería abrir órdenes sólo del activo en el que tienes el EA corriendo para que tengas menos problemas con este hecho, además de filtrar por los magic numbers que quieras replicar. Imagina que a la vez de tener un EA, estás operando manualmente.....

2) Si necesitas inmediatez, debes moverte con la función OnTimer en milisegundos y no esperar al tick, sobre todo si se operan activos menos líquidos, o si el cierre se produce en momentos de poco volumen. A todo esto, en esos momentos la horquilla que puedes tener es muy grande, con lo que tendrías desllizamientos importantes. Igual deberías poner filtros horarios o de tamaño de horquilla. Operar en real y en backtest no es lo mismo.

3) Debes poner un filtro también alrededor de lo que es cerrar en TP, ya que podría no coincidir el precio de cierre con el TP que tenías por algún deslizamiento. Esto si es más fácil...

4) Entiendo que la nueva orden se abriría con la misma distancia a SL y a TP que la anterior.

5) ¿qué pasa si he apagado el robot durante un tiempo, o se ha quedado sin conexión y hace un buen rato que se cerró la orden? ¿debería abrir igualmente? ¿debería abrir aunque hayan pasado días? ¿hay que poner algún límite?

Seguro que hay más que refinar. Como ves, a mi juicio, no es una cuestión tan básica coo parece.
Alanrooc777
Mensajes: 10
Registrado: 29 Ago 2022 19:14

Re: apertura Buy y Sell

Mensaje por Alanrooc777 »

Excelente, gracias por leer y responder, voy a ensayar... gracias!!
De hecho, voy a dejar mi código por aquí para mayor claridad... El código es sencillo, no es estrategia, solo busco abrir buy y sell al mismo tiempo y aprovechar todas las subidas y bajadas. El bot hace eso, pero cuando cierra un buy en tp, no abre el otro buy, sino que espera a que cierre Sell para abrir de nuevo buy y sell. Es decir: no abre buy si hay sell abierto y lo que necesito es que abra buy después de cerrar buy en tp, así exista sell abierta... ¡¡ACLARO!!, es un código muy loco y riesgoso, no apto para cuentas standard por cuestiones de swap, flotante y pérdida de capital, pues deja operaciones abiertas por mucho tiempo. Yo solo lo aplico a cuentas Cent...


void OnTick()
{
int Ordenes=OrdersTotal();
if (Ordenes<1)
{
{int Buy=OrderSend(NULL,OP_BUY,LTJ,Ask,3,0,Ask+TP*Point,"PrototipoA1",MagicNumber,0,clrBlue);}//Orden de compra.
{int Sell=OrderSend(NULL,OP_SELL,LTJ,Bid,3,0,Bid-TP*Point,"PrototipoA1",MagicNumber,0,clrRed);}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
///// Parte 2. Contador de ordenes BUY y SELL por separado. /////
/////////////////////////////////////////////////////////////////////////////////////////////////
{int Buy_Abts=0;//Declaración de las ordenes Buy.
int Sell_Abts=0;//Declaración de las ordenes Sell.
for (int i=0;i<OrdersTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber)
{
Buy_Abts++;
}
//--------------------------------------------------------------------------------------------------
if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)//Seleccion de ordenes tipo Sell.
{
Sell_Abts++;
Comment("N° compras abiertas:",Buy_Abts,"\n","N° ventas abiertas:",Sell_Abts);
}

}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
///// Parte 3. Condiciones para abrir contra ordenes si el precio se va en contra. /////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if (Ordenes>0 && Ordenes<Cant_Op)
{
for(H=0;H<Ordenes;H++)
Seleccion=OrderSelect(H,SELECT_BY_POS,MODE_TRADES);
Apertura=OrderOpenPrice();// Declaración de variable.
//----------//----------//----------//----------//----------//----------//----------//
if (OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
PrecioBuy=Ask;//PrecioBuy equivale a Ask.
if((Apertura-Distancia*Point)>PrecioBuy)//Si el resultado de Apertura-Distancia es mayor que ASk, abre compra, osea ordena compra por debajo de la orden de compra anterior.
{
Venta=OrderSend(Symbol(),OP_SELL,LTJ,Bid,3,0,Bid-TP*Point,"PrototipoA1",MagicNumber,0,clrRed);
Compra=OrderSend(Symbol(),OP_BUY,LTJ,Ask,3,0,Ask+TP*Point,"PrototipoA1",MagicNumber,0,clrBlue);
}
}
//===============================================================================================================================
else
{
double PrecioSell=Bid;
if((Apertura+Distancia*Point)<PrecioSell)
//Si el resultado de Apertura+Distancia es menor que Bid, abre venta, osea ordena venta por encima de la orden de venta anterior.
{
Compra=OrderSend(Symbol(),OP_BUY,LTJ,Ask,3,0,Ask+TP*Point,"PrototipoA1",MagicNumber,0,clrBlue);
Venta=OrderSend(Symbol(),OP_SELL,LTJ,Bid,3,0,Bid-TP*Point,"PrototipoA1",MagicNumber,0,clrRed);
}

}
}
}
}
Última edición por Alanrooc777 el 02 Sep 2022 23:05, editado 1 vez en total.
sfriendsm2
Mensajes: 36
Registrado: 24 Jun 2020 17:20

Re: apertura Buy y Sell

Mensaje por sfriendsm2 »

Creo que esto te ayudará.

Cuando se cierra una orden, para poder buscarla hay que ir al listado de órdenes en history:

En lugar de OrdersTotal con OrdersHistoryTotal
En lugar de MODE_TRADES con MODE_HISTORY

ten en cuenta que estará todo el histórico (configura en tu pestaña de histórico de operacones lo que te permita ver las operaciones que necesitas. Yo usaría "Todo el histórico"), así que busca la útlima cerrada, es decir la de mayor OrderCloseTime.

Para configurar cuánto histórico mostar, vete al terminal de operaciones, en la pestaña "histórico. Dentro de esa ventana, con el botón derecho del ratón, puedes elegir "Todo el historial" o el período que te interese.

Sl2.

Alanrooc777
Mensajes: 10
Registrado: 29 Ago 2022 19:14

Re: apertura Buy y Sell

Mensaje por Alanrooc777 »

Hola sfriendsm2, gracias por responder, lo intentaré, gracias...
Alanrooc777
Mensajes: 10
Registrado: 29 Ago 2022 19:14

Re: apertura Buy y Sell

Mensaje por Alanrooc777 »

Buen día compañeros, creo que encontré la falla, estaría justo al principio,

void OnTick()
{ int Ordenes=OrdersTotal();
if (Ordenes<1)
{
OrderSend(NULL,OP_BUY,LTJ,Ask,3,0,Ask+TP*Point,"PrototipoA1",MagicNumber,0,clrBlue);
OrderSend(NULL,OP_SELL,LTJ,Bid,3,0,BidTP*Point,"PrototipoA1",MagicNumber,0,clrRed);
}
El if le indica al bot que si no hay operaciones puede abrirlas, osea que si cierra un buy, el bot esperaría a que se cierre sell para que se cumpla de nuevo if y volver a abrir ambas ordenes... en ese caso debo cambiar el parámetro de entrada. De manera que se cumpla una vez la apertura una sola vez, ya que si se cumple contantemente, el bot abriría multitud de operaciones como me dijo el compañero sfriendsm2. Gracias por sus consejos, estoy empezando a entender este tema... Todos sus aportes son bienvenidos, mil gracias...
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Expert Advisors”