рисование волн через индикатор

 

Здравствуйте,

создал советник, который автоматически рисует волны в чарте.
[-> ObjectCreate(obj_name, OBJ_TREND, 0, zeit1, preis1, zeit2, preis2);]

как теперь тоже самое сделать с помощью индикатора - не приложу ума.
Такое вообще возможно? Может кто подскажет? И как? хотя бы в общих чертах.

спасибо заранее!
Сергей

 
ckateptb:

Здравствуйте,

создал советник, который автоматически рисует волны в чарте.
[-> ObjectCreate(obj_name, OBJ_TREND, 0, zeit1, preis1, zeit2, preis2);]

как теперь тоже самое сделать с помощью индикатора - не приложу ума.
Такое вообще возможно? Может кто подскажет? И как? хотя бы в общих чертах.

спасибо заранее!
Сергей

Конечно возможно. Разница между индикатором и советником в том, что в индикаторе нельзя использовать торговые функции, а в советнике - функции для рисования. Объекты можно создавать/настраивать/удалять и в советнике и в индикаторе, для этого используются одни и те же функции.
 
rensbit:
Конечно возможно. Разница между индикатором и советником в том, что в индикаторе нельзя использовать торговые функции, а в советнике - функции для рисования. Объекты можно создавать/настраивать/удалять и в советнике и в индикаторе, для этого используются одни и те же функции.


спасибо большое за ответ!

я так понял, что актуальное значение индикатора передаётся окну чарта через Buffer и это могут быть только сплошная линия, гистограмма или символ.
https://docs.mql4.com/ru/customind/SetLevelStyle
https://docs.mql4.com/ru/constants/drawstyles


+++++++++++++++++++++++
double IndPuffer1[];
....
SetIndexBuffer(0,IndPuffer1);
....

// пример со средними
IndPuffer1[i]=iMA(NULL,0,sma_periode,0,MODE_SMMA,PRICE_MEDIAN,i);
....
+++++++++++++++++++++++

а как я могу передать через буффер в окно чарта Объект с параметрами [ObjectCreate(obj_name, OBJ_TREND, 0, time1, price1, time2, price2);]
? или же я не до конца понял как работает индикатор?

мог бы мне кто-нибудь объяснить?


заранее благодарю.


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

 

Может попробовать в буфер индикатора занести значения контрольных точек, по которым Вы создаете линию тренда (preis1 и т.д.), а тип отрисовки задать в виде ломаной линии (SetIndexStyle(0,DRAW_SECTION))

 
ckateptb:


я так понял, что актуальное значение индикатора передаётся окну чарта через Buffer и это могут быть только сплошная линия, гистограмма или символ.
https://docs.mql4.com/ru/customind/SetLevelStyle
https://docs.mql4.com/ru/constants/drawstyles


а как я могу передать через буффер в окно чарта Объект с параметрами [ObjectCreate(obj_name, OBJ_TREND, 0, time1, price1, time2, price2);]
? или же я не до конца понял как работает индикатор?

мог бы мне кто-нибудь объяснить?

Вы же хотели "тоже самое сделать с помощью индикатора". А делали в советнике постановкой объектов. Вам подсказали делать точно так же, ставить те же объекты теми же функциями ObjectCreate в индикаторе. Только это происходит внутри цикла, который есть во всех индикаторах. чтобы "пробежаться" по истории.
А индикаторные буферы в этом случае вообще не задействуются, считайте, что их нет :))
 

спасибо большое за подсказки!

@mInvIn: ваше предложение наверное тоже работает, но у меня пока нет идей по этому теме. попробую пока сделать то, что я себе лучше представить могу.

@granit77

"цикл" и "пробежаться по истории" - это мне конечно же о чём то говорит. попробую сегодня вечером

позже отчитаюсь.

С уважением,
Сергей

 

опять не разберусь ;-(

как я из фор-цикла могу передать окну чарта объект?

например:

--------------------------------------------------------------

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++)
{
string s_obj_name1 = "Tag_"+TimeCurrent();
ObjectCreate(s_obj_name1, OBJ_TEXT, 0, TimeCurrent(),Close[0]+20*Point);
ObjectSetText(s_obj_name1, DoubleToStr(DayOfWeek(),0), 16, "Times New Roman", Yellow);
}
return(0);

-----------------------------------------------------------


всё работает, но только от последнего тика. "пробежаться по истории" не получается !!

по истории пробeгается только через буфер ;-(

может кто подскажет?


спасибо заранее!

 
rensbit:
Конечно возможно. Разница между индикатором и советником в том, что в индикаторе нельзя использовать торговые функции, а в советнике - функции для рисования. Объекты можно создавать/настраивать/удалять и в советнике и в индикаторе, для этого используются одни и те же функции.
Скажем линии рисовать невозможно, но используя трендовые линии (графическеи обьекты) все это можно рисовать только получается нужно свою функцию писать для отображения
 

------------------------------------------------------------------------------------------

string s_obj_name1 = "Tag_"+iTime(NULL,0,i);
ObjectCreate(s_obj_name1, OBJ_TEXT, 0, iTime(NULL,0,i),Close[i]+20*Point);
ObjectSetText(s_obj_name1, DoubleToStr(DayOfWeek(),0), 16, "Times New Roman", Yellow);

------------------------------------------------------------------------------------------

а вот так выглядит уже лучше !!

 

всё, заработало!
"принцип действия" я уже в принципе изложил выше. (конечно же не без ваших подсказок! спасибо!)


примечание, для начинающих разработчиков которые будут конструировать подобные индикаторы:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
любой индикатор, который должен быть загружен в окно терминала и "пробегает по истории", работает с барами и поэтому
не может быть таким точным как работа с тестером на тиковом уровне. чем мельче таймфрэйм, тем точнее такой индикатор.
Идеальный вариант был бы по этому 1бар = 1тик, но в метатрэдере такого не бывает.

Причина обращения: