скиталец
Активный участник
Ну что давайте попробуем) Учтите, что уроки расчитаны на тех, кто прочитал официальный учебник по мкл4 и владеет азами..Допустим у нас есть индюк, который рисует уровни поддержки и сопротивления по вершинкам.... Но он рисует только два уровня, как заставить его показать более ранние уровни? Во первых мы должны найти место, которым он нарисовал те два уровня, например...ObjectCreate("fr_dn",OBJ_TREND,0,0,0,0,0);
ObjectSet("fr_dn",OBJPROP_TIME1,iTime(Symbol(),Period(),i+center));
ObjectSet("fr_dn",OBJPROP_TIME2,iTime(Symbol(),Period(),0));
ObjectSet("fr_dn",OBJPROP_PRICE1,cur);
ObjectSet("fr_dn",OBJPROP_PRICE2,cur);
ObjectSet("fr_dn",OBJPROP_RAY,false);
ObjectSet("fr_dn",OBJPROP_WIDTH,width);
ObjectSet("fr_dn",OBJPROP_COLOR,fr_dn_color);
ObjectSet("fr_dn",OBJPROP_STYLE,style);
Как видим присутствует функция графического создания обьекта и сеты, которые добавляют к ней разные свойства. OBJ_TREND нам говорит, что мы имеем дело с трендовой линией. Тока таким способом можно сделать отрезок, если выбрать линию, то это будет линия)) на весь экран...Для создания трендовой линии нам нужно две точки с координатами цен и времени..Это сеты 1-4....Временем сдесь служит время открытия бара , сдвинутого на i+centerот нулевого, второе время, это открытие нулевого бара. Цены тоже переменные... Так ак уровни рисовались от фракталов, то нужно было найти массив с ценами этих фракталов. Смотрим на индикаторные буферы..
SetIndexStyle(0,DRAW_ARROW,EMPTY,Size);
SetIndexArrow(0,Code_Arrow_UP);
SetIndexBuffer(0,Ext1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW,EMPTY,Size);
SetIndexArrow(1,Code_Arrow_DN);
SetIndexBuffer(1,Ext2);
Стиль ввиде стрелок, значит это и есть фракталы, массивы их цен экст 1 и экст 2. Мы делаем цикл из блока создания линий
for(int q=0;q<bars;q++)
{
value=DoubleToStr(q+0.5, 1);
ObjectCreate(value,OBJ_TREND,0,0,0,0,0);
ObjectSet(value,OBJPROP_TIME1,iTime(Symbol(),Period(),q));
ObjectSet(value,OBJPROP_TIME2,iTime(Symbol(),Period(),0));
ObjectSet(value,OBJPROP_PRICE1,Ext2[q]);
ObjectSet(value,OBJPROP_PRICE2,Ext2[q]);
ObjectSet(value,OBJPROP_RAY,false);
ObjectSet(value,OBJPROP_WIDTH,width);
ObjectSet(value,OBJPROP_COLOR,fr_dn_color);
ObjectSet(value,OBJPROP_STYLE,style);
Чтобы на графике отобразилось много линий, надо каждой задать свое имя, это и делается с помощью цикла фои функции DoubleToStr. Теперь все линии будут иметь числовое название. Если вы заметили, вместо непонятной ценовой переменной cur мы подставили ценовой массив Ext2. Так как линии горизонтальные, то его прописываем в обе точки. Цикл будет увеличивать переменную Q, это как бы один шаг по массиву от начала, и каждой линии достанется своя цена из этого массива. Один шаг равен одному бару , но это не значит, что линии будут строиться на каждом баре, веть в массиве могут быть и нулевые значения. В общем таким способом я вытащил из индикатора более ранние уровни, создав цикл с использованием массива фракталов... Вот весь первый урок. Исходный и конечный индикаторы.
ObjectSet("fr_dn",OBJPROP_TIME1,iTime(Symbol(),Period(),i+center));
ObjectSet("fr_dn",OBJPROP_TIME2,iTime(Symbol(),Period(),0));
ObjectSet("fr_dn",OBJPROP_PRICE1,cur);
ObjectSet("fr_dn",OBJPROP_PRICE2,cur);
ObjectSet("fr_dn",OBJPROP_RAY,false);
ObjectSet("fr_dn",OBJPROP_WIDTH,width);
ObjectSet("fr_dn",OBJPROP_COLOR,fr_dn_color);
ObjectSet("fr_dn",OBJPROP_STYLE,style);
Как видим присутствует функция графического создания обьекта и сеты, которые добавляют к ней разные свойства. OBJ_TREND нам говорит, что мы имеем дело с трендовой линией. Тока таким способом можно сделать отрезок, если выбрать линию, то это будет линия)) на весь экран...Для создания трендовой линии нам нужно две точки с координатами цен и времени..Это сеты 1-4....Временем сдесь служит время открытия бара , сдвинутого на i+centerот нулевого, второе время, это открытие нулевого бара. Цены тоже переменные... Так ак уровни рисовались от фракталов, то нужно было найти массив с ценами этих фракталов. Смотрим на индикаторные буферы..
SetIndexStyle(0,DRAW_ARROW,EMPTY,Size);
SetIndexArrow(0,Code_Arrow_UP);
SetIndexBuffer(0,Ext1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW,EMPTY,Size);
SetIndexArrow(1,Code_Arrow_DN);
SetIndexBuffer(1,Ext2);
Стиль ввиде стрелок, значит это и есть фракталы, массивы их цен экст 1 и экст 2. Мы делаем цикл из блока создания линий
for(int q=0;q<bars;q++)
{
value=DoubleToStr(q+0.5, 1);
ObjectCreate(value,OBJ_TREND,0,0,0,0,0);
ObjectSet(value,OBJPROP_TIME1,iTime(Symbol(),Period(),q));
ObjectSet(value,OBJPROP_TIME2,iTime(Symbol(),Period(),0));
ObjectSet(value,OBJPROP_PRICE1,Ext2[q]);
ObjectSet(value,OBJPROP_PRICE2,Ext2[q]);
ObjectSet(value,OBJPROP_RAY,false);
ObjectSet(value,OBJPROP_WIDTH,width);
ObjectSet(value,OBJPROP_COLOR,fr_dn_color);
ObjectSet(value,OBJPROP_STYLE,style);
Чтобы на графике отобразилось много линий, надо каждой задать свое имя, это и делается с помощью цикла фои функции DoubleToStr. Теперь все линии будут иметь числовое название. Если вы заметили, вместо непонятной ценовой переменной cur мы подставили ценовой массив Ext2. Так как линии горизонтальные, то его прописываем в обе точки. Цикл будет увеличивать переменную Q, это как бы один шаг по массиву от начала, и каждой линии достанется своя цена из этого массива. Один шаг равен одному бару , но это не значит, что линии будут строиться на каждом баре, веть в массиве могут быть и нулевые значения. В общем таким способом я вытащил из индикатора более ранние уровни, создав цикл с использованием массива фракталов... Вот весь первый урок. Исходный и конечный индикаторы.