Индикаторы: SHI Channel true (NB-channel)

 

SHI Channel true (NB-channel):

Индикатор SHI_Channel_true отображает динамические скользящие каналы Баришпольца на графике в автоматическом режиме

Author: Collector

 
Я то думал, что в базе принято свои разработки публиковать. Теперь вижу, что можно и чужое под своим авторством !? Теперь понятна плодовитость сего автора по созданию кода различных индикаторов.
 

Уважаемый Collector , можно усовершенствовать канал ограничивая возможность его расширения определенной величиной (внешняя переменная) в зависимости от таймфрейма, то есть: при достижении максимально допустимой ширины канал должен начинать вращение по двум точкам - текущей цены и последнего максимума.

 
Valmars:
Я то думал, что в базе принято свои разработки публиковать. Теперь вижу, что можно и чужое под своим авторством !? Теперь понятна плодовитость сего автора по созданию кода различных индикаторов.
а чей он вообщето ?

у меня не идет почемуто .... помогите.. тема интересная...
 
Valmars:
Я то думал, что в базе принято свои разработки публиковать. Теперь вижу, что можно и чужое под своим авторством !? Теперь понятна плодовитость сего автора по созданию кода различных индикаторов.
Если авторы сами не публикуют свои разработки - как мы о них узнаем? Collector ведь не приписывает себе авторство, он просто собирает скрипты и выкладывает здесь, думаю, многим он помог найти нужные разработки.
 
А есть описание этого индикатора, а то там какието символы появляются, а что они сигнализируют понять не могу!!!
 
Последнее время канализация становится очень популярной. Вся система торговли по CHI описана здесь
http://www.kroufr.ru/content/view/311/124/
Все четыре индюка, которые по мнению авторов необходимы для данной ТС.
С описанием как и зачем.

Только, может я ошибаюсь, но мне кажется, что Баришпольцевское - это не совсем так, там поиск точек входа по пересечениям границ каналов, а здесь - по положению цены относительно границ. Но утверждать не буду.

И не удержусь :). Картинка будет намного забавней, если с помощью глобальных наносить поверх канала например на ТФ М15 (зеленый) канал, полученный с ТФ М1 (кирпичный).
 
Автора можете найти по ссылке http://shforex.narod.ru/
Надеюсь, что ему не будет обидно после этого...
 

Приветствую всех

кто нибудь знает как с таких индикаторов вытаскивать данные для использования в советниках ?

 просто попробовал его полностью вписать в советника - торгует нормально , получать данные приходится по координатам нарисованных линий канала, всё было бы супер

но есть но - при включении всего написанного в оптимизаторе метатрейдера 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]);
}
Причина обращения: