Форум » Консультации по программированию » Рабираемся с кодом. » Ответить

Рабираемся с кодом.

kot103: Помогите понять как переделать индикатор фишер1 вобшем переделывать не надо надо просто чтобы фишер1 рисовал вот так ||||||||||||||||||ну конечно это пример просто, так как черточки должны быть разного цвета да это вы и сами знаете я смог сделать чтобы так рисовалось но только относительно нулевой линии то есть синие рисуются вышы нуля а розовые ниже нуля а вот что изменить в коде чтоб и розовые рисовались вышы ноля не как не могу понять ну теперь вот и сам код фишира1 БУДУ ОЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ!!! #property copyright "Copyright © 2005, Yura Prokofiev" #property link "Yura.prokofiev@gmail.com" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Black #property indicator_color2 Blue #property indicator_color3 White extern int period=10; double ExtBuffer0[]; double ExtBuffer1[]; double ExtBuffer2[]; int init() { SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,White); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Blue); SetIndexStyle(2,DRAW_HISTOGRAM); IndicatorDigits(Digits+1); SetIndexBuffer(0,ExtBuffer0); SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(2,ExtBuffer2); IndicatorShortName("Fisher"); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); return(0); } int start() { //int period=10; int limit; int counted_bars=IndicatorCounted(); double prev,current,old; double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0; double price; double MinL=0; double MaxH=0; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(int i=0; i<limit; i++) { MaxH = High[Highest(NULL,0,MODE_HIGH,period,i)]; MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)]; price = (High+Low)/2; Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); ExtBuffer0=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0; } bool up=true; for(i=limit-2; i>=0; i--) { current=ExtBuffer0; prev=ExtBuffer0[i+1]; if (((current<0)&&(prev>0))||(current<0)) up= false; if (((current>0)&&(prev<0))||(current>0)) up= true; if(!up) { ExtBuffer2=current; ExtBuffer1=0.0; } else { ExtBuffer1=current; ExtBuffer2=0.0; } } return(0); }

Ответов - 5

Scriptong: Добрый день. Приведенный Вами код изобилует большим количеством синтаксических ошибок. Поэтому он в принципе не работоспособен. Но даже после исправления всех этих ошибок индикатор ничего не отображает на графике. То есть присутствуют какие-то алгоритмические ошибки, которые я исправить не могу, т. к. в принципе не понимаю, что нужно получить. Попробуйте найти рабочую версию индикатора и прикрепить ее к сообщению в виде файла. Для этого используйте сервис zalil.ru или gfile.ru. Ссылку на файл прикрепите к сообщению.

kot103: Спасибо вам за ответ. Показывает этот идекатор гистограмму типа авелком осцелятора а нужно чтоб типа голдминера. Ссылку прилагаю на индекатор фишерфишер2

Scriptong: Этот индикатор отображает следующую картину. Насколько я понимаю, Вам нужно, чтобы все отображалось выше нуля? Индикатор здесь.


kot103: Спасибо вам! Почти так но чучють не так прилагаю свое фото это три одинаковых индекатора но сразными пириодами дело втом что исходник занимает много места на экране ноудбука поэтому мне пришлось переделать этот индекатор чюток помучился и вродебы получилось ссылку на индекатор также прилогаю теперь буду думать как все это соеденить в один индекатор чтоб было напремер так если есть розглошэние в одном из них то цвет к примеру белый если нет то как обычно Blue Magenta. Спасибо что уделили внимание!!! fisher2

Scriptong: kot103 пишет: буду думать как все это соеденить в один индекатор чтоб было напремер так если есть розглошэние в одном из них то цвет к примеру белый если нет то как обычно Blue Magenta Не понял, что значит "розглошэние". По тем рисункам, которые Вы привели, понял, что необходимо выводить гистограмму с высотой столбцов одинаковой высоты. Это делается немного не так - вот так.



полная версия страницы