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

 
borilunad:
Здрасьте, Аllis! Принт нужно прописать, где нет считывания по тикам! Я ставлю в принт, если есть ошибка, а если открылся, и так пропишется в журнале, что открылся, и только один раз!

Да Вы Волшебник)) Благодарю!
 
Allis:

Да Вы Волшебник)) Благодарю!
Именно, в программировании мне далеко до "Волшебник"а, я только учусь, но в некоторых других отраслях, возможно!)) Спасибо!
 

Всем добрый вечер.Есть индикатор (верхний на рисунке),который рисует свои значения (+1,0,-1) на баре №0,а расчёт ведёт по бару №1.Мне нужно написать индикатор,который бы подсчитывал количество баров в каждом отдельном непрерывном блоке из +1 и -1 верхнего индикатора и НА ВСЕЙ ИСТОРИИ (средний на рисунке,высота столбца гистограммы в единицах соответствует номеру бара).Я сделал индикатор (нижний на рисунке) ,но он начинает отрисовываться только с момента установки в окне (синяя вертикальная линия).Помогите кто может!


Код

int start()
  {
    
    int i;
      
    for(i=1;i<Bars-34-1;i++)                                               
     {
      double AO_Sig_Sig_1 =iCustom(NULL,0,"AO_His_l-b_Signal-Signal_sploshnoy_PSR",0,i);                           
      double AO_Sig_Sig_2 = iCustom(NULL,0,"AO_His_l-b_Signal-Signal_sploshnoy_PSR",0,i+1);
      
                                  
      if((AO_Sig_Sig_1!=AO_Sig_Sig_2)) break;                                                                
     }
         
    i=i*(AO_Sig_Sig_1);         
               
    if(i>0)            
     {
      UpMapBuffer[0]=i;
     }
    else
     {
      UpMapBuffer[0]=0;
     } 
         
    if(i<0)         
     {
      DnMapBuffer[0]=i;
     }
    else
     {
      DnMapBuffer[0]=0;
     }          
                 
      
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
borilunad:

Это остаток от деления! Смотри в арифметических действиях и в своём принте!

Вставь и увидишь только два результата попеременно:

 

 int x = MathRand() % 2;
  Print("x =",x);


Что-то я логику не понял. В книге я прочитал:

 Если  надо  вычислить остаток  от  деления  переменной  a  на  переменную  b  и  результат  записать  в  переменную ostatok, то оператор присваивания выглядит так: 

ostatok = a % b;

 

 Получается, что в нашем случае при делении MathRand() на 2 должно быть значение x равное 0 или 1. С чего бы это вдруг должно выйти 0 или 1 ? Появится, например, случайное число 9. 9 % 2 = 4.5. Остаток  равен 4.
 
 
hoz:


Что-то я логику не понял. В книге я прочитал:

 

 Получается, что в нашем случае при делении MathRand() на 2 должно быть значение x равное 0 или 1. С чего бы это вдруг должно выйти 0 или 1 ? Появится, например, случайное число 9. 9 % 2 = 4.5. Остаток  равен 4.
 

Когда чего-то не сходится, нужно всего пару кликов до ответа...

P.S. ostatok = 9 % 2 = 1. 

 
TarasBY:

Когда чего-то не сходится, нужно всего пару кликов до ответа...

P.S. ostatok = 9 % 2 = 1. 


Ну так написано же:

Деление c остатком (деление по модулюнахождение остатка от деленияостаток от деления) — арифметическая операция, результатом которой является два целых числанеполное частное и остаток от деления целого числа на другое целое число. "

 9 : 2 = 4.5 Это числа типа double

Если обросить дробную часть то будет 4. откуда у Вас 1 появилась? 

 
hoz:


Что-то я логику не понял. В книге я прочитал:

 

 Получается, что в нашем случае при делении MathRand() на 2 должно быть значение x равное 0 или 1. С чего бы это вдруг должно выйти 0 или 1 ? Появится, например, случайное число 9. 9 % 2 = 4.5. Остаток  равен 4.
 

Виктор, не путай int c double! Поэтому int x = MathRand() % 2; даёт 0 или 1! Не может дать 0.1 ни 0.9, как ни 1.1 и ни 1.9, т.к. десятичные в int округляются и меньше 0.5 отбрасываются! И знак % означает остаток от деления, а не знак деления. Знак деления, это / .

Поставил твой пример с 9 и получаю единственный результат, 1, т.к. без рэндома:

  int x = 9 % 2;//MathRand()
  Print("x =",x);

Ты спрашиваешь:

9 : 2 = 4.5 Это числа типа double

Если отбросить дробную часть то будет 4. откуда у Вас 1 появилась?  

      Я отвечаю: Значит 0.5 округляется до 1!

Что интересно, когда к двойке подставил точку и ноль (2.0), компилятор мне дал ошибку, что % требует только целое число!

Потому даже если поставишь double x, всё равно выходит целое число int. Спасибо, Виктор, за твои сомнения! Благодаря им и тебе произвёл интересное исследование, которое мне расширит возможности математических преобразований! С меня стакан (виртуальный)! :))

 
hoz:


Ну так написано же:

Деление c остатком (деление по модулюнахождение остатка от деленияостаток от деления) — арифметическая операция, результатом которой является два целых числанеполное частное и остаток от деления целого числа на другое целое число. "

 9 : 2 = 4.5 Это числа типа double

Если обросить дробную часть то будет 4. откуда у Вас 1 появилась? 

Какое ближайшее меньшее целое число от 9 делится на 2 без остатка? А потом от делимого (9) отнимите это число. Что получилось?

P.S. Если не получилось, можно отпринтовать результа: Print ("ostatok = ", 9 % 2); 

 

laveosa 07.03.2013 21:15

доброго время суток. подскажите как написать символ в место Symbol() в параметрах Ordersend()  "EURUSD"  или как?   

 
Mathemat:

laveosa 07.03.2013 21:15

доброго время суток. подскажите как написать символ в место Symbol() в параметрах Ordersend()  "EURUSD"  или как?   

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