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

 
He comprobado este código ahora en una cuenta real, todo está bien, he modificado todas las órdenes de mercado, pero lo único que no he tocado son las órdenes pendientes. ¿Cuál es el problema? ¿Qué te parece?
 
Noterday:
He comprobado este código en mi cuenta real, todo está bien, he modificado todas las órdenes de mercado, pero he dejado las órdenes pendientes sin tocar. ¿Cuál es el problema? ¿Qué te parece?


En la condición

         if(cmd==OP_BUY || cmd==OP_SELL)

y en la condición

if(cmd==OP_BUY)
 
No lo entiendo :(
 
Noterday:
No lo entiendo :(

También hay una frase en el nombre del script que dice órdenes de mercado solamente... Elimine esas condiciones para las órdenes de mercado, entonces se cumplirán las condiciones para las órdenes de mercado y pendientes, eso es todo. No, eso no es todo. Léalo atentamente: requisitos y limitaciones... ...y asegúrate de añadir estos requisitos mínimos a tus pedidos pendientes para que también se cumplan.
 
KONDOR:


Así que no tengo ninguna cadena de este tipo, no selecciono el tipo en absoluto, sino que modifico TODAS las que tengo, ya sean pendientes o de mercado.
 
Noterday:
Así que no tengo ninguna línea de este tipo, no selecciono el tipo en absoluto, modifico TODAS, ya sean pendientes o de mercado.

Te escribo para que leas atentamente: "Restricción de distancia FreezeLevel.

Las órdenes de mercado no se cierran si los valores de StopLoss o TakeProfit violan los requisitos del parámetro FreezeLevel.
Las órdenes de mercado StopLoss o TakeProfit no pueden ser modificadas si los valores de StopLoss o TakeProfit violan los requisitos del parámetro StopLevel.
La eliminación y modificación de órdenes pendientes no se realiza si el precio abierto declarado de la orden viola los requisitos del parámetro FreezeLevel.
 

Eso es, el error estaba ahí:

if (OrdersTotal()!=0)
  {
   
   bool   modify;
   int    Done=0;
   for (i = 1; i <= OrdersTotal(); i++)
      {
       if (OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES) == true)
         {
          Stop = OrderStopLoss();
          Take = OrderTakeProfit();
          Print("Пробую модифицировать ",i," ордер (#",OrderTicket(),")");
          modify = OrderModify(OrderTicket(),0,SL,TP,0,0);                          <<<--------------------- во втором параметре OrderModify нужно ставить не ноль а Orderopenprice()
          if (modify==true) Done++;
          if (modify==false)
            {
             int error = GetLastError();
             Print("                 Неудача... Ошибка ",error);
             Sleep(5000);
            }
         }
       }
    Alert("Модифицировано  ",Done,"  из  ",OrdersTotal());
    Sleep(10000);
   }
 
Noterday:
Así que no tengo ninguna línea de este tipo, no selecciono el tipo en absoluto, modifico TODOS, sean pendientes o de mercado.


También en la condición esta

( cmd==OP_BUYLIMIT || cmd==OP_SELLSTOP)

cambiar de forma similar bajo la orden a seleccionar (cambiar la condición de definición de la clase de orden a una de estas:

Constante Valor Descripción
OP_BUY 0 Posición de compra.
OP_VENDER 1 Posición de venta.
OP_BUYLIMIT 2 Posición pendiente de límite de compra.
OP_SELLLIMIT 3 Posición pendiente delímite de venta.
OP_BUYSTOP 4 Posición pendiente de stop de compra.
OP_SELLSTOP 5 Posición pendiente de stop de venta.
y ya entonces se comprueba el cumplimiento de los "Requisitos y restricciones de negociación" de tal o cual orden seleccionada, cada tipo de orden seleccionada tiene sus propios requisitos y restricciones... y aquí el script es sólo para órdenes de mercado... Edita por analogía y ya está: tienes toda la información. Con calma, con cuidado y metódicamente.

 
Sí, todo estaba originalmente escrito correctamente, el error estaba en lo anterior. ¡GRACIAS A TODOS! =)))
 
¿Es posible acelerar el proceso de pruebas?
Razón de la queja: