Как расчитать step по разным расстояниям - страница 3

 
Lilita Bogachkova #:

Кажется, я не понимаю. Как это условие if( х/2-x/2!=0) может быть истинным?

вы показали код , а так написал просто, что было понятнее автору.

 
Alexander Ivanov #:

вы показали код , а так написал просто, что было понятнее автору.

А как будет "понятнее автору", если участникам с опытом ничего непонятно?

 
Lilita Bogachkova #:

Кажется, я не понимаю. Как это условие if( х/2-x/2!=0) может быть истинным?

Очевидно, нам представили обфускацию кода: одно условие всегда истинно, второе - всегда ложно.

 
Aleksei Stepanenko #:

Возможно подойдёт степенная функция, чтобы подобрать что-то близкое к желаемому

Но по идее, шаг нужно не увеличивать, а уменьшать, поскольку желательно залепить последний ордер на самую макушку, а вероятность разворота всё выше и выше. Но это Ваше дело.

не получилось

 
Lilita Bogachkova #:

Кажется, я не понимаю. Как это условие if( х/2-x/2!=0) может быть истинным?

Ошибка конечно, в пояснениях правильно, x*i+i     x*i-i/2  нелинейность как бы))) Хотя получается если вынести за скобки i  

i*(x+1)      i*(x-0.5)

В общем то не много не линейно увеличивающийся шаг это x*i*koef где i на каждой итерации увеличивается ++i, а от коэффициента зависит скорость, а если нужно линейно увеличивать , то i надо убрать. 

 
Alexander Ivanov #:

Привет!

Учитывая ваши желания по цифрам заданным вами вывел такой алгоритм.


если (х>1 и х/2-x/2=0)     шаг = х*н + н

если (х>1 и х/2-x/2<>0)   шаг = х*н - н/2

х - количество ордеров

н - начальный, заданный шаг (в нашем случае равен 20 )

<> - знак не равно.

в скобке проверка количество ордеров и проверка четность-нечетность.
 
Alexander Ivanov #:
в скобке проверка количество ордеров и проверка четность-нечетность.

Тоже не понял логики, можно кодом? Или со скобками условие написать, а то по арифметике x/2-x/2=0 всегда. И шаг вроде от номера уровня сетки у ТС зависит а не от количества ордеров.

 
Alexander Ivanov #:
в скобке проверка количество ордеров и проверка четность-нечетность.

Если это проверка на четное или нечетное количество ордеров:

Привет!

Учитывая ваши желания по цифрам заданным вами вывел такой алгоритм.



если (х>1 и х/2-x/2=0)     шаг = х*н + н

если (х>1 и х/2-x/2<>0)   шаг = х*н - н/2

х - количество ордеров

н - начальный, заданный шаг (в нашем случае равен 20 )

<> - знак не равно.
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static int x=0; //количество ордеров
   int n=20;       //начальный, заданный шаг (в нашем случае равен 20 )
   int step=0;     //рассчитанное значение

   if(x<=10)
     {
      if(x>1 && x%2==0)
        {
         step = x*n + n;
         Print("четное количество ордеров: "+x+", шаг: "+step);
        }

      if(x>=1 && x%2!=0)
        {
         step = x*n - n/2;
         Print("нечетное количество ордеров: "+x+", шаг: "+step);
        }
      x++; //увеличиваем количество ордеров
     }
  }

Результат:

нечетное количество ордеров: 1, шаг: 10
четное количество ордеров: 2, шаг: 60
нечетное количество ордеров: 3, шаг: 50
четное количество ордеров: 4, шаг: 100
нечетное количество ордеров: 5, шаг: 90
четное количество ордеров: 6, шаг: 140
нечетное количество ордеров: 7, шаг: 130
четное количество ордеров: 8, шаг: 180
нечетное количество ордеров: 9, шаг: 170
четное количество ордеров: 10, шаг: 220
 
Valeriy Yastremskiy #:

Тоже не понял логики, можно кодом? Или со скобками условие написать, а то по арифметике x/2-x/2=0 всегда. И шаг вроде от номера уровня сетки у ТС зависит а не от количества ордеров.

ага там допустил ошибку в проверке чет-нечет :))

если (х=2 и MathCeil(х/2) * 2=x)     шаг =  н

если (х>2и MathCeil(х/2) * 2=x)     шаг = х*н + н

если (х>2 и MathCeil(х/2) * 2<x )   шаг = х*н - н/2

х - количество ордеров

н - начальный, заданный шаг (в нашем случае равен 20 )

<> - знак не равно.

==========================================

как то так...

Формулы сделал подгоняя под первые цифры-step  автора  -20... 50... 100...