Как научиться создавать графические объекты? MQL4. - страница 3

 
Integer:

Если индикатор создает графические объекты и потом получает их параметры, то нет.

Но все равно через использование индикатора легче все решить. В индикаторе выполняются вычисления и их результаты отображаются через индикаторные буферы. 

Еще есть запасной вариант. Вместо линий создавать глобальные переменные с параметрами линии, но тогда функция GetValueByShift() не будет работать, нужно писать ее аналог.

Понятно. Только вот, как в индикаторе без графических построений линию тренда сделать?

Известны два индекса бара их нужно соединить линией и провести вправо. 

 
forexman77:

Понятно. Только вот, как в индикаторе без графических построений линию тренда сделать?

Известны два индекса бара их нужно соединить линией и провести вправо. 

Был у меня в кодебазе такой индикатор. Теперь нету, пропал.

Через вычисления все делать. Зная координаты двух точек можно просто посчитать координаты третей. 

 
Integer:

Был у меня в кодебазе такой индикатор. Теперь нету, пропал.

Через вычисления все делать. Зная координаты двух точек можно просто посчитать координаты третей. 

Где найти формулу для этого вычисления?

А вообще, как-то по нубскому получается. В терминале море всяких каналов, фибо и прочих геометрических индюков, но в тестере они бесполезны. 

 
forexman77:

Где найти формулу для этого вычисления?

А вообще, как-то по нубскому получается. В терминале море всяких каналов, фибо и прочих геометрических индюков, но в тестере они бесполезны. 

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - номера баров. y1, y2 - значения цен. x3 - номер бара для которого выполняется расчет.

 
Integer:

x1, x2 - номера баров. y1, y2 - значения цен. x3 - номер бара для которого выполняется расчет.

Ок. Спасибо. Буду дальше копать.
 
Integer:

x1, x2 - номера баров. y1, y2 - значения цен. x3 - номер бара для которого выполняется расчет.

Сделал индикатор на основе расчетов, показания один в один с индикатором на графических объектах.

Оптимизация идет. Только вот проблема сделки открываются не корректно. 

Когда набрасываю индикатор на график линия сначала ровная, а затем при новом тике становится, как надо и остается такой. 

 
forexman77:

Сделал индикатор на основе расчетов, показания один в один с индикатором на графических объектах.

Оптимизация идет. Только вот проблема сделки открываются не корректно. 

Когда набрасываю индикатор на график линия сначала ровная, а затем при новом тике становится, как надо и остается такой. 

Пробуйте тестировать в визуальном режиме. Используя print, comment ищите в чем разница. 
 
Integer:
Пробуйте тестировать в визуальном режиме. Используя print, comment ищите в чем разница. 

Визуальный режим не поможет. У меня получилось сделать, чтобы индикатор показывал, только текущий патерн.

Сам индикатор принтую значение первого индекса(MQL4), первый принт выходит с неверным значением, а остальные на новых тиках верные.

Если не сложно посмотрите код, Вам в личку выслал. 

 

Вообщем перенес все расчеты по линии тренда в советник.  Распринтовал вроде правильно.

Индикатор, чтобы показывал на всем промежутке линии не могу сделать. Опыта маловато.

Собственно индикатор нужен, чтобы визуально видеть, что сделки открываются корректно.

Решил все-таки при визуализации использовать графические объекты.

Проблема в ошибке 4200( Объект уже существует)

Пробовал присваивать каждый раз новое имя объекту.  Та же ошибка.

Возможно ли вызывать множество объектов? Если да, то как потом обрезать лишние участки луча? 

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         ResetLastError();
         //--- создадим трендовую линию по заданным координатам
         if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
           {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
           }
         ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
         ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
         ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
         ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

 
forexman77:

Вообщем перенес все расчеты по линии тренда в советник.  Распринтовал вроде правильно.

Индикатор, чтобы показывал на всем промежутке линии не могу сделать. Опыта маловато.

Собственно индикатор нужен, чтобы визуально видеть, что сделки открываются корректно.

Решил все-таки при визуализации использовать графические объекты.

Проблема в ошибке 4200( Объект уже существует)

Пробовал присваивать каждый раз новое имя объекту.  Та же ошибка.

Возможно ли вызывать множество объектов? Если да, то как потом обрезать лишние участки луча? 

Перед созданием можно сделать проверку, существует ли объект, функция ObjectFind(). Можно ничего не делать, существует и ладно, не страшная ошибка.

Множество объектов. Можно к имени объекта добавлять время бара, получится уникальное имя.

Обрезать луч. Свойство ObjectSet(Name,OBJPROP_RAY,false);      

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