Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не знаешь, как пользоваться виджетом? Прочитай об этом статью!
Mihail Marchukajtes
3295
Mihail Marchukajtes 2013.09.02 15:55 

Скрипт перетягивает стоп лосс в безубыток. Однако делает это только для первого ордера. Остальные перетаскивать не хочет. Что не так?????

int start()
  {
   bool   result;
   double stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal()+1;
   point=MarketInfo(Symbol(),MODE_POINT);
//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice()+50*point;
               else            stop_loss=OrderOpenPrice()-50*point;
               result=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
             break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); break; }
     }
//----
   return(0);
  }
Vitalie Postolache
11035
Vitalie Postolache 2013.09.02 16:00  

Попробуй пересчитывать наоборот, с самых старых:

int start()
  {
   bool   result;
   double stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal()-1;
   point=MarketInfo(Symbol(),MODE_POINT);
//----
   for(int i=total; i>=0; i--)
     {
      много кода
     }
//----
   return(0);
  }
Mihail Marchukajtes
3295
Mihail Marchukajtes 2013.09.02 16:06  
Сейчас попробую.....
Mihail Marchukajtes
3295
Mihail Marchukajtes 2013.09.02 16:10  
Нифига... Также перетягивает, Но уже последний, а остальные не хочет.... Все ордера одного типа!!!!
Vladislav Andruschenko
82526
Vladislav Andruschenko 2013.09.02 16:28  
 //---- modify first market order
            while(true)
              {


смущает данный вид
лучше так: 


 //---- modify first market order
int a=3;            
while(a==3)
              {


Vladislav Andruschenko
82526
Vladislav Andruschenko 2013.09.02 16:29  

и вот здесь ты вышел из цикла напрочь:

//---- print modified order (it still selected after modify)
             OrderPrint();
             break;

break;

убери то что я выделил красным.

Mihail Marchukajtes
3295
Mihail Marchukajtes 2013.09.02 16:29  
Вот мне тоже это конструкция не совсем понятна..... Попробую изменить...
Vladislav Andruschenko
82526
Vladislav Andruschenko 2013.09.02 16:30  
просто лично у меня при while(true) зависает тестер, даже если есть останова.
Mihail Marchukajtes
3295
Mihail Marchukajtes 2013.09.02 16:31  

Кхе Кхе... Оказывается достаточно убрать прерывание и всё заработало, даже с с условием цикла......

while(true)

Всем спасибо!!!!!

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий