Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 890

 
evillive:

Как-то примерно так:


Спасибо, только не совсем то, что надо. У Вас для одного магика прописано несколько условий закрытия, а надо наоборот.

Я придумал так: 

void CritCloseBuy()
   {
    if (OrderSelect(Ord, SELECT_BY_POS, MODE_TRADES)==true)
    {
      if ((OrderMagicNumber()==10011&&10033)&&(...условия1...)
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }
           if ((OrderMagicNumber()==10022&&10044&&10066)&&(...новые условия...))
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }           
          }
         }
Будет ли работать? Или что не правильно?
 
rapid_minus:


Спасибо, только не совсем то, что надо. У Вас для одного магика прописано несколько условий закрытия, а надо наоборот.

Я придумал так: 

Будет ли работать? Или что не правильно?

 

Это... Как бы помягче выразиться...

Переключатель switch для чего там тогда, если для одного магика код?

Но можно и ифами, если больше нравится, только условия продумать надо, те, что сейчас прописаны какие-то не такие, как надо.

Вот на это

if ((OrderMagicNumber()==10011&&10033)&&(...)

при компиляции не ругается разве?

 
evillive:

Это... Как бы помягче выразится...

Переключатель switch для чего там тогда, если для одного магика код?

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

ЗЫ: увидел продолжение. Я еще не компилировал, т.к. не закончил код. Числа нельзя перечислять с помощью операции И? 

Тогда как выкрутиться? Повторять для каждого магика? 

ЗЗЫ: Вообще-то здесь надо не И, а ИЛИ. 

 
rapid_minus:

Тогда как выкрутиться? Повторять для каждого магика? 

Ага.


А про свитч всё-таки покурите букварь, там наоборот, сколько угодно вариантов обрабатывается (case 0:.., case 1:..., case N:..., где число = значение магика). В примере просто лень писать было, вот только на два магика меня хватило, да на вариант по умолчанию ;)

 
evillive:
Ага

Наверное все-таки с ИЛИ не надо расписывать для каждого магика?
 
rapid_minus:

Наверное все-таки с ИЛИ не надо расписывать для каждого магика?
Надо, Федя, надо (с)
 
evillive:

Ага.


А про свитч всё-таки покурите букварь, там наоборот, сколько угодно вариантов обрабатывается (case 0:.., case 1:..., case N:..., где число = значение магика). В примере просто лень писать было, вот только на два магика меня хватило, да на вариант по умолчанию ;)

Спасибо за разъяснение свитча. Я его неправильно понял.
 

И все-таки в свитче получается то же самое повторение одного условия закрытия для разных магиков, что и с ифами.

Вопрос только какой вариант съест больше бит.

 
rapid_minus:

И все-таки в свитче получается то же самое повторение одного условия закрытия для разных магиков, что и с ифами.

Вопрос только какой вариант съест больше бит.

Я что-то пропустил,- уже оптимизируем код? 
 
rapid_minus:

И все-таки в свитче получается то же самое повторение одного условия закрытия для разных магиков, что и с ифами.

Вопрос только какой вариант съест больше бит.

Это такое же ветвление, как и if(), просто аккуратнее выглядит и удобнее кодить, если для выбора из трёх и более одиночных вариантов целых чисел. Если есть только два варианта, или же сравнивается не целочисленные выражения, тогда только  if(). А ещё по if() можно комбинировать несколько вариантов (if( вариант1 &&  вариант2  || вариант3 ) {действие;}), а в switch напрямую нельзя, только по очереди.

switch
if()
switch (x)
{
 case 1: действия по варианту 1; break;
 case 2: действия по варианту 2; break;
 case 3: действия по варианту 3; break;
 default: действия по умолчанию; break;
}
if( вариант1 ) { действия по варианту 1; }
else if( вариант2 ) { действия по варианту 2; }
else if( вариант3 ) { действия по варианту 3; }
else { действия по умолчанию; }
Причина обращения: