[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 39

 
artem86:

Подсажите пожайлуста! Как при достижении определенной цены закрить 5 отложеных ордеров с однаковым magic.

Заранее спасибо!


if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {  if(OrderMagicNumber()==magic_number)
         {  if (OrderClose(OrderTicket(),LOT,price,3)==true)
            {  Print("Error = ",GetLastError()); return(0);
}  }  }  }  }
Если все эти ордеры были открыт на продажу то price=Ask, если на покупку price=Bid.
 
paladin80:
Если ордер был открыт на продажу то price=Ask, если на покупку price=Bid.


Неверно, надо

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {  if(OrderMagicNumber()==magic_number)
         {  if (OrderDelete(OrderTicket())==true)
              {  
              Print("Error = ",GetLastError()); return(0);
              } 
         } 
      }  
   }  
}
 
r772ra:


Неверно, надо

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

Ребята - подскажите, в тестере, а потом и при торговле на торговом счете, в том числе и вручную получается так, что возможно НЕ НОРМАЛИЗОВАТЬ объем открываемой позиции, при этом она будет открыта нужным объемом. Например, открываю рын. ордер 0,1210 лот - в терминале открывается 0,12 - т.е. "лишняя" дробная часть отбрасывается по умолчанию.

Подскажите - это такая особенность очередного "апгрейда" терминала или так изначально можно было.

Я использовал раньше такую конструкцию нормализации объема, просто в одном из своих совов упустил этот момент, а ордера продолжают открываться, причем во вкладке "Эксперты" мне принтами до открытия позы выдается предварительный ее объем для открытия, в частности 0,121 лот - на микро счете тестирую на демо.

Функция нормализации лота:

//+------------------------------------------------------------------+
//| Нормализация лота                                                |
//+------------------------------------------------------------------+

double NormalizeLots(double lot)
{
   double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
   double lots = NormalizeDouble(lot / lotStep, 0) * lotStep;   
   lots = MathMax(lots, MarketInfo(Symbol(), MODE_MINLOT));
   lots = MathMin(lots, MarketInfo(Symbol(), MODE_MAXLOT));   
   return (lots);
}

Вызов ее из старта эксперта:

// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...            
                    Lots_New = NormalizeLots(Lots_New);
                    if (lastType == OP_SELL) WmOrderSend(Symbol(), OP_BUY, Lots_New, Ask, 0, 0, "итерация" , MagicNumber);
                    if (lastType == OP_BUY)  WmOrderSend(Symbol(), OP_SELL,Lots_New, Bid, 0, 0, "итерация" , MagicNumber);

Кто в курсе - прокомментируйте, плз...

П.С. Еще раз проверил - тут видимо такая ситуация, что при попытке открыться объемом 0,1466 - открывает 0,14, т.е. отбрасывает все, что справа от 2-го знака после запятой.

Если проводить нормализацию, то там, похоже, будет открытие 0,15 лот - т.е. с округлением.

Надо будет проверить...

П.П.С. Все равно: Кто в курсе - прокомментируйте, плз...

 

блин игнор.

 
ПОМОГИТЕ..плиз..Запускаю советник на демо и реальный счет-пишет:будет запущен следующим тиком..тики приходит,а он не запускается,хотя галочка"разрешить советнику торговать"стоит,советник включен,в журнале ошибок нет,интернет работает и другие советники тоже работают.При этом этот советник работает исправно в тестере.Если это поможет:советник перестал включаться после того как я добавила в него функцию фильтрации из этой статьи
 
sellena:
Если это поможет:советник перестал включаться после того как я добавила в него функцию фильтрации из этой статьи

Если это поможет, то поговорите с одним из работников здесь.
 
sergeev:

Если это поможет, то поговорите с одним из работников здесь.
Алекс, гляньте мой вопрос, если у Вас есть время... Благодарю.
 
Roman.:
Алекс, гляньте мой вопрос, если у Вас есть время... Благодарю.

могу вам сказать одно - я уже обращался в сервис (по другому поводу), и мне там сказали : "наедятся на умолчания вредно, используйте собственные фильтры и обработки, если хотите быть уверены". Так что решать вам...
 
Roman.:
Алекс, гляньте мой вопрос, если у Вас есть время... Благодарю.

FAQ верно говорит. Нельзя надеяться на "умолчания". Так как помню что вылазила часто 131 ошибка (неверный лот), если не делать нормализацию перед отправкой ордера.
Может сейчас МК уже и сделали на серверах свою проверку лота по умолчанию при отправке ордера на исполнение.

Поэтому всегда сами выполняйте нормализацию цен и лотов перед отправкой.

Это для вас же - правила хорошего кодинга и залог меньшего геморроя с потенциальными проблемами в будущем.

Причина обращения: