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

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

AlexeyVik

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

sergh67

Активный участник
В этом варианте зависания нет. Я прописал ваш iCustom.
Добавил по требованию:
PHP:
extern int TimeFrame = 0;
extern int P1 = 20;
extern int P2 = 21;
extern int P3 = 6;
extern double P4 = 0.8;
В этом варианте у меня линии окончательно стали прямыми.
Основная идет отдельно по верхней кромке.
Остальные линии лежат по низу.

Насчет документации:
Мне надо увидеть хотя бы образец. Я не понимаю что от меня требуется? Если бы мог обойтись учебником, то не спрашивал бы.
 
Последнее редактирование:

sergh67

Активный участник
Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Что вот это написано я не знаю. Я даже до сих пор не освоился с торговыми терминами. Я понятия не имею что такое лот. А вы хотите чтобы я эту строку на верху к примеру понял? Я не могу такое понимать. У меня нет даже воображаемого представления представления о том, что это такое.
 
Последнее редактирование:

sergh67

Активный участник
Я шаблонный мастер. Есть шаблон я по нему могу работать. Если бы я смог написать индикатор хотя бы с одной строчкой кода, я все равно бы не смог даже объяснить как он работает и по какому алгоритму.
Для меня слово бар это ругательство. В лучшем случае просто японская свечка на графике и только.
 
Последнее редактирование:

sergh67

Активный участник
Люди помогите мне с этим MACD. Мучаюсь с ним пол года безрезультатно. Устал. А он мне зараза очень нравиться.
Я периоды переносил не работает, Другие переносил переменные, - не работает. Может неправильно переношу. Не знаю.
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Я шаблонный мастер.


Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.

Индекс линии или другой формы отображения индикатора это номер буфера. Если индикатор имеет только одну линию или пусть будет стрелка или гистограмма, то индекс буфера только 0 (НУЛЬ). Если их больше, то индекс можно определить по цвету на закладке "Цвета" в окне свойств индикатора.

Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Текущий бар имеет индекс 0 (НУЛЬ). Слева от него первый, 2 и т.д. Счёт баров (свечей) идёт с права налево

 
Последнее редактирование модератором:

sergh67

Активный участник
Вот не обижайся, ради бога...
А с девками ты тоже по шаблону спишь?
А теперь серьезно: - Разве не вы говорили, что не любите писать код? И что предпочитаете шаблонно копировать?
На свете уже 10000 индикаторов, зачем чего-то придумывать? Я не стремлюсь познать язык. Мне это нужно просто в пределах манипулирования кодом. Если вдруг жизненные обстоятельства меня вынудят обратиться к изучению этого языка, это уже будет другая тема. В данных обстоятельствах мне нужны незначительные тонкости, которыми вы владеете. - Это типа как детям показать, где ключиком повернуть, чтобы игрушка завелась. Я не хочу вести подсчеты баров и тому подобное. Зачем мне изучать глубоко язык, если все мои потребности в нем, - это что-то подправить. Зачем тратить кучу времени на то, что мне в жизни скорее всего не пригодится?
 
Последнее редактирование модератором:

DiZin

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

Вот из-за этого висит терминал. Постоянно обсчитывать все бары - это круто.
 

DiZin

Местный знаток
В этом варианте зависания нет. Я прописал ваш iCustom.
Добавил по требованию:
PHP:
extern int TimeFrame = 0;
extern int P1 = 20;
extern int P2 = 21;
extern int P3 = 6;
extern double P4 = 0.8;
В этом варианте у меня линии окончательно стали прямыми.
Основная идет отдельно по верхней кромке.
Остальные линии лежат по низу.

Насчет документации:
Мне надо увидеть хотя бы образец. Я не понимаю что от меня требуется? Если бы мог обойтись учебником, то не спрашивал бы.
Видимо есть проблемы со значениями. Как я уже говорил, их значения очень маленькие,поэтому они и кажутся прямыми....
И проблема в верхней линии.. видимо с ней что-то не так и она сбивает весь масштаб.
Если не против - вновь код в студию
 

sergh67

Активный участник
Так я оба варианта выкладывал. Какой надо выложить?
limit = Bars - counted_bars; я сам удалил, как и во многих случаях у меня у меня из-за него либо линии ложились в ноль, либо MTF не работал. Надеялся что это решит вопрос. Но уверяю виснет у меня не из-за этого.
 
Последнее редактирование:

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[]; 
extern int TimeFrame = 0;
extern int P1 = 20;
extern int P2 = 21;
extern int P3 = 6;
extern double P4 = 0.8;

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", P1, P2, P3, P4, 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);
  }
Я эти P1, P2, P3, P4, и в кавычки брал и всем буферам раздавал и точки между ними ставил и так и сяк экспериментировал.
 

sergh67

Активный участник
По ходу это не тот вариант, у меня с ним опять терминал завис. У меня с ним опять терминал завис. А у меня сейчас 3$ открыто в бай. Ситуация напряженная. Я весь на взводе. - Туда не туда? Стопы не ставлю.
 
Последнее редактирование:

DiZin

Местный знаток
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[]; 
extern int TimeFrame = 0;
extern int P1 = 20;
extern int P2 = 21;
extern int P3 = 6;
extern double P4 = 0.8;

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", P1, P2, P3, P4, 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);
  }
Я эти P1, P2, P3, P4, и в кавычки брал и всем буферам раздавал и точки между ними ставил и так и сяк экспериментировал.
Среди этих вариантов нет
вот вариант кода
a = iCustom(NULL,0,"Cubb_Macd", TimeFrame, P1, P2, P3, P4, 0, i); (фактически дважды используешь таймфрейм)
 

sergh67

Активный участник
А это как раз тот вариант про который вы спрашивали. Линии стали прямыми.
 
Последнее редактирование:

sergh67

Активный участник
Только вы обратите внимание. Терминал запрашивает у меня кто они такие P1, P2, P3, P4,
и я добавил:
extern int TimeFrame = 0;
extern int P1 = 20;
extern int P2 = 21;
extern int P3 = 6;
extern double P4 = 0.8;
 

AlexeyVik

Программист mql4 mql5
А теперь серьезно:
Ну если это серьёзно, то давать какие-либо советы бессмысленно.
По поводу копирования я если и говорил, то совсем не так. Писать заново код который уже есть написанный или этот кусок кода скопировать в другой индикатор -это одно. Но копировать не понимая происходящего и потом спрашивать почему не работает... Это уже слишком.

Впредь я буду посматривать в эту ветку только когда мне захочется посмеяться.
 

sergh67

Активный участник
AlexeyVik: А для чего вы здесь вообще? Я могу тоже под вас закос сделать и делать вид умного. У вас был +. Вы в этот язык пришли уже зная С++. А я нет. Для вас не загадка.что написано в учебнике. А для меня загадка, потому что он нечего не растолковывает.
 

sergh67

Активный участник
Ну если это серьёзно, то давать какие-либо советы бессмысленно.
Впредь я буду посматривать в эту ветку только когда мне захочется посмеяться.
Не обижайтесь. Лично я вообще не понимаю что вы здесь делаете? Наверно действительно сюда приходите посмеяться. Девки, шаблоны наверно ваша тема - но все это не то! Вы веткой ошиблись. Это ветка создана оказывать помощь в программировании. Что вы здесь делаете?
На мой взгляд это не самая веселая ветка.

Кстати приколитесь: Вы по делу еще нечего не сказали хотя мы с вами уже раз пятый встречаемся. Правда ржачная тема?

И могу поспорить, что лучший индикатор есть у меня!
 
Последнее редактирование:

sergh67

Активный участник
Вообщем я кое как решил этот вопрос. Заменил iMA на iMACD. Теперь все выводится
и вроде как никакой разницы.
 
Статус
Закрыто для дальнейших ответов.
Верх