Как доработать индикатор ZigZag_ws_Chanel_R

 

Будучи , так сказать, программистом-любителем,написал себе трендовый советник на основе стандартных индикаторов ZigZag и RSI, торгующий по дивергенции и подъемам/спадам по вершинам ZigZaga.Советник показывает неплохие результаты , но пропускает хорошие тренды, возникающие после пробоя ценой сторон симметричного(или его еще называют сходящимся) треугольника или клина.Решил дополнить советник и этими сигналами .Нашел в Интернете вроде бы подходящий индикатор ZigZag_ws_Chanel_R, строящий по соседним вершинам канал,а по последним двум - лучики-линии тренда, образующие тот самый симметричный треугольник.Дополнил советник сигналами на пробой линий тренда. но вот беда - лучи в индикаторе в истории не сохраняются,а с образованием новой вершины b2  ZigZaga "обрезаются" по вершине b2  и b3 , и в виде таких отрезков  между соседними вершинами ZigZaga хранятся в истории.Тем самым невозможно прогнать советник в тестере ,чтобы устранить возможные недоработки и "подводные камни"(всех ситуаций сразу предусмотреть невозможно),так как как раз пробиваемый участок лучика от вершины треугольника до вершины  b2 или b3 ZigZaga  в истории отсутствует и  на графике в истории не чертится. Поэтому советник не может получить значение участка луча от вершины треугольника (апекса) до вершины ZigZaga в точке пробоя на истории.

 Из-за этого невозможно проверить работу советника на пробой сторон важной фигуры разворота тренда "треугольника" в тестере МТ4. Видимо нет буфера, где бы хранились данные луча от вершины ZigZaga до апекса. Но если индикатор рисует на истории линии цвета "пинк" от вершины до вершины ZigZaga , то интуитивно понимаешь, что в принципе можно сделать так, чтобы линии "пинк" индикатор чертил на истории от второй вершины через первую аж до апекса. Благодаря чему в истории будет сохраняться значения линии на баре пробоя. И можно будет проверить работу советника в тестере. Сохранять лучи полностью на истории не имеет смысла. Как-то помню мне в руки попал индикатор, строивший лучи по двум фракталам и сохранявшим их в истории,естественно график был забит этими лучами,так что ничего невозможно было разобрать. А вот сохранить в истории треугольник по вершину(апекс) для проверки в тестере советников,работающих на пробой линий тренда треугольников имело бы смысл.

Ну и разумеется это имеет смысл делать в этом индикаторе, тогда, когда точка пересечения лучей находится по оси времени на удалении в разумных пределах , 24-48 часов от момента образования нового луча для графика Н1. Для лучей с точкой пересечения на удалении более 48 часов хранить и чертить на истории участок луча от последней вершины ZigZaga до вершины треугольника никчему. Не говоря уже о лучах близких к параллельным или расходящихся ,где о такой точке говорить не приходится. Так, что тут не так все просто, как кажется на первый взгляд. 

Отсюда вопрос к знающим людям - как доработать код индикатора ZigZag_ws_Chanel_R, чтобы он обрезал лучи не по вершинам b2 и b3, а по вершине треугольника,т.е. по точке пересечения лучей(апексу)? Подскажите пожалуйста,господа опытные программисты.Картинку и код индикатора прилагаю.

 

Файлы:
 

как я понял вам нужна прямая между b5  и b3. 

Если это так, то в чем проблема? У вас есть доступ к вершинам зиг-зага?

Если да, то разве так трудно посчитать уравнение прямой(луча) по 2 точкам.

главное понять что это за точки(что нужно брать) и в а каком они буфере(откуда брать), все - дальше школьная геометрия. 

 

Не совсем так. Мне нужно  чтобы в истории хранились не только участки от b5 до b3 или от b4 до b2 , а и от апекса до b2 или до  b3,и чтобы советник мог получить значения этого участка на том или ином баре .Для чего - это собственно написано в том числе и на скриншоте. Чтобы в тестере можно было проверить работу советника, открывающего ордера при пробое ценой сторон такой важной  разворотной фигуры , как "сходящийся треугольник".Сейчас это невозможно,так как  участки  луча от последней верхней или нижней вершины ZigZaga до точки пересечения верхнего и нижнего лучей (апекса), с появлением новой вершины  ZigZaga исчезают с графика и не чертится на истории,а вместо него строится новый луч по новым вершинам и так далее. Нет этих участков в истории. И на запрос советника:

double L_SupTr_1=ObjectGetValueByShift("ZZCR2",1);  //Получение значения цены нижней трендовой линии поддержки на баре 1 

тестер в журнале пишет:

 Alert: EURUSD  L_SupTr_1=0

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

 

То что вам надо - точка пересечения двух прямых?

Если да то имеем следующее: 

Так как прямые строятся по двум точкам и все точки у вас есть, но нет ни какой проблемы найти точку пересечения этих прямых.

Найдите коэффициенты уравнений двух прямых, затем решите систему уравнений с двумя неизвестными. И точка пересечения у вас есть.  

 
Да не проблема найти точку пересечения двух прямых! А вот как сделать в коде MQL4 так чтобы советник мог получить значение стороны треугольника на баре пробоя ее ценой на истории. Просто чтобы проверить работу советника по этой стратегии в тестере МТ4 на протяжении полугода или года? 
Причина обращения: