Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 417

 
evillive:



Así que necesito un número entero...
 

Amigos, se necesita ayuda. La función tiene que cerrar la mitad de los pedidos empezando necesariamente por el más antiguo. En el primer caso, las órdenes se cierran una a una por alguna razón, y en el segundo, comienzan a cerrarse en el orden equivocado.

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0; double CTbuy = CountTrades(OP_BUY); double CTsell = CountTrades(OP_SELL); 
  for (int i = 0; i<=OrdersTotal;i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CTbuy/2 && CTbuy>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
             Sleep(1000);
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CTsell/2 && CTsell>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           Sleep(1000);
           
         }
       }
     }
   }
   
 }
 for (int i = OrdersTotal()-1; i>=0; i--)
 
vadynik:

Así que necesito un número entero...
MathRound
 
evillive:
MathRound


así que esto es un redondeo, el número no se convierte en int, sigue siendo doble
 
vadynik:

así que esto es un redondeo, el número no se convierte en int, sino que sigue siendo doble

¿Y qué? ¿Existe una diferencia fundamental entre 1 y 1,0 para los cálculos? Por supuesto, el formato es doble, pero el valor es entero.


Una variante especialmente pervertida entonces: DoubleToStr y luego StringToInteger

 
vadynik:

Por favor, dígame cómo eliminar la advertencia en el nuevo compilador

posible pérdida de datos debido a la conversión de tipos

int    SizeB      =MathAbs(Open[1]-Close[1])/Point;

Так помогает 

int    SizeB      =(int) ( MathAbs(Open[1]-Close[1])/Point );

 
Zhunko:



Gracias, así que no hay preaviso, ya me está comiendo el ojo)
 

Hola, he buscado en Kim, pero no encuentro nada que me permita saber: ¿De qué orden (pendiente) se abrió la posición? ¿De una orden limitada o de una orden de stop?

He intentado comparar los precios del último pedido abierto

if(MathAbs(GetOrderOpenPrice()-LastPrice) <= slip)

con una posición abierta en él, pero toda la lógica está rota. ¿Quizás haya algo más adecuado? Gracias.

 
Trader7777:

Amigos, se necesita ayuda. La función debe cerrar la mitad de las órdenes empezando necesariamente por la más antigua. En el primer caso, las órdenes se cierran una a una por alguna razón, y en el segundo, comienzan a cerrarse en el orden equivocado.


Había una pregunta así, cómo cerrar las órdenes empezando por la más antigua, un par de páginas después hay una respuesta y el código correcto.


https://www.mql5.com/ru/forum/145455/page406

 
borilunad:

Hola, he buscado en Kim, pero no encuentro nada que me permita saber: ¿De qué orden (pendiente) se abrió la posición? ¿De una orden limitada o de una orden de stop?

He intentado comparar los precios del último pedido abierto

con una posición abierta en él, pero toda la lógica está rota. ¿Quizás haya algo más adecuado? Gracias.

Boris. Intenta escribir en el comentario de las órdenes - límite a límite, stop a stop. Entonces, a partir de estos comentarios de posiciones abiertas, sabrás de qué han crecido las piernas. Sólo el cierre parcial de estos comentarios los borrará. Tal vez otra cosa pueda acabar con los comentarios. Sólo se guardan en el historial las posiciones borradas. Los que funcionaban no están ahí. Tienes que pasar por... te das cuenta de lo que tienes que pasar...
Razón de la queja: