Как получить цены трендовых линий на текущем баре при оптимизации ?
Рассчитать по уравнению прямой:
Y = k*X + B
Индексацию баров в уравнении оставить такой, какая она есть (правый по графику бар - 0, слева от него 1 и т. д.) Тогда ценовое значение линии на нулевом баре - коэффициент B.
Рассчитать по уровню прямой
А значение символов можно узнать, чтобы правильно понять что вы имеете ввиду ? (Y,k,X,B)
Лучше конечно бы примером подсказать))
цена нижнего фрактала 0.11111
цена low 0.22222
цена на текущем баре 0.?????
А значение символов можно узнать, чтобы правильно понять что вы имеете ввиду ? (Y,k,X,B)
Лучше конечно бы примером подсказать))
цена нижнего фрактала 0.11111
цена low 0.22222
цена на текущем баре 0.?????
X и Y - это координаты каждой из точек в декартовой плоскости. На графике это, соответственно, индексы баров и цена. Для каждой из точек Вам должны быть известны эти величины. К примеру, для нижней трендовой, показанной на рисунке, показаны две опорные точки. У точки 1 индекс бара 6 (т. е. Х = 6), а у точки 2 - 2 (т. е. Х = 2). Если у точки 1 цена 0.1111, то получаем такое уравнение:
0.11111 = k * 6 + B
Соответственно, для точки 2 получаем уравнение:
0.22222 = k * 2 + B
Решаем систему уравнений и получаем из нее:
k = -0,0277775 B = 0,277775
Таким образом, мы получили значение коэффициентов для уравнения прямой, описывающей нижнюю трендовую линию. Теперь, чтобы узнать ценовое значение линии на любом баре, нужно лишь подставить коэффициенты и номер бара в уравнение:
Y = 0,0277775 * 0 + 0,277775 = 0,277775 // Для нулевого бара Y = 0,0277775 * 1 + 0,277775 = 0,3055525 // Для первого бара
Ну а функция для расчета коэффициентов k и В по двум точкам одной прямой такая:
double CalculateBAndKByLine(int x1, double y1, int x2, double y2, double &kKoef) { if (x1 == x2) return DBL_MAX; kKoef = (y2 - y1) / (x2 - x1); return y1 - kKoef * x1; }
Функция возвращает значение коэффициента В, а через аргумент kKoef - значение k.
x1, y1 - индекс бара и цена первой известной точки
x2, y2 - индекс бара и цена второй известной точки
У меня немного по другому сложилось и цена идёт строго по линии
так мне понятней, но пока что это вроде бардак))
double Lo; bool lo=true; datetime tLo; int start() { int k = 0, bar = 0; double NewPrice = 0.0; if(lo){Lo=iLow(NULL,0,1);tLo=iTime(NULL,0,1);lo=false;} if(!FRdn && Lo>Low[1]) lo=true; //если фрактал не менялся, а цена была ниже линии, то перерисуем линию bar = iBarShift(NULL,0,tLo,true); if (bar==1) k=4; if (bar==2) k=8; if (bar==3) k=12; if (bar==4) k=16; if (bar==5) k=20; if (bar==6) k=24; if (bar==7) k=28; //и т.д. if (FrDn < Lo && bar>0) NewPrice = ((FrDn * k)/100000/*для 5-ти знаков*/)+Lo //линия вверх if (FrDn > Lo && bar>0) NewPrice = ((FrDn * k)/100000/*для 5-ти знаков*/)-Lo //линия вниз
Отмеченное надо как-то компактно сформировать))
Вам нужно вычислить номер бара по времени (iTime,iBarShift)
Ну и затем запросить значение объекта на этом баре
Однако и в тестере текущий бар будет равен нулю.
У меня немного по другому сложилось и цена идёт строго по линии
так мне понятней, но пока что это вроде бардак))
Отмеченное надо как-то компактно сформировать))
Нет, у меня ерунда какая то получается, новые значения по формуле не совпадают со значениями полученными по имени.
Вот Ваши значения, равносильны и для тестера в том числе:
ObjectGetValueByShift("FrUp",0); ObjectGetValueByShift("FrDn",0);
Вот Ваши значения:
Это понятно, но проблема при оптимизации их не видно, т.к. графические объекты там не строятся.
Это понятно, но проблема при оптимизации их не видно, т.к. графические объекты там не строятся.
Построение графических объектов необходимо перенести в OnTick()
у меня строятся
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Известна первая точка по фракталам
Известна вторая точка по вершинам high-low
На графике рисуются трендовые линии по точкам
Как получить цены трендовых линий на текущем баре при оптимизации ?
При визуализации цены линий на текущем баре определяются по имени: