[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 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]);
   }
プリントはゼロを出力する...どうしたんですか?
 
そうなるともうお手上げです))テスターでExpert Advisorを可視化して実行すると、やはり成行注文が変わってしまうのですが、なぜでしょう...。大きなコードを作ってみたのですが、どうやらどこかにアルゴリズムの間違いがあるようです。
 
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"
このデザインなら、そう、数秒で。すべて私に合っています。この部分だけコンパイルして確認してください。
 

この時点での成行注文では、テイクプロフィットやストップロスの水準が変化します。そうであってはならないのです。

私のシステムでは、保留中の注文のみ 変更することができます。成行注文になった場合は、変更できません。Expert Advisor は合計で 1 つの注文を使用します。