Кто-нибудь торгует в каналах ? - страница 2

 
Mak писал (а):
Каналы - это те же уровни, только наклонные :)
Спасибо - просвятил.
Уровень - это и есть уровень. А у канала есть линии сопротивления и поддержки, а уровней в прямом смысле там не наблюдал.
Если хочется посоревноваться в терминалогии трейдинга, то давай откроем для этого новую ветку.
 
Michel_S писал (а):
Itso:
Если не секрет - какие каналы пользуете?

Если это вопрос ко мне, то я использую уровни...
Каналами перестал заниматься, потому что любые фигуры на графике (в том числе и каналы) - это как фигурки из облаков: сколько людей смотрит, столько образов и получается. Слишком индивидуально.
Мне кажется, важно не столько распознать канал, как это сделать как можно быстрее, чтобы не войти в рынок в конце канала. Помните, как нас учили патриархи технического анализа строить линию тренда по одной точке? Почему по одной точке? Потому что, когда вторая точка будет уже видна, то основную часть движения мы уже пропустили.
Я торгую по уровням, потому что уровни важнее фигур. Уровни, в конечном итоге, определяют объем прибыли и убытков. Именно уровни для открытия и закрытия сделок для массы трейдеров имеют значения.
Полностью согласен. Правда , не знаю, кто это из классиков учил строить линию тренда по одной точке ? Или вы имеете типа
"Провожу линию параллельно предыдущему тренду" ? А кто-то из классиков проводил линию просто под углом 45 градусов. Правда ни когда я это читал, ни теперь, не могу представить себе это, ведь масштаб всегда можно изменить, изменится и угол. Ну, это всё для акций
30 -50 лет назад.Тогда у них были лишь карандаш, бумага, линейка и циркуль, а у нас сейчас компьютеры, торговые терминалы и интернет.
Когда я отверг общепризнанные классические индикаторы, я обратился к каналам, в часности, меня заинтересовал общеизвестный индикатор Shi_Channel, строящий текущий канал. Иногда он показывал обнадёживающие результаты, т.е. как если бы я сам его провёл. Тогда переделал индикатор, чтобы посмотреть, каким был канал, например, 5 или 10 баров назад, и понял, что он пригоден только для истории, как и идикаторы. Думаю, может опубликовать, что бы другие не строили ллюзий?
Единственное возражение, два уровня, это тоже уже, по-существу, канал, только горизонтальный, в котором и мечется цена.
 
Michel_S:
Mak:
Каналы - это те же уровни, только наклонные :)
Спасибо - просвятил.
Уровень - это и есть уровень. А у канала есть линии сопротивления и поддержки, а уровней в прямом смысле там не наблюдал.
Если хочется посоревноваться в терминалогии трейдинга, то давай откроем для этого новую ветку.
Пожалуста .. :)

Уровень чего?
Сопротивления и поддержки?
Или вы про фибоначи?
 
Mak писал (а):

Уровень чего?
Сопротивления и поддержки?
Или вы про фибоначи?

Ценовой уровень - это горизонтальная линия. Можно дальше уже уточнять как кому нужно, то ли это уровень сопротивления или поддержки, то ли это линии Фибоначчи.
 
Мужуки, да что Вы все словами да словами? рук нет что ли разобраться по-нормальному?
Раз уж речь пошла об уровнях - никто не встречал нечто подобное (это в моей интерпритации, так что все может быть... :).

Ищем на истории три-четыре фактрала тому назад и тянем к нулю уровни. Если появляется новый фактрал, пробивающий уровень первого прежнего - делаем ступеньку на его новый уровень. Появляется второй пробивающий фактра - ступенька уровня второго прежнего и т.д. Уровень каждого пробивающего после свершения держится Эн баров потом падает до образовавшегося, но не пробивающего фактрала. Это для Хаев, для Лоуев соответственно наоборот. Типа эсственных уровней сопротивления/поддержки интрадей. И вроде как пробой собравшихся в кучку уровней - туда и поедем.
 
Понравился мне индикатор, точнее внутренний извилистый канал (на картинке красивый такой). Прям покупай, когда ниже продавай когда выше. Переделал один из советников под него. Запустил на тест и взгрустнулось. Перерисовывается этот канал и очень сильно. Вобщем как ни оптимизируй а советник низкодоходный. Ниже код

//+------------------------------------------------------------------+
//|                                                          S_1.mq4 |
//|                                          Copyright © 2006, Manin |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Manin"
#property link      "manin1@mail.ru"
//#define MAGIC 300906
 
//---- Входные параметры
extern int           SL         =140;    
// расстояние до StopLoss в пунктах (0 - отключить SL)
extern int           TP         =70;    
// расстояние до TakeProfit в пунктах (0 - отключить TP)
extern int           Otstup_Open=25;   
// Отступ цены для открытия ордера
extern int           Otstup_Close=30;  
// Отступ цены для закрытия ордера
extern int           PauseTime_O=1200; 
//Пауза на выставление ордера в секундах
extern int           PauseTime_C=600; 
//Пауза на закрытие ордера в секундах
extern int           Profit=0;         
//Если каждая сделка должна быть прибыльной
extern int           Slippage  =5;     
// Проскальзывание
extern double        Risk      =0.0;   
// Часть свободных денег вкладываемых в лот
 
int start()
{  
  double StopLoss, TakeProfit, _OrderOpenPrice;
  double Up0, Dw0, _OrderProfit;     
// Объявляем переменные с которыми будем работать 
  double Lots;
  int    i, _OrderTicket_B_S_1, _OrderTicket_S_S_1;
  Up0=iCustom(NULL,0,"Sewerager",0,0); 
  Dw0=iCustom(NULL,0,"Sewerager",1,0); 
       
//+------------------------------------------------------------------+
//| Блок закрытия и модификации ордеров                              |
//+------------------------------------------------------------------+   
  _OrderTicket_B_S_1=0;
  _OrderTicket_S_S_1=0;
  if(OrdersTotal()>0)     // Если есть выставленные ордера
  {
    for(i=OrdersTotal()-1;i>=0;i--)      
// Открываем цикл. Счётчик цикла - переменная i принимает при
    {                                    
// каждом вызове тела цикла значения от 0 до OrdesTotal()-1.
      OrderSelect(i,SELECT_BY_POS);    
// Функция OrderSelect() выбирает ордер по его позиции в списке ордеров.
      if(OrderSymbol()!=Symbol()) continue; 
// Проверка выбранного ордера
      if(OrderType()==OP_BUY)  // Если этот ордер на покупку
      {
        if(OrderMagicNumber()==1) _OrderTicket_B_S_1=OrderTicket(); 
        if (Up0+Otstup_Close*Point<=Bid && Profit==0 && 
            CurTime()-OrderOpenTime()>PauseTime_C) // 
        {
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);   
          // Закрываем позицию
        }
        if(Up0+Otstup_Close*Point<=Bid && Profit>0 && 
           OrderProfit()>=Profit && 
           CurTime()-OrderOpenTime()>PauseTime_C) // 
        {
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);   
          // Закрываем позицию
        }
      }
      if(OrderType()==OP_SELL)          
      {
        if (OrderMagicNumber()==1) _OrderTicket_S_S_1=OrderTicket(); 
        if ((Dw0-Otstup_Close*Point)>=Ask && 
             Profit==0 && 
             CurTime()-OrderOpenTime()>PauseTime_C) 
        {
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);   
          // Закрываем позицию
        }
        if ((Dw0-Otstup_Close*Point)>=Ask && Profit>0 && 
             OrderProfit()>=Profit && 
             CurTime()-OrderOpenTime()>PauseTime_C) 
        {
          OrderClose(OrderTicket(),OrderLots(),Ask,
                     Slippage,CLR_NONE);   // Закрываем позицию
        }
      continue;
      }
    }  
  }   
 
//+------------------------------------------------------------------+
//| Блок открытия ордеров                                            |
//+------------------------------------------------------------------+
    OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
    if (HistoryTotal()>0) 
      {
        if(CurTime()-OrderCloseTime()<PauseTime_O) 
        return(0);
      }
    if(AccountFreeMargin()<100) //Проверяем свободные средства
      { 
        Comment("Нет денег. Свободная маржа=", AccountFreeMargin()); 
        return(0); 
      } //Если нет денег пишем в сообщение свободную маржу и выходим
    //---- Выставляем BUY ордер 
    if (Dw0-Otstup_Open*Point>=Ask && _OrderTicket_B_S_1==0) //  
    {
      Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1); 
      //Расчитываем размер лота
      if(Lots<0.1) Lots=0.1;
      if (SL>0) { StopLoss=NormalizeDouble(Ask-SL*Point,Digits); } 
      // Расчитываем стоп-лосс
      else { StopLoss=0.0; } // Если 0 то без стоп-лосса
      if (TP>0) { TakeProfit=NormalizeDouble(Ask+TP*Point,Digits); } 
      // Расчитываем тейк-профит
      else { TakeProfit=0.0; } // Если 0 то без тейк-профита
      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeProfit,
                "S_1 Купили",1,0,CLR_NONE);
    }
    //---- Выставляем SELL ордер
    if ((Up0+Otstup_Open*Point)<=Bid && _OrderTicket_S_S_1==0) 
    {    
      Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1); 
      //Расчитываем размер лота
      if(Lots<0.1) Lots=0.1;
      if (SL>0) { StopLoss=NormalizeDouble(Bid+SL*Point,Digits); } 
      // Расчитываем стоп-лосс, 
      else { StopLoss=0.0; } // Если 0 то без стоп-лосса 
      if (TP>0) { TakeProfit=NormalizeDouble(Bid-TP*Point,Digits); } 
      // Расчитываем тейк-профит, 
      else { TakeProfit=0.0; } // Если 0 то без тейк-профита 
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,StopLoss,TakeProfit,
      "S_1 Продали",1,0,CLR_NONE);
    }
}
H1 EURUSD c 30.08.2006-30.09.2006 0.1лота (Risk=0.0) и параметрами как в советнике по умолчанию

Вобщем вот такая лабуда.

Bookkeeper, а вот эти прямые линии можно не как объекты создать, а как-нибудь по другому, чтобы можно было в советник передать?
 
Alfa писал (а):
. . .
Bookkeeper, а вот эти прямые линии можно не как объекты создать, а как-нибудь по другому, чтобы можно было в советник передать?

А ... его знает, я ведь не волшебник, еще только учусь. Там я ввел значения канала на первом и нулевом барах - пременные PriceTS0, PriceBS0, PriceTS1, PriceBS1 - и в функции подставил передачу Shift, а не пустые скобки, думал в дальнейшем переделать под исторический индюк. Но когда опоры далеко от нулевого бара, границы отрисовываемые индикаторными буферами начинают сильно плясать, делать зигзаги, поменьше чем у CHI, фильтация сглаживает, но все равно . Я щас другое пробую - загоняю опоры на М1 в глобальные переменные и отрисовываю их как второй канал на М15 (пересчитав по прямой заднюю точку подальше, на 4 часа назад). Только что закончил, хотел поглядеть на Евру, вроде шевелилась, так у меня похоже дилер забастовал - до сих пор картинка никуда не поехала, вот так сейчас и висит, с 14:01 ни одного нового бара!



Только сейчас заметил размеры ТП и СЛ в советнике :). Эт же канализатор - его для пипсы в основном употребляют (я так понял по репликам с форумов). Поставьте ТП=5...10 и СЛ=8...18. И введите несколько поз подряд (от 1 до 5, на каждом следующем баре, пока есть сигнал на М5/М15), с изменяемым ТП и СЛ, например:

всего открыто Buy || Размер ТП
......................0.............10
......................1..............9
......................2..............8
......................3..............7
....................>3..............6

Если захотите :). Сам я до советников еще не добрался.
А график так и висит, зараза! Напишите хоть кто-нибудь, куда цена поехала?

Уф, включилось, и закрыться успел...
 
Bookkeeper, а где новый индикатор? Забрал на доработку и не вернул! :)

Я тут переделал один индикатор, чтобы отрисованный канал можно было брать в советник:
//+------------------------------------------------------------------+
//|                                                i_MAV_Channel.mq4 |
//+------------------------------------------------------------------+
 
#property indicator_chart_window 
#property indicator_buffers 2
#property indicator_color1 Red 
#property indicator_color2 Blue 
extern int       BarsForFract=0;
 
int      
CurrentBar, 
UpDown; 
double   
P1,P2, 
PP, P, P0,
O, 
_P, 
Step;
double         DnBuffer[];
double         UpBuffer[];
datetime 
T1, 
T2;
int      
i,o,p,
B1,B2, 
BP,
BFF;
 
int init()
{
   if (BarsForFract>0) BFF=BarsForFract; else
   switch (Period())
    {
      case 1: BFF=12; break;
      case 5: BFF=48; break;
      case 15: BFF=24; break;
      case 30: BFF=24; break;
      case 60: BFF=12; break;
      case 240: BFF=15; break;
      case 1440: BFF=10; break;
      case 10080: BFF=6; break;
      case 43200: BFF=6; break;
        default:     BFF=2; break;
    }
   IndicatorBuffers(2);
   IndicatorShortName("Proba");
   SetIndexStyle(0,DRAW_LINE,1,2,Red);
   SetIndexStyle(1,DRAW_LINE,1,2,Blue);
   SetIndexBuffer(0,UpBuffer);
   SetIndexBuffer(1,DnBuffer);
   SetIndexDrawBegin(0,0);
   SetIndexDrawBegin(1,0);
   return(0);
}
 
int deinit()
  {
   return(0);
  }
 
int start()
{
   CurrentBar=2; B1=-1; B2=-1; UpDown=0;
   while ((B1==-1 || B2==-1) && CurrentBar<Bars)
   {
      if (UpDown<1 && CurrentBar==Lowest(NULL,0,MODE_LOW,BFF*2+1,CurrentBar-BFF))
      {
         if (UpDown==0) {UpDown=-1;B1=CurrentBar;P1=Low[B1];}
         else {B2=CurrentBar;P2=Low[B2];}
      }
      if (UpDown>-1 && CurrentBar==Highest(NULL,0,MODE_HIGH,BFF*2+1,CurrentBar-BFF))
      {
         if (UpDown==0) {UpDown=1;B1=CurrentBar;P1=High[B1];}
         else {B2=CurrentBar;P2=High[B2];}
      }
      CurrentBar++;
   }
   if    (B1==-1 || B2==-1) return(0);
   Step=(P2-P1)/(B2-B1);
   O=P2;
   for(o=B2;o>=0;o--)
    {
      UpBuffer[o]=EMPTY_VALUE;
      UpBuffer[o]=O;
      O=O-Step;
    }
   if (UpDown==1)
   {    PP=Low[2]-2*Step;
      for (i=3; i<=B2; i++) {if (Low[i]<PP+Step*i) { PP=Low[i]-i*Step; BP=i; P=Low[i];}} 
   }    else
   {    PP=High[2]-2*Step;
      for (i=3; i<=B2; i++) {if (High[i]>PP+Step*i) { PP=High[i]-i*Step; BP=i; P=High[i];}} 
   }
   P0=P-BP*Step;
   _P=P0;
   for(p=0;p<=B2;p++)
   {
     DnBuffer[p]=EMPTY_VALUE;
     DnBuffer[p]=_P;
     _P=_P+Step;
   }
   P2=P1+(Bars-10)*Step;
   T1=Time[B1]; T2=Time[Bars-10];
   return(0);
}

Написал под него советник (переделал из своего другого) коментарии могут не соответствовать написанному т.к. до ума доводить не захотелось, система получилась сливная:
//+------------------------------------------------------------------+
//|                                               ex_MAV_Channel.mq4 |
//|                                          Copyright © 2006, Manin |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Manin"
#property link      "manin1@mail.ru"
#define MAGIC 100906
 
//---- Входные параметры
extern int           SL        =110;     // расстояние до StopLoss в пунктах (0 - отключить SL)
extern int           TP        =0;       // расстояние до TakeProfit в пунктах (0 - отключить TP)
extern int           Otstup=0;      // Отступ цены для открытия ордера
extern int           Profit=0;
extern int           Slippage  =5;       // Проскальзывание
extern double        Risk      =0.0;     // Часть свободных денег вкладываемых в лот
 
int start()
{  
  double StopLoss, TakeProfit, _OrderOpenPrice;
  double UP_0, DN_0;     // Объявляем переменные с которыми будем работать
  double Lots;
  int    i, _OrderTicket_B_FATL7, _OrderTicket_S_FATL7; // 
  UP_0=iCustom(NULL,0,"i_MAV_Channel",0,0); //_File
  DN_0=iCustom(NULL,0,"i_MAV_Channel",1,0); //_File
         
//+------------------------------------------------------------------+
//| Блок закрытия и модификации ордеров                              |
//+------------------------------------------------------------------+   
  _OrderTicket_B_FATL7=0;
  _OrderTicket_S_FATL7=0;
  if(OrdersTotal()>0)                                   // Если есть выставленные ордера
  {
    for(i=OrdersTotal()-1;i>=0;i--)      // Открываем цикл. Счётчик цикла - переменная i принимает при
    {                                    // каждом вызове тела цикла значения от 0 до OrdesTotal()-1.
      OrderSelect(i,SELECT_BY_POS);    // Функция OrderSelect() выбирает ордер по его позиции в списке ордеров.
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue; // Проверка выбранного ордера
      if(OrderType()==OP_BUY)            // Если этот ордер на покупку
      {
        _OrderTicket_B_FATL7=OrderTicket();
        if (UP_0-Otstup*Point<=Bid && DN_0<UP_0) // && OrderProfit()>Profit
        {
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);   // Закрываем позицию
        }
        if (DN_0-Otstup*Point<=Bid && DN_0>UP_0) // && OrderProfit()>Profit
        {
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);   // Закрываем позицию
        }
      }
      if(OrderType()==OP_SELL)            // Если этот ордер на покупку
      {
        _OrderTicket_S_FATL7=OrderTicket();
        if (DN_0+Otstup*Point>=Ask && DN_0<UP_0) // && OrderProfit()>Profit
        {
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);   // Закрываем позицию
        }
        if (UP_0+Otstup*Point>=Ask && DN_0>UP_0) // && OrderProfit()>Profit
        {
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);   // Закрываем позицию
        }
      }
    }  
  }   
 
//+------------------------------------------------------------------+
//| Блок открытия ордеров                                            |
//+------------------------------------------------------------------+
    if(AccountFreeMargin()<100)             //Проверяем свободные средства
    { Comment("Нет денег. Свободная маржа=", AccountFreeMargin()); return(0); } //Если нет денег пишем в сообщение свободную маржу и выходим
    //---- Выставляем BUY ордер -------------------------------------------------------------------------------------
    if (DN_0+Otstup*Point>=Ask && _OrderTicket_B_FATL7==0 && DN_0<UP_0) //  
    {
      Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1); //Расчитываем размер лота
      if(Lots<0.1) Lots=0.1;
      if (SL>0) { StopLoss=NormalizeDouble(Ask-SL*Point,Digits); } // Расчитываем стоп-лосс
      else { StopLoss=0.0; } // Если 0 то без стоп-лосса
      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeProfit,"FATL_7 Купили",MAGIC,0,CLR_NONE);
    }
    if (UP_0+Otstup*Point>=Ask && _OrderTicket_B_FATL7==0 && UP_0<DN_0) //  
    {
      Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1); //Расчитываем размер лота
      if(Lots<0.1) Lots=0.1;
      if (SL>0) { StopLoss=NormalizeDouble(Ask-SL*Point,Digits); } // Расчитываем стоп-лосс
      else { StopLoss=0.0; } // Если 0 то без стоп-лосса
      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,StopLoss,TakeProfit,"FATL_7 Купили",MAGIC,0,CLR_NONE);
    }
    //---- Выставляем SELL ордер -------------------------------------------------------------------------------------
    if (UP_0-Otstup*Point<=Bid && _OrderTicket_S_FATL7==0 && UP_0>DN_0) //
    {    
      Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1); //Расчитываем размер лота
      if(Lots<0.1) Lots=0.1;
      if (SL>0) { StopLoss=NormalizeDouble(Bid+SL*Point,Digits); } // Расчитываем стоп-лосс, 
      else { StopLoss=0.0; } // Если 0 то без стоп-лосса 
      TakeProfit=NormalizeDouble(DN_0+Otstup*Point,Digits);
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,StopLoss,TakeProfit,"FATL_7 Продали",MAGIC,0,CLR_NONE);
    }
    if (DN_0-Otstup*Point<=Bid && _OrderTicket_S_FATL7==0 && DN_0>UP_0) //
    {    
      Lots=NormalizeDouble(AccountFreeMargin()*Risk/1000.0,1); //Расчитываем размер лота
      if(Lots<0.1) Lots=0.1;
      if (SL>0) { StopLoss=NormalizeDouble(Bid+SL*Point,Digits); } // Расчитываем стоп-лосс, 
      else { StopLoss=0.0; } // Если 0 то без стоп-лосса 
      TakeProfit=NormalizeDouble(UP_0+Otstup*Point,Digits);
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,StopLoss,TakeProfit,"FATL_7 Продали",MAGIC,0,CLR_NONE);
    }
}

Впрочем по EURUSD канальная стратегия сливает и у этих ребят http://fxchannel.ru/demo.htm
 
Alfa писал (а):
Bookkeeper, а где новый индикатор? Забрал на доработку и не вернул! :)

Впрочем по EURUSD канальная стратегия сливает и у этих ребят http://fxchannel.ru/demo.htm
По той же ссылке. http://forexter.land.ru/Sewerager.htm
Запустить на М1 (HalfRange=13) и М15 (HalfRange=21). Торговаться на М15. При каналах дот - не входить. Пунктир - только удерживать (?). Начальные ТП очень короткие - от 5 до 10, СЛ от 12 до 18. Каналы умирают быстро :).
Но опять немножко устарела - как первый доп сигнал ввожу iAC() - по барам с номера 1 по 4 (т.е. с задержкой на 1 бар, без учета 0). Вход по iAC() - это стрелочки на рисунке выше.

//+------------+-----------------------------------------------------+
//| v.28.09.06 |                                     UpAndDownAC.mq4 |
//+------------+                 "Индикатор по теме by ExpertTrader" |
//|  эскизно   |                    Bookkeeper, yuzefovich@gmail.com |
//+------------+-----------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1  Green
#property indicator_color2  Red
//----
double      StartUp[];
double      StartDown[];
double      ArrAC[];
//----
int         prevBars=0, xBar;
double      Price1, Price2;
bool        SignalUp=false, SignalDown=false;
string      ThisName;
bool        First;
//---------------------------------------------------------------------
void deinit()
{
//  Comment("");
  return;
}
//----
int init()
{
int    draw_begin;
   draw_begin=10;
   IndicatorBuffers  (8);
   SetIndexBuffer    (0,StartUp);
   SetIndexStyle     (0,DRAW_ARROW);
   SetIndexArrow     (0,233);
   SetIndexBuffer    (1,StartDown);
   SetIndexStyle     (1,DRAW_ARROW);
   SetIndexArrow     (1,234);
   SetIndexBuffer    (2,ArrAC); 
   SetIndexStyle     (2,DRAW_NONE);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
   ThisName=Symbol()+"_M"+Period()+"_";
   First=true;
   return(0);
}
//---------------------------------------------------------------------
int start()
{
int limit,i;
int counted_bars=IndicatorCounted();
   if(counted_bars<0)  return(-1);
   limit=Bars-counted_bars;
   if(First==true)
   {
      limit=limit+4;
      for(i=0;i<5;i++,limit--) ArrAC[limit]=iAC(NULL,0,limit);
      First=false;
   }
   for(i=limit;i>=0;i--) MainCalculation(i);
   return(0);
}
//---------------------------------------------------------------------
void MainCalculation(int Shift)
{
int    Pos, i;
   Pos=Shift+1;
   ArrAC[Pos]=iAC(NULL,0,Pos);
   if(SignalUp==false) 
   {
   if( ArrAC[Pos]>0 &&
      ((ArrAC[Pos]>ArrAC[Pos+1] && ArrAC[Pos+1]>ArrAC[Pos+2]) ||
       (ArrAC[Pos]<ArrAC[Pos+1] && ArrAC[Pos+1]<ArrAC[Pos+2] && ArrAC[Pos+2]<ArrAC[Pos+3])
      ) 
     ) { StartUp[Shift]=Low[Shift]; SignalUp=true; SignalDown=false; }
   else StartUp[Shift]=0;
   }
   if(SignalDown==false) 
   {
   if( ArrAC[Pos]<0 &&
      ((ArrAC[Pos]<ArrAC[Pos+1] && ArrAC[Pos+1]<ArrAC[Pos+2]) ||
       (ArrAC[Pos]>ArrAC[Pos+1] && ArrAC[Pos+1]>ArrAC[Pos+2] && ArrAC[Pos+2]>ArrAC[Pos+3])
      ) 
     ) { StartDown[Shift]=High[Shift]; SignalDown=true; SignalUp=false; }
   else StartDown[Shift]=0;
   }
   return;
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//---------------------------------------------------------------------
Что то типа так.
 
Bookkeeper писал (а):
По той же ссылке. http://forexter.land.ru/Sewerager.htm

Bookkeeper, ну как, как протестировать твой индикатор. Ну сделай, что-нибудь пожалуйста, что-бы значения паралельных линий можно было брать в советник. Я для тебя привел пример индикатора, который рисует каналы и его значения можно взять в советник.
Мне в твоем ЗДОРОВЕННОМ индикаторе просто не разобраться, мои познания в программировании еще меньше.
Причина обращения: