Вопрос знатокам MQL - страница 7

 

Пока получается. И ещё вопрос.

Обнаружился ещё один такой косочек кода.

 
if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) {
        switch (OrderMagicNumber()) {
            case 212:  MMMMM = 12;   break;
            case 211:  MMMMM = 11;   break;
            case 210:  MMMMM = 10;   break;
            case 209:  MMMMM = 9;    break;
                                    }

Правильно ли будет его заменить на -

if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 
     {     
            if ( OrderMagicNumber()==Magic_212)  MMMMM = 12;   
            if ( OrderMagicNumber()==Magic_211)  MMMMM = 11;   
            if ( OrderMagicNumber()==Magic_210)  MMMMM = 10;   
            if ( OrderMagicNumber()==Magic_209)  MMMMM = 9;    
     }
 
Вот гляжу я на Ваши упражнения и сам себе думаю:
- Вы заводите несколько магиков
- потом отслеживаете номера магиков и в зависимости от номера присваиваете переменной МММММ соответствующее числовое значение

Вопрос: не проще ли сразу присваивать магику это значение один раз в ините без всякого цикла, а потом его использовать?
 
Rita:

Пока получается. И ещё вопрос.

Обнаружился ещё один такой косочек кода.

Правильно ли будет его заменить на -


if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 
     {     
            MMMMM = OrderMagicNumber()-200;   
     }
Оно конечно только для этого конкретного случая
 

Спсб. за ответы.

Нет, granit77, - дело обстоит не совсем так.

Меня попросили исправить-доработать чужой советник (- вынести магики в глобальные). Там 1800 строчек кода и сложные составные алгоритмы взаимоуправления ордерами с разл. магиками.

Я просто физически не могу тратить время, чтобы вникать в сложные эти схемы управления. Мне проще чисто-механически (не вникая) заменить цифровые магики на "глобальные" и исправить эти магики в нескольких функциях.

 
Rita:

Спсб. за ответы.

Нет, granit77, - дело обстоит не совсем так.

Меня попросили исправить-доработать чужой советник (- вынести магики в глобальные). Там 1800 строчек кода и сложные составные алгоритмы взаимоуправления ордерами с разл. магиками.

Я просто физически не могу тратить время, чтобы вникать в сложные эти схемы управления. Мне проще чисто-механически (не вникая) заменить цифровые магики на "глобальные" и исправить эти магики в нескольких функциях.


А Леонид куда пропал?
 
Торгует он. Делает вид, - что некогда ему. Стрижет арбитражно "бабки" на спреде золото-серебро.
 
Rita:
Торгует он. Делает вид, - что некогда ему. Стрижет арбитражно "бабки" на спреде золото-серебро.
Ну, если деньги в тумбочку кладет, делайте вид, что верите в арбитраж.
 
Да, - так и делаю...

--------------------------

И наверное, последний вопрос.

Вот такая часть кода:

//double getNextOrderPriceByNum(int TTTT, double DDDD) {

   if (StepSum == FALSE && StepMultiply == FALSE) {

      switch (TTTT) {
      case 101:
         return (DDDD - Step * Point);
      case 102:
         return (DDDD - Step * MathPow(1, 1) * Point);
      case 103:
         return (DDDD - Step * MathPow(1, 2) * Point);
      ... ... ...
         
      }
      return (0);
   }
 

Чтобы заменить case 101-102-103.... на Magic_101, Magic_102, Magic_103 -...

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

   if (StepSum == FALSE && StepMultiply == FALSE) {

switch (TTTT) {
for (i=0; i<k; i++)                           {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  if (OrderSymbol() == Symbol())                 {
    double Result ;
    if ( OrderMagicNumber()==Magic_101)  Result = (DDDD - Step * Point);   
    if ( OrderMagicNumber()==Magic_102)  Result = (DDDD - Step * MathPow(1, 1) * Point);   
    if ( OrderMagicNumber()==Magic_103)  Result = (DDDD - Step * MathPow(1, 2) * Point); 
                                                    }}}
      return (Result);
                     }
                                                   }
 
Rita:
Да, - так и делаю...

--------------------------

Чтобы заменить 101-102-103.... на Magic_101 - Magic_102 - Magic_103 -...

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

не правильно. почитайте об операторе switch https://docs.mql4.com/ru/basis/operators/switch
в вашем примере надо просто конструкцию switch заменить на if

      switch (TTTT) {
      case 101:
         return (DDDD - - Step * Point);
      case 102:
         return (DDDD - Step * MathPow(1, 1) * Point);
      case 103:
         return (DDDD - Step * MathPow(1, 2) * Point);
      }

заменить на

      if(TTT==Magic_101) return (DDDD - - Step * Point);
      else if(TTT==Magic_102) return (DDDD - Step * MathPow(1, 1) * Point);
      else if(TTT==Magic_103) return (DDDD - Step * MathPow(1, 2) * Point);
      ... ... ...
 
Благодарю, abolk, за разъяснение.
Причина обращения: