Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью и ее прочитают тысячи человек по всему миру!
bruklin59
236
bruklin59 2012.05.12 03:13 

Мультивалютник открывает ордера (на демо и реале) по всем парам по сигналу индикатора, но не закрывает их по обратному сигналу.

В тестере все работает (так как одна пара только) . В чем проблема? Привожу ниже часть кода закрытия ордеров. Чего-то не хватает ?

//+----------------------------------------------------------------------------+
void  CloseSymbol(string vSymbol)
{
     bool error=true;
     int err,OT;
    double point = MarketInfo(vSymbol,MODE_POINT);   
    double bid   = MarketInfo(vSymbol,MODE_BID);
    double ask   = MarketInfo(vSymbol,MODE_ASK);
  if(ExistPositions(vSymbol))
    {
         for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {  
       if ((vSymbol==Symbol1 || vSymbol==Symbol2 || vSymbol==Symbol3 || vSymbol==Symbol4 ||
           vSymbol==Symbol5 || vSymbol==Symbol6))
            {
     OT = OrderType();
if(GetCloseSignal(vSymbol)==1) 
    if (OT==OP_BUY)
                 { 
error=OrderClose(OrderTicket(),OrderLots(),Bid,30,Blue);
          if (error) Alert(vSymbol,"  Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                 }
//------------------------------------------------------------------------------------------------------------------------------------
    if(GetCloseSignal(vSymbol)==-1)
     if (OT==OP_SELL) 
               {
error=OrderClose(OrderTicket(),OrderLots(),Ask,30,Red);
        if (error) Alert(vSymbol,"  Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                                "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }

//----------------------------------------------------------------------------------------------------------------------------    
          } 
       }
     }
   }
     return(0);
    
}//  close
//====================================================================================================
Евгений
364
Евгений 2012.05.12 03:57  

Bid, Ask в OrderClose().

Igor Kim
2757
Igor Kim 2012.05.12 04:24  

Свои переменные лучше именовать более различимо, чем просто строчный первый символ, то есть вместо ask и bid лучше писать myAsk и myBid.

ЗЫ. Я эти переменные именую pa и pb - сокращения от Price Ask и Price Bid.

bruklin59
236
bruklin59 2012.05.12 04:27  

ё-моё, неужели в этом дело,( проверю в понедельник), а я голову сломал. Хотя в тестере работало. Спасибо.

Может еще чего не так?

Рустам
3602
Рустам 2012.05.12 04:34  
pistolet:Может еще чего не так?


Хрень полная, зачем такие сложности с указанием нескольких глобальных символов? где нормализация цен ? пройдитесь по кодбейзу, там вагон приличных скриптов валяется...

for(int i=OrdersTotal();i>=0;i--){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
       if(OrderSymbol()==vSymbol){
         if(OrderType()<OP_BUYLIMIT){
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(OrderClosePrice(),Digits),MarketInfo(Symbol(),MODE_DIGITS));
         }
      }
   }
}
Евгений
364
Евгений 2012.05.12 05:24  
pistolet:

ё-моё, неужели в этом дело,( проверю в понедельник), а я голову сломал. Хотя в тестере работало. Спасибо.

Может еще чего не так?

Введите условие для выбранного ордера :

//--------------------------------------
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        { if(OrderSymbol()==vSymbol){
//--------------------------------------
PapaYozh
3768
PapaYozh 2012.05.12 05:38  
pistolet:

Хотя в тестере работало.

С каких пор тестер стал мультивалютным?
Victor Nikolaev
Модератор
14039
Victor Nikolaev 2012.05.12 05:52  
PapaYozh:
С каких пор тестер стал мультивалютным?

Если учитывать ограничения,то всегда им был
bruklin59
236
bruklin59 2012.05.12 07:32  
PapaYozh:
С каких пор тестер стал мультивалютным?

имеется ввиду одна пара в тестере, то есть каждая пара в отдельности из мультивалютника в тестере работает, а вместе на демо нет.
PapaYozh
3768
PapaYozh 2012.05.12 08:05  
Vinin:

Если учитывать ограничения,то всегда им был

А, ну да, точно. Это ж из разряда "Вы можете получить «Форд-Т» любого цвета, при условии, что этот цвет будет черным."
PapaYozh
3768
PapaYozh 2012.05.12 08:15  
pistolet:

Мультивалютник открывает ордера (на демо и реале) по всем парам по сигналу индикатора, но не закрывает их по обратному сигналу.

В тестере все работает (так как одна пара только) . В чем проблема? Привожу ниже часть кода закрытия ордеров. Чего-то не хватает ?


Вместо

error=OrderClose(OrderTicket(),OrderLots(),Bid,30,Blue);
//
error=OrderClose(OrderTicket(),OrderLots(),Ask,30,Red);

используйте

error=OrderClose(OrderTicket(),OrderLots(),bid,30,Blue);
//
error=OrderClose(OrderTicket(),OrderLots(),ask,30,Red);
И правильно Игорь Ким посоветовал: не используйте имена переменных, совпадающие с зарезервированными словами.
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий