"Индикатор MLS-HL4-Angle расчитывает значение a и обозначает угол наклона найденной прямой к горизонту."
на EU H1 около 180 и на H4 где-то 360 ...
...на приведеннм выше рис.: 91 ... ???
А как правильно?
Угол наклона, в данном случае, измеряется не в градусах, а в количестве пунктов за 1 свечу. (см. учебник по Аналитической геометрии, радел "Уравнение прямой")
Прямая может быть задана с помощью уравнения
y = ax + b,
где x - координата по оси X,
a - угол прямой к горизонту
b - координата по оси Y, если x = 0.
За ось Y я принял значение цены, за X - номер свечи (время)
ну раз никто не откликается, - то просто брейнсторм для поддержания развития идеи :
углы конечно понятие раятяжимое и ученные спорят за это под разным градусм - то пока Бокипер не решил, как правильно - можно попробовать начать с того, что ноль поставить на место (если а=в, угол =0) как бы моментально и если измерять в килограммах - прирост не превысит максимального значения или сам себя; как-бы по простому - если взять (временно) стохастик (рси) и вместо 100 написать 90 - то все будут думать шо это 90 градусв ... угол ...
шутка, конечно, я ж сказал - временно... : ))))
ну раз никто не откликается, - то просто брейнсторм для поддержания развития идеи :
углы конечно понятие раятяжимое и ученные спорят за это под разным градусм - то пока Бокипер не решил, как правильно - можно попробовать начать с того, что ноль поставить на место (если а=в, угол =0) как бы моментально и если измерять в килограммах - прирост не превысит максимального значения или сам себя; как-бы по простому - если взять (временно) стохастик (рси) и вместо 100 написать 90 - то все будут думать шо это 90 градусв ... угол ...
шутка, конечно, я ж сказал - временно... : ))))
Если вы говорите о нормализации советника, то могу предложить воспользоваться интерполяцией. Эта тема раскрыта в комментариях к вот этим индикаторам (/ru/code/8694). Кому неохото ковыряться в коде, предоставляю пример нормализированного индикатора угла (приведённого к +100% и -100% относительно его максимумов/минимумов)
Сразу скажу, что напрашивается ещё и дивергенцию находить....
Это будет выглядеть примерно так:
#property copyright "Copyright © Trofimov Evgeniy Vitalyevich, 2008" #property link "http://multitest.semico.ru/mnk.htm" //---- Свойства индикатора #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DodgerBlue #property indicator_width1 2 #property indicator_maximum 100 #property indicator_minimum -100 #property indicator_level1 0 #property indicator_level2 50 #property indicator_level3 -50 //#property indicator_color2 DarkSeaGreen //#property indicator_width2 0 //---- Входящие параметры extern int MyPeriod=12; extern int BuffSize=288; bool ReDraw=true; //-если включен, то перерисовывает нулевой // бар при каждом новом тике // если выключен, то нулевой бар содержит // фиксированное значение, // вычисленное по предыдущим (готовым) барам //---- Массив данных индикатора double MLS_Angel[]; double Angels[]; //+------------------------------------------------------------------+ //| Функция инициализации индикатора | //+------------------------------------------------------------------+ int init() { //---- x дополнительных буфера, используемых для расчета IndicatorBuffers(1); //---- параметры рисования (установка начального бара) SetIndexDrawBegin(0,MyPeriod); //SetIndexDrawBegin(1,MyPeriod); //---- x распределенных буфера индикатора SetIndexBuffer(0,MLS_Angel); //SetIndexBuffer(1,MLS_b); //---- имя индикатора и подсказки для линий IndicatorShortName("MLS-HL4-Procent ("+MyPeriod+", "+BuffSize+") = "); SetIndexLabel(0,"a"); //SetIndexLabel(1,"b"); //SetIndexStyle(1,DRAW_NONE, EMPTY, EMPTY, CLR_NONE); ArrayResize(Angels,BuffSize); return(0); } //+------------------------------------------------------------------+ //| Функция индикатора | //+------------------------------------------------------------------+ int start() { int limit, RD; if(ReDraw) RD=1; static datetime LastTime; double MAX,MIN; // Пропущенные бары int counted_bars=IndicatorCounted(); //---- обходим возможные ошибки if(counted_bars<0) return(-1); //---- новые бары не появились и поэтому ничего рисовать не нужно limit=Bars-counted_bars-1+RD; //---- основные переменные double k1, i1, j1, k2, i2, j2; double a, b, y, S, H, L; int x; //---- основной цикл for(int t=limit-RD; t>-RD; t--) { //Вычисление угла //if(LastTime==iTime(NULL,0,t)) return(0); //лучше не включать //LastTime=iTime(NULL,0,t); //if(t<5) Print(t,"===== ",TimeToStr(LastTime)," ====="); k1=0; i1=0; j1=0; k2=0; i2=0; for(x=t+MyPeriod-1; x>=t; x--) { // составляем нормальные уравнения k1=a*i1+b*j1 и k2=a*i2+b*j2 H=High[x]/Point; L=Low[x]/Point; k1=k1+H*x; k2=k2+H; k1=k1+L*x; k2=k2+L; i1=i1+2*x*x; i2=i2+2*x; j1=j1+2*x; } j2=MyPeriod*2; //Решаем систему уравнений a=(k1*j2-j1*k2)/(i1*j2-j1*i2); //b=(k2-i2*a)/j2; //Теперь все точки High и Low, на данный момент времени, //приблизительно расположены вдоль прямой, описаной уравнением y=ax+b, //где x - это номер свечи, а y - значение цены. //Если образовался новый бар, то производится сдвижка массива if(LastTime!=Time[t+1]){ for(x=BuffSize-1; x>0; x--) { Angels[x]=Angels[x-1]; }//Next x LastTime=Time[t+1]; } //Конец сдвижки массива //Перерисовка угла Angels[0]=-a; MAX=Angels[ArrayMaximum(Angels)]; MIN=Angels[ArrayMinimum(Angels)]; MLS_Angel[t]=Интерполяция(MAX,MIN,100,-100,Angels[0]); if(!ReDraw && t==1) MLS_Angel[0]=MLS_Angel[1]; //Конец перерисовки угла } return(0); } //+------------------------------------------------------------------+ double Интерполяция(double a,double b,double c,double d,double X) { //a; X; b - столбец изветных чисел, c; d; - столбец со стороны неизвестной. if(b - a == 0) return(10000000); //бесконечность else return(d - (b - X) * (d - c) / (b - a)); }//Интерполяция //+------------------------------------------------------------------+
ну а если предпочитаете принимать за максимум значение 90, тонеобходимо заменить строку
MLS_Angel[t]=Интерполяция(MAX,MIN,100,-100,Angels[0]);
на строку
MLS_Angel[t]=Интерполяция(MAX,MIN,90,-90,Angels[0]);
и в параметрах сделать, чтобы границы нормальные были:
#property indicator_maximum 90 #property indicator_minimum -90
"Если вы говорите о нормализации советника, то могу предложить воспользоваться интерполяцией. Эта тема раскрыта в комментариях к вот этим индикаторам (/ru/code/8694). Кому неохото ковыряться в коде, предоставляю пример нормализированного индикатора угла (приведённого к +100% и -100% относительно его максимумов/минимумов)"
_____________
Вот именно! прекрасное решение - то что нужно
Евгений Виталиевич, - как привести к нормализированному моментуму (100, -100) от MLS (или МА)?
Ребята зачем работу усложнять индюк никак кинуть?
Ребята зачем работу усложнять индюк никак кинуть?
так он выложен - в постах только обсуждение различных вариантов применения алгоритмов, заложенных в этих индикаторах
величина "уклона" (период 12 и 5) - разница величины значений инд на 12-ти и 5 барах
следуя Е.В. примеру - осциллятор указывает как бы "угол"(наклон) доски длинной в 12 или 5 баров (сьвечек) волочимой дворником по этим горбам (типа аналагична под градусом каким; период : от 0 бара до конца доски, справа налево) т.е. насколько конец дворника (с правой от нас стороны ) выше противоположного конца доски
А как правильно?
Угол наклона, в данном случае, измеряется не в градусах, а в количестве пунктов за 1 свечу. (см. учебник по Аналитической геометрии, радел "Уравнение прямой")
Прямая может быть задана с помощью уравнения
y = ax + b,
где x - координата по оси X,
a - угол прямой к горизонту
b - координата по оси Y, если x = 0.
За ось Y я принял значение цены, за X - номер свечи (время)
Здраствуйте я хотел бы у вас спросить .Нет ли у вас отдельной функции для расчета угла тренда.Если есть выложите пожалуйста в эой ветке.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коридор и угол его наклона методом наименьших квадратов:
Реагирует на рынок быстрее, чем МА (скользящая средняя)
Author: Evgeniy Trofimov