[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 288
Buenas tardes quien pueda ayudar a resolver un problema, quizás estoy haciendo algo mal,
Tengo un bloque Klima que devuelve la bandera de cierre de la última posición en takei. y lo mismo para el stop,
//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
La primera comprobación (total==1) tiene lugar cuando el pedido es todavía 1. Dentro del bloque, se encuentra la última venta cerrada -> abierta, la última compra cerrada -> abierta de nuevo. Eso hace 3 pedidos.
La primera comprobación (total==1) tiene lugar cuando el pedido es todavía 1. Dentro del bloque se encuentra la última venta cerrada -> abierta, la última compra cerrada -> abierta de nuevo. Esto ya da lugar a 3 pedidos.
Sí, pero cómo hacer que era sólo 2 órdenes, por lo que no se abre una orden bajo el número 6,
La forma más sencilla es comprobar la presencia de una orden abierta de tipo Compra o Venta. Tome esto (las variables Pedidos de Compra, Pedidos de Venta, Pedidos Totales son variables globales en el programa; deben ser declaradas en la función start() como int Pedidos de Compra, Pedidos de Venta, Pedidos Totales;) :
void OrdersRecount()
{
BuyOrders=0; SellOrders=0; TotalOrders=0;
if (OrdersTotal()>0)
{
for (int j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagBuy)
{
if (OrderType() == OP_BUY) BuyOrders++;
if (OrderType() == OP_SELL) SellOrders++;
TotalOrders++;
}
}
}
}
}
Te ayudaré, pero aún no entiendo la lógica de tu código:
¿Estás seguro de que en tres casos es una venta y en uno una compra? No es simétrico...
Quiero que se abra cuando no haya ninguna posición en el mercado y si uno de los valores es correcto entonces abrir 1 orden y esperar a que se cierre la posición.
Quiero que se abra sólo si no hay ninguna posición en el mercado y si uno de los valores elegidos es correcto entonces abrir 1 orden y esperar a que se cierre la posición.
¿Así que resulta que puedes tener 2 órdenes de compra y ninguna de venta?
Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж
No, al contrario, sólo debería haber 2 posiciones, incluyendo la de venta sin stops y la de seguimiento, el enunciado muestra cómo sucede. todo es correcto, pero se abre una posición extra bajo el número 6
FoxUA: No viceversa, las posiciones deberían ser solo 2 incluyendo la venta sin stops y keepers, el enunciado muestra como funciona. correcto, pero se abre una posición extra bajo el número 6
Bueno, entonces todo será mucho más complicado. Describe con palabras cómo debería funcionar el algoritmo e intentaré ayudarte de paso)
- Son posibles 2 posiciones al mismo tiempo;
- primero abrir 2 posiciones: comprar y vender;
- si la posición larga se cierra con un stop loss -> abrir una posición corta con SL y TP triplicados, obtenemos dos posiciones de venta, una con SL y TP normales, y otra con TP triplicados;
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Buenas tardes quien pueda ayudar a resolver un problema, quizás estoy haciendo algo mal,
Tengo un bloque Klima que devuelve la bandera de cierre de la última posición en takei. y lo mismo para el stop,
pero así es como lo uso.
y al principio todo va según lo previsto y en el lote 4 se abre el que necesito y este
No sé para qué sirve.
para mayor claridad
No puedo entender para qué sirve
Así es,
La primera comprobación (total==1) tiene lugar cuando el pedido es todavía 1. Dentro del bloque, se encuentra la última venta cerrada -> abierta, la última compra cerrada -> abierta de nuevo. Eso hace 3 pedidos.
Sí, eso es,
La primera comprobación (total==1) tiene lugar cuando el pedido es todavía 1. Dentro del bloque se encuentra la última venta cerrada -> abierta, la última compra cerrada -> abierta de nuevo. Esto ya da lugar a 3 pedidos.
Sí, pero cómo hacer que era sólo 2 órdenes, por lo que no se abre una orden bajo el número 6,
La forma más sencilla es comprobar la presencia de una orden abierta de tipo Compra o Venta. Tome esto (las variables Pedidos de Compra, Pedidos de Venta, Pedidos Totales son variables globales en el programa; deben ser declaradas en la función start() como int Pedidos de Compra, Pedidos de Venta, Pedidos Totales;) :
Hay muchas opciones, la más fácil es comprobar si hay una orden de compra o venta abierta. Toma este:
No entiendo cómo usarlo, por favor ayúdame.
No entiendo cómo usarlo, así que ayúdame si puedes.
¿Seguro que abre comprar en tres casos y vender en uno? No es simétrico...Lo haré, pero sigo sin entender la lógica de su código:
¿Estás seguro de que en tres casos es una venta y en uno una compra? No es simétrico...Te ayudaré, pero aún no entiendo la lógica de tu código:
Quiero que se abra cuando no haya ninguna posición en el mercado y si uno de los valores es correcto entonces abrir 1 orden y esperar a que se cierre la posición.
Quiero que se abra sólo si no hay ninguna posición en el mercado y si uno de los valores elegidos es correcto entonces abrir 1 orden y esperar a que se cierre la posición.
¿Así que resulta que puedes tener 2 órdenes de compra y ninguna de venta?
Figar0:
Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж
No viceversa, las posiciones deberían ser solo 2 incluyendo la venta sin stops y keepers, el enunciado muestra como funciona. correcto, pero se abre una posición extra bajo el número 6
Bueno, entonces todo será mucho más complicado. Describe con palabras cómo debería funcionar el algoritmo e intentaré ayudarte de paso)
- Son posibles 2 posiciones al mismo tiempo;
- primero abrir 2 posiciones: comprar y vender;
- si la posición larga se cierra con un stop loss -> abrir una posición corta con SL y TP triplicados, obtenemos dos posiciones de venta, una con SL y TP normales, y otra con TP triplicados;
¿Siguiente?