Как реализовать управление условием?

 

Понадобилось простое выполнение по условию:

- если указано любое число, магик в данном случае, то закрываем по магику

- если 0, или ещё лучше ничего, то закрывается всё

void Закрыть(int м)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==м)
{
if(OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),дев);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),дев);
}
}
}

Глянул подобное в коде ниже, но смысл построения "фильтра" непонятен вообще...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 11.09.2008                                                     |
//|  Описание : Сопровождение позиций простым тралом                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void SimpleTrailing(string sy="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        po=MarketInfo(OrderSymbol(), MODE_POINT);
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            pp=MarketInfo(OrderSymbol(), MODE_BID);
            if (!TSProfitOnly || pp-OrderOpenPrice()>TStop.Buy*po) {
              if (OrderStopLoss()<pp-(TStop.Buy+TrailingStep-1)*po) {
                ModifyOrder(-1, pp-TStop.Buy*po, -1);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            pp=MarketInfo(OrderSymbol(), MODE_ASK);
            if (!TSProfitOnly || OrderOpenPrice()-pp>TStop.Sell*po) {
              if (OrderStopLoss()>pp+(TStop.Sell+TrailingStep-1)*po || OrderStopLoss()==0) {
                ModifyOrder(-1, pp+TStop.Sell*po, -1);
              }
            }
          }
        }
      }
    }
  }
}


В общем, подскажите плиз с идеологией построения управлением... вкл\выкл, по условию..

 

Или я не понял сложности задачи, или...

if(OrderMagicNumber()==м || м <= 0)
 

Закрыть(0); или Закрыть(); закроет все позиции,

а

Закрыть(123)

лишь только те, что имеют магик 123 на борту...

 

Хм...

Если:

Закрыть(123); закрывает по магику

Закрыть(0); закрывает что без магика (например руками открытые), с магиком, любым, остаются

Закрыть(); осталось с этим разборки учинить...


Вот хоть убейте! если строки можно через пустоту передать "", ноль вот можна тож,

а как с интом то а?

 

Если так, то Ким тебе не помощник, у него один тип действия с несколькими фильтрами, а у тебя ветка по фильтру. Проще всего прогнать после цикла с магиком второй цикл удаления с м<=0.

 
А если так:
if((OrderMagicNumber()==м&&м!=0)||м==0&&OrderMagicNumber()==0)
 

Да, щас попробую...


Насчёт пустоты в параметре.

Видимо придётся -1 использовать...

 
Если не передавать ничего (Закрыть() ), а функцию оформить, как показано ниже, то будет м =0 внутри функции. ИМХО.
void Закрыть(int м=0)
 
kombat писал(а) >>

Насчёт пустоты в параметре.

Видимо придётся -1 использовать...

Задай в функции значение по умолчанию, тогда можно будет и пустоту ставить.

 
Roger >>:

Задай в функции значение по умолчанию, тогда можно будет и пустоту ставить.

Да это то я знаю...

Просто хотел развести управление на три возможных.

Выше указал...

-1 (или пустота) удаляется все

0 все кроме тех что магиком

123 (магик явно) удаляются те что с этим магиком

 
Тогда просто добавляется один элемент:
if((OrderMagicNumber()==м&&м!=0)||(м==0&&OrderMagicNumber()==0)||м==-1)