Индикаторы: работа с буферами

Статус
Закрыто для дальнейших ответов.

sergh67

Активный участник
Опять таки, смысл разбирать сейчас переменные, если мы сейчас разбираем, - зачем нужен iCustom ?
Мне это интересно. У меня на этой основе штук тридцать инд.
 
Последнее редактирование:

qqmber

Почетный гражданин
Я на этом языке не разговариваю. Проще! Вы мне все сказали, - зачем я использую iCustom а не iRSI. Я в свою очередь пытаюсь объяснить, что только так он у меня и работает. iRSI не поставляется. Иного варианта я не знаю.
Вы ошибаетесь, iRSI() вшит в терминал и всегда доступен, вне зависимости от манипуляций с файлами.
 

sergh67

Активный участник
я понимаю. Но однако он не работает от iRSI. Только через icustom.
 

sergh67

Активный участник
qqmber Видели сейчас подобие сигнала, но 240 не играл, не перешел ноль?13:28
Три линии выстроились.
 
Последнее редактирование:

sergh67

Активный участник
Ребята посмотрите еще вот этот индикатор, у меня с него почему-то iCUSTOM не получается. Все делаю как с предыдущими инд. но нечего подобного.
PHP:
#property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Yellow    
#property  indicator_color2  C'0,47,0'   
#property  indicator_color3  FireBrick 
#property  indicator_color4  Silver    
#property  indicator_color5  Silver 
#property  indicator_width2 3
#property  indicator_width3 3

extern int    P1 = 20;
extern int    P2 = 21;
extern int    P3 = 6;
extern double P4 = 0.8;

double a[];
double b[];  
double c[]; 
double d[];  
double e[]; 

double Upperband[];
double Lowerband[];
double avg[];
double sDev;
string INDNAME ="Cubb_Macd";
int init()
  {
   IndicatorBuffers(8);  
   SetIndexBuffer(0, a); 
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(1, b); 
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(2, c);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexBuffer(3, d); 
   SetIndexStyle(3, DRAW_LINE);
   SetIndexBuffer(4, e); 
   SetIndexStyle(4, DRAW_LINE);
   SetIndexBuffer(5, Upperband);        
   SetIndexBuffer(6, Lowerband);
   SetIndexBuffer(7, avg);    
    IndicatorShortName(INDNAME);
   return(0);
  }
int start(){
  int limit;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars-counted_bars;
   for(int i = 0; i < limit; i++)
       a[i] = iMA(NULL,0, P1, 0, MODE_EMA, PRICE_CLOSE, i) - 
                iMA(NULL,0, P2, 0, MODE_EMA, PRICE_CLOSE, i);

   for(i = 0; i < limit; i++){
       avg[i] = iMAOnArray(a, 0, P3, 0, MODE_EMA, i);
       sDev = iStdDevOnArray(a, 0, P3, MODE_EMA, 0, i);  
       Upperband[i] = avg[i] + (P4 * sDev);
       Lowerband[i] = avg[i] - (P4 * sDev);
       b[i]=a[i];    
       c[i]=a[i];     
       d[i]=Upperband[i];  
      e[i]=Lowerband[i];       
       if(a[i] > a[i+1])
           c[i] = EMPTY_VALUE;
      
       if(a[i] < a[i+1])
           b[i] = EMPTY_VALUE;
     }
   return(0);
  }
 

DiZin

Местный знаток
Ребята посмотрите еще вот этот индикатор, у меня с него почему-то iCUSTOM не получается. Все делаю как с предыдущими инд. но нечего подобного.
PHP:
#property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Yellow    
#property  indicator_color2  C'0,47,0'   
#property  indicator_color3  FireBrick 
#property  indicator_color4  Silver    
#property  indicator_color5  Silver 
#property  indicator_width2 3
#property  indicator_width3 3

extern int    P1 = 20;
extern int    P2 = 21;
extern int    P3 = 6;
extern double P4 = 0.8;

double a[];
double b[];  
double c[]; 
double d[];  
double e[]; 

double Upperband[];
double Lowerband[];
double avg[];
double sDev;
string INDNAME ="Cubb_Macd";
int init()
  {
   IndicatorBuffers(8);  
   SetIndexBuffer(0, a); 
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(1, b); 
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(2, c);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexBuffer(3, d); 
   SetIndexStyle(3, DRAW_LINE);
   SetIndexBuffer(4, e); 
   SetIndexStyle(4, DRAW_LINE);
   SetIndexBuffer(5, Upperband);        
   SetIndexBuffer(6, Lowerband);
   SetIndexBuffer(7, avg);    
    IndicatorShortName(INDNAME);
   return(0);
  }
int start(){
  int limit;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars-counted_bars;
   for(int i = 0; i < limit; i++)
       a[i] = iMA(NULL,0, P1, 0, MODE_EMA, PRICE_CLOSE, i) - 
                iMA(NULL,0, P2, 0, MODE_EMA, PRICE_CLOSE, i);

   for(i = 0; i < limit; i++){
       avg[i] = iMAOnArray(a, 0, P3, 0, MODE_EMA, i);
       sDev = iStdDevOnArray(a, 0, P3, MODE_EMA, 0, i);  
       Upperband[i] = avg[i] + (P4 * sDev);
       Lowerband[i] = avg[i] - (P4 * sDev);
       b[i]=a[i];    
       c[i]=a[i];     
       d[i]=Upperband[i];  
      e[i]=Lowerband[i];       
       if(a[i] > a[i+1])
           c[i] = EMPTY_VALUE;
      
       if(a[i] < a[i+1])
           b[i] = EMPTY_VALUE;
     }
   return(0);
  }
У него все значения очень маленькие может поэтому не получается?
Я так понял, на альпах на 5тизнаках он никогда не дает значение больше 0.0001.. что не удивительно, ведь Машки очень близко друг к другу по периоду
Если логику не нарушит - попробуй увеличить в 10 000 раз ))
 

sergh67

Активный участник
Перемножил на 100000. Теперь верхняя граница 43.0 нижняя -43.0. Но вывод через icustom все тот же, - растянутые линии и к верху ногами с верхней границей -129524 и нижней -133848.
 
Последнее редактирование:

sergh67

Активный участник
_http://rghost.ru/47159352
пароль 555
 
Последнее редактирование модератором:

sergh67

Активный участник
Ну что? Нет никаких идей по macd? И MTF тоже глючит. Вроде несложный. Я даже его как починил. Все работало и MTF тоже работал. Но я потерял файл который сделал. И не могу вспомнить, что я тогда сделал. Остался только вот этот кривой.
 

DiZin

Местный знаток
Ну что? Нет никаких идей по macd? И MTF тоже глючит. Вроде несложный. Я даже его как починил. Все работало и MTF тоже работал. Но я потерял файл который сделал. И не могу вспомнить, что я тогда сделал. Остался только вот этот кривой.

Только добрался до форума.. да и поздно уже.. не сегодня

А вообще абстрактно помогать очень тяжело.
Скажите что хотите.. может проще будет помогать
 

DiZin

Местный знаток
Ребята посмотрите еще вот этот индикатор, у меня с него почему-то iCUSTOM не получается. Все делаю как с предыдущими инд. но нечего подобного.
PHP:
#property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Yellow    
#property  indicator_color2  C'0,47,0'   
#property  indicator_color3  FireBrick 
#property  indicator_color4  Silver    
#property  indicator_color5  Silver 
#property  indicator_width2 3
#property  indicator_width3 3

extern int    P1 = 20;
extern int    P2 = 21;
extern int    P3 = 6;
extern double P4 = 0.8;

double a[];
double b[];  
double c[]; 
double d[];  
double e[]; 

double Upperband[];
double Lowerband[];
double avg[];
double sDev;
string INDNAME ="Cubb_Macd";
int init()
  {
   IndicatorBuffers(8);  
   SetIndexBuffer(0, a); 
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(1, b); 
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(2, c);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexBuffer(3, d); 
   SetIndexStyle(3, DRAW_LINE);
   SetIndexBuffer(4, e); 
   SetIndexStyle(4, DRAW_LINE);
   SetIndexBuffer(5, Upperband);        
   SetIndexBuffer(6, Lowerband);
   SetIndexBuffer(7, avg);    
    IndicatorShortName(INDNAME);
   return(0);
  }
int start(){
  int limit;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars-counted_bars;
   for(int i = 0; i < limit; i++)
       a[i] = iMA(NULL,0, P1, 0, MODE_EMA, PRICE_CLOSE, i) - 
                iMA(NULL,0, P2, 0, MODE_EMA, PRICE_CLOSE, i);

   for(i = 0; i < limit; i++){
       avg[i] = iMAOnArray(a, 0, P3, 0, MODE_EMA, i);
       sDev = iStdDevOnArray(a, 0, P3, MODE_EMA, 0, i);  
       Upperband[i] = avg[i] + (P4 * sDev);
       Lowerband[i] = avg[i] - (P4 * sDev);
       b[i]=a[i];    
       c[i]=a[i];     
       d[i]=Upperband[i];  
      e[i]=Lowerband[i];       
       if(a[i] > a[i+1])
           c[i] = EMPTY_VALUE;
      
       if(a[i] < a[i+1])
           b[i] = EMPTY_VALUE;
     }
   return(0);
  }
Лучше приведите свой код.. чтоб было что смотреть что у Вас не получается
 

sergh67

Активный участник
Лучше приведите свой код.. чтоб было что смотреть что у Вас не получается

PHP:
#property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Yellow    
#property  indicator_color2  C'0,47,0'   
#property  indicator_color3  FireBrick 
#property  indicator_color4  Silver    
#property  indicator_color5  Silver 
#property  indicator_width2 3
#property  indicator_width3 3

double a[];
double b[];  
double c[]; 
double d[];  
double e[]; 


string INDNAME ="CM";
int init()
  { 
   SetIndexBuffer(0, a); 
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(1, b); 
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(2, c);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexBuffer(3, d); 
   SetIndexStyle(3, DRAW_LINE);
   SetIndexBuffer(4, e); 
   SetIndexStyle(4, DRAW_LINE);
    IndicatorShortName(INDNAME);
   return(0);
  }
int start(){
  int limit;
   int counted_bars = IndicatorCounted();
   limit = Bars;
   for(int i = 0; i < limit; i++){
   a[i] = iCustom(NULL,0,"Cubb_Macd", 0, 0, 0, i);
   b[i] = iCustom(NULL,0,"Cubb_Macd", 0, 0, 1, i);
   c[i] = iCustom(NULL,0,"Cubb_Macd", 0, 0, 2, i);
   d[i] = iCustom(NULL,0,"Cubb_Macd", 0, 0, 3, i);
   e[i] = iCustom(NULL,0,"Cubb_Macd", 0, 0, 4, i);
     }
   return(0);
  }
 

sergh67

Активный участник
Не знаю? Я вымотался и терминал тоже. Он у меня уже раз сто завис. То ли я не правильно вписываю,то ли не то вписываю. И через запятую и через точку и в кавычках, и периоды и переменные. Только один сплошной висяк.
 

AlexeyVik

Программист mql4 mql5
Не знаю? Я вымотался и терминал тоже. Он у меня уже раз сто завис. То ли я не правильно вписываю,то ли не то вписываю. И через запятую и через точку и в кавычках, и периоды и переменные. Только один сплошной висяк.
Я же давал тебе ссылку на документацию чтобы ты не пробовал через ... в ...
Там ведь полностью написано что как надо писать.
 

sergh67

Активный участник
PHP:
Параметры:
symbol	  -  	Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe	  -  	Период. Может быть одним из периодов графика. 0 означает период текущего графика.
name	  -  	Имя пользовательского индикатора.
...	  -  	Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.
mode	  -  	Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift	  -  	Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Пример:
  double val=iCustom(NULL, 0, "SampleInd",13,1,0);
Ну вот документация. Все тоже самое что вы мне сказали. Больше в документации нечего нет. Никаких подробностей. Я перепробовал все. Но видимо где то делаю ошибку. А описание очень скудное чтобы понять.
 
Последнее редактирование модератором:

sergh67

Активный участник
a = iCustom(NULL,0,"Cubb_Macd", 0, 0, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", P1, P2, P3, P4, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", "P1", "P2"," P3"," P4", 0, i);
a = iCustom(NULL,0,"Cubb_Macd", 20, 21,6, 0.8, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", avg, Upperband,Lowerband, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", "avg", "Upperband","Lowerband", 0, i);
Вот основные варианты и еще как то пытался извратиться, но нечего кроме сплошного висяка.
 

DiZin

Местный знаток
a = iCustom(NULL,0,"Cubb_Macd", 0, 0, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", P1, P2, P3, P4, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", "P1", "P2"," P3"," P4", 0, i);
a = iCustom(NULL,0,"Cubb_Macd", 20, 21,6, 0.8, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", avg, Upperband,Lowerband, 0, i);
a = iCustom(NULL,0,"Cubb_Macd", "avg", "Upperband","Lowerband", 0, i);
Вот основные варианты и еще как то пытался извратиться, но нечего кроме сплошного висяка.


extern int TimeFrame = 0;
extern int P1 = 20;
extern int P2 = 21;
extern int P3 = 6;
extern double P4 = 0.8;
вот список параметров

вот вариант кода
a = iCustom(NULL,0,"Cubb_Macd", TimeFrame, P1, P2, P3, P4, 0, i); (фактически дважды используешь таймфрейм)

и да.. проверь цикл, может у тебя зацикливание где, поэтому висяк, от того что ты кастом неправильно используешь висеть не должно.
 
Статус
Закрыто для дальнейших ответов.
Верх