[¡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 502

 
editar | borrar Ayuda para encontrar una función para colocar órdenes que tenga en cuenta el deslizamiento y sin errores 130-134.
 
nuan:
editar | borrar Ayuda para encontrar una función para colocar órdenes que tenga en cuenta el deslizamiento y sin errores 130-134.

Muéstrame tu variante.
 
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError());

Con cualquier valor de SL y TP da 134, a menudo no coloca ninguna orden.

abre con la condición if(NumberOfOrders(NULL)==0)


En el probador, en lugar de una orden siempre coloca un montón, es decir, no puedo entender por qué debe colocar una orden si no hay otras órdenes abiertas en este par

 
perdón, por qué hay más de un pedido
 
nuan:
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError());

Con cualquier valor de SL y TP da 134, a menudo no coloca ninguna orden.

abre con la condición if(NumberOfOrders(NULL)==0)


En el probador, en lugar de una orden siempre coloca un montón, es decir, no puedo entender por qué debe colocar una orden si no hay otras órdenes abiertas en este par


ERR_NOT_ENOUGH_MONEY 134 No hay suficiente dinero para completar la transacción
 

Buen día. Estoy haciendo un EA, abre 2 órdenes en una determinada condición (en sentido figurado: cuando el precio sube y baja). Cuando el precio sube, abre 2, cuando el precio baja, cierra esos 2 y abre un nuevo 2. Una orden va sin take profit, la segunda orden con take profit. Hay un problema con el segundo. En el momento en que su tiempo de la muerte viene, no se selecciona, aquí es el código para eliminar las órdenes:

for (int a = 0; a < OrdersTotal()-1; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "MyOrd" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

Lo mismo para OP_BUY. Estoy comparando los comentarios para saber con seguridad que es una orden abierta por mi EA y no manualmente o por otro EA. Este es el problema con OrderSelect, simplemente no quiere seleccionar una orden con un take profit. Cuando llega a su número, OrderSelect devuelve false. No hay ningún error en el registro del probador, GetLastError también dice que todo está bien (devuelve 0). ¿Por qué no se selecciona? ¿Por qué no hay error si no se puede seleccionar? Gracias a todos.

 
Pregunta de seguimiento. ¿Por qué en el probador, cuando pongo el periodo en mes+, aparecen cinco dígitos en los resultados? Donde se ponen los precios, pongo NormalizeDouble(SomeValue, Digits). Y sólo en los resultados, el registro no jura, aunque cuando no conocía la función de redondeo, entonces juraba.
 

la condición

a < OrdersTotal()-1

se comprueba en cada iteración.

Piensa a qué equivale a y a qué equivale OrdersTotal() -1 después de la primera iteración

 
Solree:

OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

El lote y el precio tienen dígitos diferentes.
 

Solree:

NormalizarDoble(LotesdeOrden(), Dígitos)


Además, no es tan fácil normalizar el lote.
Hay que tener en cuenta el paso permitido de cambio de lote.
Por ejemplo, si el paso es 0,01, entonces normalice por 2
y si el paso es 0,1, entonces la normalización debe ser 1
Razón de la queja: