[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 568

 
Catrock >>:

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

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

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

Obrigado) Mas isso não resolveu a situação.

Eis a situação: eu tinha uma ordem pendente do tipo 5(Sell Stop) e então o preço chegou a ela e ela se tornou uma ordem de mercado. O tipo de pedido mudou? Ou seja, 5 mudou em suas propriedades?

Quando eu inseri a combinação acima mencionada, as "Ações" ainda mudam as características da ordem em aberto, mas não devem. É por isso que eu gostaria de fazer disso uma condição para que as ações sejam aplicadas apenas às ordens pendentes.

         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();
 
se o selltop for executado, ele se torna tipo 1 e deixa de ser uma ordem pendente e se torna uma ordem de mercado.
 

Não dá para entender.

Eu coloco o tempo na matriz, mas a impressora imprime 0 =(

for (i=0; i<=10; i++)
   {
     datetime Array[i] = iTime(NULL,0,i);
     Print("Время: ",Array[i]);
   }
Imprimir zeros de saída... O que está errado?
 
Então eu estou preso))) Quando eu dirijo o Expert Advisor no testador com visualização, a ordem do mercado ainda muda, não entendo por que... Eu fiz um grande código, aparentemente há um erro algorítmico em algum lugar.
 
Noterday >>:

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

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

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

a matriz deve ser declarada fora do laço e o tamanho deve ser fixado (ou uma indicação de que é uma matriz indicadora)

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


}
 
Catrock >>:
Тогда я застрял)) Запускаю эксперт в тестере с визуализацией, рыночный ордер все равно меняется, непонятно почему.. Нагородил большой код, видимо ошибка где то алгоритмическая.
o que exatamente está mudando na ordem do mercado? Seja mais claro sobre o que você quer alcançar.
 
Techno >>:

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

ainda não está funcionando.... Como o iTime escreve o tempo para uma matriz? Em segundos a partir de 1970 ou "yyyyy:mm:dd hh:mm"
 
Noterday >>:
всё равно не работает.... как iTime записывает время в массив? В секундах о 1970 или "yyyy:mm:dd hh:mm"
com este projeto, sim, em segundos. Tudo isso funciona para mim. Compilar e verificar apenas esta parte do código.
 

Em uma ordem de mercado, neste ponto, os níveis de lucro e de stop loss mudam. Eles não devem.

Somente ordens pendentes podem ser alteradas em meu sistema. Se a ordem se tornar uma ordem de mercado, as mudanças não são permitidas. O Expert Advisor utiliza um pedido no total.