Cuando se cierra una gran parrilla de órdenes con una larga vida de la parrilla, los intercambios de órdenes se comen los beneficios y distorsionan mucho el resultado.
Quiero compensar la pérdida en los intercambios con esta función.
Cuando se cierra una gran parrilla de órdenes con una larga vida de la parrilla, los intercambios de órdenes se comen los beneficios y distorsionan mucho el resultado.
Quiero compensar la pérdida en los intercambios con esta función.
¿La red se cierra con beneficios o con el punto de equilibrio?
int GetMagic(Order &order)
{
int magic = 0;
if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)for(int i = OrdersTotal(); i > 0 ; i --)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
{
if(magic == OrderMagicNumber()) magic+=1;
else magic=0;
}
}
}
return (magic);
}
Eso lo arregló, tenía if (order.cmd == OP_SELLSTOP || OP_BUYSTOP) sólo que el problema no se solucionó. Pero necesito que pase por todas las órdenes. El mago en sí se fija en el momento de la creación sólo al tapón. No podemos entender que el tapón sea creado por OrderType() porque aún no ha estado allí; tenemos un registro preliminar del tipo de orden en order.cmd para ello. Y aquí necesitamos dos bucles: uno anidado en el otro, para que una iteración de la variable magic se compruebe con todos los pedidos de OrdersTotal(). Lo tengo todo implementado, sólo que hay un bucle sin fin, no sé por qué...
Nerd Trader #: Esto está bien, tenía if (order.cmd == OP_SELLSTOP || OP_BUYSTOP) Pero necesito que se pasen todas las órdenes. El mago en sí mismo se establece cuando sólo se crea el tapón. No podemos saber que el tapón es creado por OrderType() ya que aún no ha estado allí, necesitamos escribir el tipo de orden en order.cmd de antemano. Y aquí necesitamos dos bucles: uno anidado en el otro, para que una iteración de la variable mágica se compruebe con todos los pedidos de OrdersTotal()
void OpenOrder(int db = -1){
if(db == -1){
Print("'db' должен иметь корректное значение");
return;
}
Order order;
//Если бид в границах ДБ (его хай/лоу) то инициализируем ордер для селстопа или байстопаif(Bid > db_last.low && Bid < db_last.hight){
if(db == BEAR) order.InitForSell(SELLSTOP);
if(db == BULL) order.InitForBuy(BUYSTOP);
}
...
if(order.is_init == true)
{
int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10,
order.sl_price, order.tp_price, "", GetMagic(order), 0, order.arrow_color);
if(order_send == -1){
Print(order.error_text," | ",GetLastError()," db_last.third ",db_last.third,
" | db_last.size_open_to_low ",db_last.size_open_to_low," | order.sl_price: ",
order.sl_price," | order.cmd ",order.cmd);
ResetLastError();
return;
}
}
}
...
int GetMagic(Order &order)
{
int magic = 0;
//Если должен быть открыт стопордер и если есть уже открытые или отложенные //ордера, то возможно некоторые с маджиком, это надо проверить и сгенерировать //для нашего ордера уникальный маджик и отправить его на запись в массивif(order.cmd == OP_SELLSTOP || OP_BUYSTOP)
if(OrdersTotal() >= 1)
for(;;){
magic++;
for(int i = OrdersTotal(); i > 0 ; i --)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) != false)
if(magic != OrderMagicNumber())
return magic;
}
//Если нет открытых или отложенных ордеров то увеличиваем значение //маджика, чтобы он равнялся единице и отправляем на запись в массивelseif (OrdersTotal() == 0)
return (magic + 1);
return magic;
}
En el comentario dice que envía el majic al array de escritura, así que no te dejes engañar por esto, siempre que el majic vuelva al retorn.
¿es una broma?
Lo tienes en blanco y negro para(;;)
Pues sí, sólo que hay una salida: cuando la magia no es igual a la magia de orden.
Prueba esto
¿Y si hay una red de pedidos?
¿Alguien tiene una función para calcular la suma de todos los intercambios de una red de órdenes para una orden mágica y un instrumento financiero.
¡¡¡Gracias por la ayuda!!!
¿Para qué lo necesitas?
Cuando se cierra una gran parrilla de órdenes con una larga vida de la parrilla, los intercambios de órdenes se comen los beneficios y distorsionan mucho el resultado.
Quiero compensar la pérdida en los intercambios con esta función.
Cuando se cierra una gran parrilla de órdenes con una larga vida de la parrilla, los intercambios de órdenes se comen los beneficios y distorsionan mucho el resultado.
Quiero compensar la pérdida en los intercambios con esta función.
Prueba esto
Pero necesito que pase por todas las órdenes. El mago en sí se fija en el momento de la creación sólo al tapón. No podemos entender que el tapón sea creado por OrderType() porque aún no ha estado allí; tenemos un registro preliminar del tipo de orden en order.cmd para ello. Y aquí necesitamos dos bucles: uno anidado en el otro, para que una iteración de la variable magic se compruebe con todos los pedidos de OrdersTotal(). Lo tengo todo implementado, sólo que hay un bucle sin fin, no sé por qué...
¿La red se cierra con beneficios o con el punto de equilibrio?
Sí, a un cierto nivel de detracción, hay una pérdida a cero y a ninguna pérdida hay una pérdida fea debido a los swaps
Esto está bien, tenía if (order.cmd == OP_SELLSTOP || OP_BUYSTOP)
Pero necesito que se pasen todas las órdenes. El mago en sí mismo se establece cuando sólo se crea el tapón. No podemos saber que el tapón es creado por OrderType() ya que aún no ha estado allí, necesitamos escribir el tipo de orden en order.cmd de antemano. Y aquí necesitamos dos bucles: uno anidado en el otro, para que una iteración de la variable mágica se compruebe con todos los pedidos de OrdersTotal()
Sí, a un cierto nivel de detracción, hay una pérdida a cero y a ninguna pérdida hay una pérdida fea debido a los swaps