Ответить
17.09.2012, 14:37
Аватар для скиталец
скиталец скиталец вне форума Активный участник
Регистрация: 28.10.2010 / Сообщений: 143
Поблагодарили 60 раз(а) / Репутация: 60

По умолчанию Уроки программирования от скитальца

Ну что давайте попробуем) Учтите, что уроки расчитаны на тех, кто прочитал официальный учебник по мкл4 и владеет азами..Допустим у нас есть индюк, который рисует уровни поддержки и сопротивления по вершинкам.... Но он рисует только два уровня, как заставить его показать более ранние уровни? Во первых мы должны найти место, которым он нарисовал те два уровня, например...ObjectCreate("fr_dn",OBJ_TREND, 0,0,0,0,0);
ObjectSet("fr_dn",OBJPROP_TIME1,iTime(Symbol(),Per iod(),i+center));
ObjectSet("fr_dn",OBJPROP_TIME2,iTime(Symbol(),Per iod(),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(),Perio d(),q));
ObjectSet(value,OBJPROP_TIME2,iTime(Symbol(),Perio d(),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, это как бы один шаг по массиву от начала, и каждой линии достанется своя цена из этого массива. Один шаг равен одному бару , но это не значит, что линии будут строиться на каждом баре, веть в массиве могут быть и нулевые значения. В общем таким способом я вытащил из индикатора более ранние уровни, создав цикл с использованием массива фракталов... Вот весь первый урок. Исходный и конечный индикаторы.
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 10:37. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO