Индикаторы: SHI Channel true (NB-channel)
Уважаемый Collector , можно усовершенствовать канал ограничивая возможность его расширения определенной величиной (внешняя переменная) в зависимости от таймфрейма, то есть: при достижении максимально допустимой ширины канал должен начинать вращение по двум точкам - текущей цены и последнего максимума.
Я то думал, что в базе принято свои разработки публиковать. Теперь вижу, что можно и чужое под своим авторством !? Теперь понятна плодовитость сего автора по созданию кода различных индикаторов.
у меня не идет почемуто .... помогите.. тема интересная...
Я то думал, что в базе принято свои разработки публиковать. Теперь вижу, что можно и чужое под своим авторством !? Теперь понятна плодовитость сего автора по созданию кода различных индикаторов.
http://www.kroufr.ru/content/view/311/124/
Все четыре индюка, которые по мнению авторов необходимы для данной ТС.
С описанием как и зачем.
Только, может я ошибаюсь, но мне кажется, что Баришпольцевское - это не совсем так, там поиск точек входа по пересечениям границ каналов, а здесь - по положению цены относительно границ. Но утверждать не буду.
И не удержусь :). Картинка будет намного забавней, если с помощью глобальных наносить поверх канала например на ТФ М15 (зеленый) канал, полученный с ТФ М1 (кирпичный).

Надеюсь, что ему не будет обидно после этого...
Приветствую всех
кто нибудь знает как с таких индикаторов вытаскивать данные для использования в советниках ?
просто попробовал его полностью вписать в советника - торгует нормально , получать данные приходится по координатам нарисованных линий канала, всё было бы супер
но есть но - при включении всего написанного в оптимизаторе метатрейдера 4 - возникает деление на 0
понимаю это потому что что тестер не может сразу загрузить те данные которые получаются с нарисованных линий канала - т.к. они еще не нарисованы
вопрос как обойти это ограничение - может можно как то получить данные по другому ?
вот в этой строке получается деление на ноль (ppp[5]) - на рабочем графике и при визуализации работает, на оптимизаторе нет
ppp[6] = ((MarketInfo(valuta,MODE_ASK)-ppp[2])/MarketInfo(valuta,MODE_POINT))*100/ppp[5]; // процент по каналу
получаю данные в советнике типа так
if(Barry_Channel(valuta, TimeFrame, 6)>5 ....
знаю что не совсем удобно, можно переписать через линкованный массив - но суть не в этом (это ничего не меняет), а в том что не получить данные в тестере - для оптимизации
//+---------- КАНАЛЫ -------------------------------------------+ double Barry_Channel(string valuta,int tf,int perem){ //---- input parameters int BarsForFract=0; color Colour=Aqua; int CurrentBar, UpDown, WIND; double P1, P2, PP, Step, i_high, i_low; datetime T1, T2; int i,B1,B2, BFF; string txt,message; double ppp[10]; if (BarsForFract>0) BFF=BarsForFract; else switch (tf) { case 1: BFF=12; Colour=Yellow; break; case 5: BFF=48; break; case 15: BFF=24; break; case 30: BFF=24; break; case 60: BFF=12; Colour=Blue; break; case 240: BFF=15; Colour=Red; break; case 1440: BFF=10; Colour=Orange; break; case 10080: BFF=6; break; case 43200: BFF=6; break; default: BFF=2; break; } WIND=WindowHandle(Symbol(),tf); txt="TL1"+valuta+"_"+tf; ObjectCreate(txt,OBJ_TREND,0,iTime(valuta,tf,0),0.0,iTime(valuta,tf,1),0.0); ObjectSet(txt,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(txt,OBJPROP_COLOR,Colour); txt="TL2"+valuta+"_"+tf; ObjectCreate(txt,OBJ_TREND,0,iTime(valuta,tf,0),0.0,iTime(valuta,tf,1),0.0); ObjectSet(txt,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(txt,OBJPROP_COLOR,Colour); txt="MIDL"+valuta+"_"+tf; ObjectCreate(txt,OBJ_TREND,0,iTime(valuta,tf,0),0.0,iTime(valuta,tf,1),0.0); ObjectSet(txt,OBJPROP_STYLE,STYLE_DOT); ObjectSet(txt,OBJPROP_COLOR,Colour); CurrentBar=2; B1=-1; B2=-1; UpDown=0; while ((B1==-1 || B2==-1) && CurrentBar<iBars(valuta,tf)) { //UpDown=1 значит первый фрактал найден сверху, UpDown=-1 значит первый фрактал //найден снизу, UpDown=0 значит фрактал ещё не найден. //В1 и В2 - номера баров с фракталами, через них строим опорную линию. //Р1 и Р2 - соответственно цены через которые будем линию проводить if (UpDown<1 && CurrentBar==Lowest(valuta,tf,MODE_LOW,BFF*2+1,CurrentBar-BFF)) { if (UpDown==0) {UpDown=-1;B1=CurrentBar;P1=iLow(valuta,tf,B1);} else {B2=CurrentBar;P2=iLow(valuta,tf,B2);} } if (UpDown>-1 && CurrentBar==Highest(valuta,tf,MODE_HIGH,BFF*2+1,CurrentBar-BFF)) { if (UpDown==0) {UpDown=1;B1=CurrentBar;P1=iHigh(valuta,tf,B1);} else {B2=CurrentBar;P2=iHigh(valuta,tf,B2);} } CurrentBar++; } if (B1==-1 || B2==-1) return(0); // Значит не нашли фракталов среди всех баров 8) Step=(P2-P1)/(B2-B1);//Вычислили шаг, если он положительный, то канал нисходящий P1=P1-B1*Step; B1=0;//переставляем цену и первый бар к нулю //А теперь опорную точку противоположной линии канала. if (UpDown==1) { PP=iLow(valuta,tf,2)-2*Step; for (i=3; i<=B2; i++) {if (iLow(valuta,tf,i)<PP+Step*i) { PP=iLow(valuta,tf,i)-i*Step; }} } else { PP=iHigh(valuta,tf,2)-2*Step; for (i=3; i<=B2; i++) {if (iHigh(valuta,tf,i)>PP+Step*i) { PP=iHigh(valuta,tf,i)-i*Step;}} } //Теперь переставим конечную цену и бар на АВ, чтобы линии канала рисовались подлиннее P2=P1+(iBars(valuta,tf)-10)*Step; T1=iTime(valuta,tf,B1); T2=iTime(valuta,tf,iBars(valuta,tf)-10); txt="TL1"+valuta+"_"+tf; ObjectSet(txt,OBJPROP_TIME1,T2); ObjectSet(txt,OBJPROP_TIME2,T1); ObjectSet(txt,OBJPROP_PRICE1,PP+Step*(iBars(valuta,tf)-10)); ObjectSet(txt,OBJPROP_PRICE2,PP); txt="TL2"+valuta+"_"+tf; ObjectSet(txt,OBJPROP_TIME1,T2); ObjectSet(txt,OBJPROP_TIME2,T1); ObjectSet(txt,OBJPROP_PRICE1,P2); ObjectSet(txt,OBJPROP_PRICE2,P1); txt="MIDL"+valuta+"_"+tf; ObjectSet(txt,OBJPROP_TIME1,T2); ObjectSet(txt,OBJPROP_TIME2,T1); ObjectSet(txt,OBJPROP_PRICE1,(P2+PP+Step*(iBars(valuta,tf)-10))/2); ObjectSet(txt,OBJPROP_PRICE2,(P1+PP)/2); double f = ObjectGetValueByShift("TL1"+valuta+"_"+tf, 0); double s = ObjectGetValueByShift("TL2"+valuta+"_"+tf, 0); ppp[3] = NormalizeDouble(ObjectGetValueByShift("MIDL"+valuta+"_"+tf, 0),Digits); // средняя линия if (f > s) { ppp[1] = NormalizeDouble(f,Digits); // верхняя линия ppp[2] = NormalizeDouble(s,Digits); // нижняя линия } else { ppp[1] = NormalizeDouble(s,Digits); ppp[2] = NormalizeDouble(f,Digits); } message = "верхняя граница "+i_high+"\nнижняя граница "+i_low; double p1 = ObjectGet("TL1"+valuta+"_"+tf, OBJPROP_PRICE1); double p2 = ObjectGet("TL1"+valuta+"_"+tf, OBJPROP_PRICE2); if (p1 < p2){// вверх - торгуем тока в бай message = message+"\nграфик смотрит вверх"; ppp[4]=1; // канал смотрит вверх } if (p1 > p2){// вниз - торгуем тока в селл message = message+"\nграфик смотрит вниз"; ppp[4]=0; // канал смотрит вниз } ppp[5] = (ppp[1]-ppp[2])/MarketInfo(valuta,MODE_POINT); // ширина канала ppp[6] = ((MarketInfo(valuta,MODE_ASK)-ppp[2])/MarketInfo(valuta,MODE_POINT))*100/ppp[5]; // процент по каналу return(ppp[perem]); }

- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
SHI Channel true (NB-channel):
Author: Collector