[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 568

 
Catrock >>:

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

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

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

谢谢你)但这并没有解决这个问题。

情况是这样的:我有一个类型为5(卖出止损)的挂单,然后价格达到了它,它变成了一个市场订单。订单类型是否有变化?也就是说,5的属性是否发生了变化?

当我插入上述组合时,"行动 "仍然改变了未平仓订单的特征,但它们不应该改变。这就是为什么我想把它作为一个条件,使行动只适用于挂单。

         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();
 
如果卖出止损被执行,它将成为类型1,不再是挂单,而成为市场订单。
 

搞不清楚。

我把时间放在数组中,但打印机打印出的是0 =(

for (i=0; i<=10; i++)
   {
     datetime Array[i] = iTime(NULL,0,i);
     Print("Время: ",Array[i]);
   }
打印输出零点...怎么了?
 
那么我就被卡住了))当我在测试器中以可视化方式运行专家顾问时,市场订单仍在变化,我不明白为什么...我做了一个大的代码,显然在某个地方有一个算法错误。
 
Noterday >>:

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

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

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

数组必须在循环之外声明,而且大小必须固定(或表明它是一个指示器数组)。

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


}
 
Catrock >>:
Тогда я застрял)) Запускаю эксперт в тестере с визуализацией, рыночный ордер все равно меняется, непонятно почему.. Нагородил большой код, видимо ошибка где то алгоритмическая.
市场秩序究竟在发生什么变化?更清楚地了解你想要实现的目标。
 
Techno >>:

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

仍然无法使用....iTime如何将时间写入数组中?从1970年开始的秒数或 "yyyy:mm:dd hh:mm"
 
Noterday >>:
всё равно не работает.... как iTime записывает время в массив? В секундах о 1970 или "yyyy:mm:dd hh:mm"
用这种设计,是的,在几秒钟内。这一切对我来说都是可行的。编译和检查的只是这部分代码。
 

在此时的市场订单中,获利和止损水平会发生变化。他们不应该。

在我的系统中,只有待处理的订单 可以被更改。如果该订单成为市场订单,则不允许更改。专家顾问总共使用一个订单。

原因: