Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1683

 
Да, конечно. Первый: 0, последний: OrdersTotal()-1
 
Aleksei Stepanenko #:
Да, конечно. Первый: 0, последний: OrdersTotal()-1

а, там же массив, действительно с нуля...

 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
                                                              
extern int RSIPERIOD=3;
extern double KOEFF1=2.5;
extern double KOEFF2=1.86; 
                                                                                                                                                                  
double mass0[],Buf1[],Buf2[];
double D10,D11,D12;
                                                                                                                                                                                                                                                                                                                                             
int init()
  {
   IndicatorDigits(0);
   string short_name="RSITEST";           
   IndicatorShortName("RSITEST");
   
   D10=RSIPERIOD;D11=D10*KOEFF1;D12=D11*KOEFF2;;
 
   SetIndexBuffer(0,mass0);
   SetIndexLabel (0,"Stoch "+Ds_0(D10)+")\n");
   SetIndexBuffer(1,Buf1);
   SetIndexLabel (1,"Stoch ("+Ds_0(D11)+")\n");
   SetIndexBuffer(2,Buf2);
   SetIndexLabel (2,"Stoch ("+Ds_0(D12)+")\n");
   return(0);
  }
                                                                                                               
int start()
  {
   if(Bars<=RSIPERIOD) return(0);
   int ExtCountedBars=IndicatorCounted();
   if (ExtCountedBars<0) return(-1);
   if (ExtCountedBars>0) ExtCountedBars--;
   for(int i=0;i<Bars-RSIPERIOD;i++)
      {
       mass0[i] = iRSI(NULL,0,D10,0,i);
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))
       Buf1[i] = Buf2[i];
       Buf1[i] = DRAW_LINE;
       Buf2[i] = EMPTY_VALUE;
      }
   return(0);
  }

string Ds_0(double DOUBLE) {return(DoubleToStr(DOUBLE,0));}
MakarFX #:
в твоем случае это получилось только 2 из 3 линий я адаптировал это под поставленную задачу, и получается что первая линия остаеться (как и надо) а уровнение двух других (красной и синей) с задаными условиями ( что бы ВМЕСТО красной и синей линией была одна линия - и она была красной если RSI2>RSI3 и синей если  RSI2< RSI3 ) становиться прямой и только красной будто она не понимает что она RSI
Скрин шот прикладываю 
Файлы:
 
Andrey Kipyatkov #:
в твоем случае это получилось только 2 из 3 линий я адаптировал это под поставленную задачу, и получается что первая линия остаеться (как и надо) а уровнение двух других (красной и синей) с задаными условиями ( что бы ВМЕСТО красной и синей линией была одна линия - и она была красной если RSI2>RSI3 и синей если  RSI2< RSI3 ) становиться прямой и только красной будто она не понимает что она RSI
Скрин шот прикладываю 

Как ты уравниваешь Buf1 и Buf2?

В твоем условии они равны 0!

 
Andrey Kipyatkov #:
в твоем случае это получилось только 2 из 3 линий я адаптировал это под поставленную задачу, и получается что первая линия остаеться (как и надо) а уровнение двух других (красной и синей) с задаными условиями ( что бы ВМЕСТО красной и синей линией была одна линия - и она была красной если RSI2>RSI3 и синей если  RSI2< RSI3 ) становиться прямой и только красной будто она не понимает что она RSI
Скрин шот прикладываю 

  


Файлы:
RSITEST-1.mq4  4 kb
 
Всем привет! Расскажите пожалуйста в чем отличия торгового робота, от торгового советника?
 
Daniil Osipov #:
Всем привет! Расскажите пожалуйста в чем отличия торгового робота, от торгового советника?
Это одно и тоже...игра слов
 
MakarFX #:

  

Спасибо что помог с кодом но если не сложно я бы хотел понять суть. Когда ты все пишешь в одну линию ты:
Buf0[i] = iRSI(NULL,0,D10,0,i); - задаешь этой строчной что нулевой масив это линия рсай с параметром заданным выше
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) дальше ты тут говоришь что рсай с параметром  D11 >D12
       Buf1[i] = Buf0[i]; и тут ты приравниваешь (накладываешь одну линию на другую) рсай с параметром  D11 и  D10
       else
       Buf1[i] = EMPTY_VALUE; и говоришь чтобы рса с параметром  D11 не отрисовывался.
но когда ты работаешь с 3 линиями 
       Buf0[i] = iRSI(NULL,0,D10,0,i); ты говоришь как отрисовать 1 линию
       Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2; дальше ты Складываешь и делишь на 2   2 и 3 - Вот это действие мне не очень понятно так как раньше ты приравнивал масивы и накладывал одну линию на другую почему тут имено такой синтаксис.
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) дальше ты повторяешь как и в примере ваше -  говоришь что рсай с параметром  D11 >D12
       Buf2[i] = Buf1[i]; и приравниваешь уже 3 и 2 линию
       else
       Buf2[i] = EMPTY_VALUE; и говоришь не рисовать вторую

 я правильно понимаю как ты языку задаешь "параметры" что надо сделать и почему в втором случае ты складывал массивы и делил на 2 

 
MakarFX #:
Это одно и тоже...игра слов
Vitaly Muzichenko #:

Игрой слов.

Из соседней ветки. Не сговариваясь...

 
Andrey Kipyatkov #:
Спасибо что помог с кодом но если не сложно я бы хотел понять суть. Когда ты все пишешь в одну линию ты:

Андрей, давай для начала определимся с твоим условием из первого поста

хотел уточнить есть ли возможность как то прописать в коде что бы ВМЕСТО красной и синей линией (RSI2 и RSI3 на картинке (приклыдываю так же) соответственно) была одна линия - и она была красной если RSI2>RSI3 и синей если  RSI2< RSI3

так вот, чтобы вместо красной и синей была одна - мы получаем среднее значение этих линий, т.е.

Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2;

и у этой линии, по умолчанию, красный цвет.

Далее, когда выполняется условие

if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))

то мы не меняем цвет линии, т.к. в МТ4 это нельзя сделать,

а берем и накладываем сверху другую линию с другим цветом

Buf2[i] = Buf1[i];
Причина обращения: