[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 568

 
Catrock >>:

Скажите пожалуйста, как реализовать условие.-

If( есть отложенные ордера) то делаем то и то ;

 for(int i=0; i<OrdersTotal();i++)
  {
  OrderSelect(i,SELECT_BY_POS);
  if(OrderType()==2||3||4||5) // Есть ли отложники?
   {
   // Действия
   }
  }
 

Gracias) Pero eso no resolvió la situación.

Esta es la situación: tenía una orden pendiente de tipo 5(Sell Stop) y luego el precio la alcanzó y se convirtió en una orden de mercado. ¿Ha cambiado el tipo de pedido? Es decir, ¿ha cambiado el 5 en sus propiedades?

Cuando introduzco la combinación mencionada, las "Acciones" siguen cambiando las características de la orden abierta pero no deberían hacerlo. Por eso me gustaría que fuera una condición para que las acciones se apliquen sólo a los pedidos pendientes.

         if(OrdersTotal())                                              // Если стоят ордера в списке
         {
             OrderSelect(0, SELECT_BY_POS);                             // Выбираем первый
             if(OrderType()==(2||3||4||5))                              // Если он не открытый то можем модифицировать
             {
               Alert("Что то делаю с ордером =)");
               if (PricePointNew>PricePointOld)
               OrderModify( Ticket, PricePointNew-5*0.0001, PriсeStopNew+8*0.0001 , PricePointNew-Profit*0.0001 ,0 ,Green);
                else Print("OrderModify 1 вернул ошибку - ",GetLastError());
            
               if (PricePointNew<PricePointOld)
               OrderModify( Ticket, PricePointNew-5*0.0001, PriсeStopNew+8*0.0001 , PricePointNew-Profit*0.0001 ,0 ,Green);
               else Print("OrderModify 2 вернул ошибку - ",GetLastError());
            
               if(PriсeStopNew>PriсeStopOld && (PriсeStopNew-PriсeStopNew)<(Stop*0.0001))
               OrderModify( Ticket, PricePointNew-5*0.0001, PriсeStopNew+8*0.0001 , PricePointNew-Profit*0.0001 ,0 ,Green);
               else Print("OrderModify 3 вернул ошибку - ",GetLastError());
         
             if(PriсeStopNew<PriсeStopOld)
             OrderModify( Ticket, PricePointNew-5*0.0001, PriсeStopNew+8*0.0001 , PricePointNew-Profit*0.0001 ,0 ,Green);
             else Print("OrderModify 4 вернул ошибку - ",GetLastError());         
            }
         }
         else                               // Если нет ордеров, то ставим
         {
            f = OrderSend(Symbol(), 5, 0.01,(PricePointNew-5*Point*10) , 1,(PriсeStopNew+8*Point*10) ,(PricePointNew-Profit*Point*10));
            OrderSelect( 0, SELECT_BY_POS);
            Ticket =  OrderTicket();
 
si el sellstop se ejecuta, pasa a ser de tipo 1 y deja de ser una orden pendiente para convertirse en una orden de mercado.
 

No puedo entenderlo.

He puesto la hora en el array, pero la impresora imprime 0 =(

for (i=0; i<=10; i++)
   {
     datetime Array[i] = iTime(NULL,0,i);
     Print("Время: ",Array[i]);
   }
La impresión produce ceros... ¿Qué pasa?
 
Entonces estoy atascado)) Cuando ejecuto el Asesor Experto en el probador con visualización, la orden de mercado sigue cambiando, no entiendo por qué... Hice un gran código, aparentemente hay un error algorítmico en alguna parte.
 
Noterday >>:

Не могу понять

Загоняю в массив время, а принтом выводится 0 =(

Принт выводит нули... Что не так?

el array debe declararse fuera del bucle y el tamaño debe ser fijo (o una indicación de que es un array indicador)

datetime Array[10];
int start() 
{
for (int i=0; i<=10; i++)
   {
     Array[i] = iTime(NULL,0,i);
     Print("Время: ",Array[i]);
   }


}
 
Catrock >>:
Тогда я застрял)) Запускаю эксперт в тестере с визуализацией, рыночный ордер все равно меняется, непонятно почему.. Нагородил большой код, видимо ошибка где то алгоритмическая.
¿qué cambia exactamente en el orden del mercado? Tenga más claro lo que quiere conseguir.
 
Techno >>:

массив надо объявлять вне цикла и размер должен быть фиксированный(либо указание что речь о индикаторном массиве)

sigue sin funcionar.... ¿Cómo escribe iTime la hora en una matriz? En segundos desde 1970 o "aaaa:mm:dd hh:mm"
 
Noterday >>:
всё равно не работает.... как iTime записывает время в массив? В секундах о 1970 или "yyyy:mm:dd hh:mm"
con este diseño, sí, en segundos. Para mí todo funciona. Compila y comprueba sólo esta parte del código.
 

En una orden de mercado en este punto, los niveles de take profit y stop loss cambian. No deberían.

En mi sistema sólo se pueden modificar las órdenes pendientes. Si la orden se convierte en una orden de mercado, los cambios no están permitidos. El Asesor Experto utiliza una orden en total.