Японские свечи- хороший индикатор - страница 3

 
Еще один вариант этого индикатора - более экономично пользуется памятью, не все бары обсчитывает, а только сколько нужно - это его на Viacе поправили


Вот тупой перевод в МТ4, вроде с логикой все в порядке, а вот что оно должно рисовать проверить не могу.
[/code]

Я бы еще вставил :
int deinit()
  {
//---- 
  ObjectsDeleteAll(0); 
//----
   return(0);
  }


Иначе опухнешь стрелочки и текст удалять.

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

Я бы еще вставил :
int deinit()
  {
//---- 
  ObjectsDeleteAll(0); 
//----
   return(0);
  }


Иначе опухнешь стрелочки и текст удалять.



Да я потом подправил у себя, только лучше
ObjectsDeleteAll(0,OBJ_TEXT);
ObjectsDeleteAll(0,OBJ_ARROW);


А то он грохнет все объекты, а так хоть часть (по типу) которые пользует сам.

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

Да не за что. Мне самому интересно было, что получится. На вскидку мне не очень поможет, хотя надо дольше анализировать, чем "на вскидку". :-)
 

Я бы еще вставил :
int deinit()
  {
//---- 
  ObjectsDeleteAll(0); 
//----
   return(0);
  }


Иначе опухнешь стрелочки и текст удалять.



Да я потом подправил у себя, только лучше
ObjectsDeleteAll(0,OBJ_TEXT);
ObjectsDeleteAll(0,OBJ_ARROW);


Я то он грохнет все объекты, а так хоть часть (по типу) которые пользует сам.


Да, ты прав, поставил где нет ни одного обьекта, и не подумавши написал.
 
Ну раз обещал, хотя теперь вроде и не треба, но все равно (несмотря на то что представлены ни все модели) выкладываю свое видение конфигураций, может кто сочтет мой подход рациональным (сам пока потребности не испытываю потому работу прекратил)
//+------------------------------------------------------------------+
//|                                                  CandleStick.mq4 |
//|                                        Copyright © 2005, Profi_R |
//|                                               rvm_fam fromru  com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Profi_R"
#property link      "rvm_fam fromru  com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Black
#property indicator_color2 Black
//---- input parameters
extern int Range=50;
extern int zv_amp=50;
extern int dj_body=20;
//---- buffers
double Up[]; //здесь будем писать стрелки для сигналов вниз
double Dn[]; //здесь будем писать стрелки для сигналов вверх
double MAmp[]; //здесь будем держать среднее значение амплитуды
double Character[]; //здесь будем держать характер свечи
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexBuffer(0,Up);
   SetIndexBuffer(1,Dn);
   SetIndexBuffer(2,MAmp);
   SetIndexBuffer(3,Character);
   SetIndexArrow(0,242);
   SetIndexArrow(1,241);
   SetIndexDrawBegin(0,Range+1);
   SetIndexDrawBegin(1,Range+1);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   ObjectsDeleteAll(0,OBJ_TEXT);
   ObjectsDeleteAll(0,OBJ_ARROW);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),cb;
   double amp_lim,body_lim;
//---- 
   for(cb=Bars-1-counted_bars;cb>=0;cb--)
   {
      Amplitude_calc(cb); //получаем значение средней амплитуды для текущей свечи
      //вычисляем значение для определения звезд и дожи
      amp_lim=NormalizeDouble(MAmp[cb]*zv_amp/100,4);
      body_lim=NormalizeDouble((High[cb]-Low[cb])*dj_body/100,4);
      //если амплитуда менее или равна zv_amp% средней амплитуды
      if(High[cb]-Low[cb]<=amp_lim)
      {
         if(MathAbs(Open[cb]-Close[cb])<=body_lim)
         {
            Character[cb]=2; //дожи
         }
         else
         {
            Character[cb]=1; //звезда
         }
      }
      else
      {
         if(MathAbs(Open[cb]-Close[cb])<=body_lim)
         {
            Character[cb]=2; //дожи
         }
         else
         {
            Character[cb]=0; //обычная свеча
         }
      }
//-------- далее идет определение свечных конфигураций
//молот и повешенный верхняя тень не более dj_body% амплитуды, нижняя тень в два раза больше тела
      if(High[cb+2]-MathMax(Open[cb+2],Close[cb+2])<NormalizeDouble((High[cb+2]-Low[cb+2])*dj_body/100,4)&&
         MathAbs(Open[cb+2]-Close[cb+2])*2<MathMin(Open[cb+2],Close[cb+2])-Low[cb+2])
      {
         if(High[cb+2]==High[Highest(NULL,0,MODE_HIGH,6,cb+1)])
         {
            //выводим текст на чарт
            ObjectCreate("hanging "+(cb+2),OBJ_TEXT,0,Time[cb+2],High[cb+1]+10*Point);
            ObjectSetText("hanging "+(cb+2),"повешенный",9,"Times New Roman",Yellow);
            //повешенный на вершине, ставим стрелку вниз
            Up[cb]=High[cb]+10*Point;
         }
         if(Low[cb+2]==Low[Lowest(NULL,0,MODE_LOW,6,cb+1)])
         {
            //выводим текст на чарт
            ObjectCreate("hammer "+(cb+2),OBJ_TEXT,0,Time[cb+2],Low[cb+1]-10*Point);
            ObjectSetText("hammer "+(cb+2),"молот",9,"Times New Roman",Yellow);
            //молот внизу, ставим стрелку вверх
            Dn[cb]=Low[cb]-10*Point;
         }
      }
//высокая волна - три и большее количество дожи с длинными тенями
      if(Character[cb]==2&&High[cb]-Low[cb]>amp_lim&&
         Character[cb+1]==2&&High[cb+1]-Low[cb+1]>NormalizeDouble(MAmp[cb+1]*zv_amp/100,4)&&
         Character[cb+2]==2&&High[cb+2]-Low[cb+2]>NormalizeDouble(MAmp[cb+2]*zv_amp/100,4))
      {
         if(High[cb]==High[Highest(NULL,0,MODE_HIGH,7,cb)]||
            High[cb+1]==High[Highest(NULL,0,MODE_HIGH,7,cb)]||
            High[cb+2]==High[Highest(NULL,0,MODE_HIGH,7,cb)])
         {
            //выводим текст на чарт
            ObjectCreate("high wave "+cb,OBJ_TEXT,0,Time[cb],High[cb]+10*Point);
            ObjectSetText("high wave "+cb,"высокие волны",9,"Times New Roman",Yellow);
            //высокие волны наверху - разворот вниз
            Up[cb]=High[cb]+10*Point;
         }
         if(Low[cb]==Low[Lowest(NULL,0,MODE_LOW,7,cb)]||
            Low[cb+1]==Low[Lowest(NULL,0,MODE_LOW,7,cb)]||
            Low[cb+2]==Low[Lowest(NULL,0,MODE_LOW,7,cb)])
         {
            //выводим текст на чарт
            ObjectCreate("high wave "+cb,OBJ_TEXT,0,Time[cb],Low[cb]-10*Point);
            ObjectSetText("high wave "+cb,"высокие волны",9,"Times New Roman",Yellow);
            //высокие волны внизу - разворот вверх
            Dn[cb]=Low[cb]-10*Point;
         }
      }
//падающая звезда
      if(Character[cb]==2 && MathMin(Open[cb],Close[cb])-Low[cb]<body_lim &&
         High[cb]-MathMax(Open[cb],Close[cb])>MathAbs(Open[cb]-Close[cb])*2 &&
         High[cb]==High[Highest(NULL,0,MODE_HIGH,4,cb)])
      {
         //выводим текст на чарт
         ObjectCreate("shooting star "+cb,OBJ_TEXT,0,Time[cb],High[cb]+10*Point);
         ObjectSetText("shooting star "+cb,"падающая звезда",9,"Times New Roman",Yellow);
         //падающая звезда - разворот вниз
         Up[cb]=High[cb]+10*Point;
      }
//Толчок
      if(Character[cb]==0 && Character[cb+1]==0)
      {
         if(Close[cb]>Open[cb] && Close[cb+1]<Open[cb+1] && Close[cb]<High[cb+1]-(High[cb+1]-Low[cb+1])/2)
         {
            //выводим текст на чарт
            ObjectCreate("thrusting fine "+cb,OBJ_TEXT,0,Time[cb],High[cb]+10*Point);
            ObjectSetText("thrusting fine "+cb,"толчок",9,"Times New Roman",Yellow);
            //толчок - продолжение тенденции вниз
            Up[cb]=High[cb]+10*Point;
         }
         if(Close[cb]<Open[cb] && Close[cb+1]>Open[cb+1] && Close[cb]>Low[cb+1]+(High[cb+1]-Low[cb+1])/2)
         {
            //выводим текст на чарт
            ObjectCreate("thrusting fine "+cb,OBJ_TEXT,0,Time[cb],Low[cb]-10*Point);
            ObjectSetText("thrusting fine "+cb,"толчок",9,"Times New Roman",Yellow);
            //толчок - продолжение тенденции вверх
            Dn[cb]=Low[cb]-10*Point;
         }
      }
//Брошенный младенец
      
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
void Amplitude_calc(int cb)
  {
//----
   int i,S_Ampl=0;
   for(i=cb+1;i<cb+Range;i++)
   {
      //накапливаем сумму всех амплитуд
      S_Ampl=S_Ampl+(High[i]-Low[i]);
      //записываем значения в буферы индикатора
      MAmp[cb]=NormalizeDouble(S_Ampl/Range,4);
   }
//----
   return(0);
  }
 
почему это ни кому не нужно - очень нужно
спасибо Profi_R - интересный подход!!!!!!
 
Может я ступил где...
(вариант "поправленный, для МТ3)
Установил индикатор и такая бяка:
- Не удаляются надписи после удаления индикатора.
- Пропадают граф. обьекты, например гор. линии при переходе на другой тайм-фрейм.
 
2Kombat
а выше написано про добавление кода в деинит, он и очистит

2hell
да вроде не за что, перевод твоего кода я не сделал, а в моем индикаторе нужно иметь ввиду следующее
параметры : 1. период на котором рассчитывается средняя амплитуда
2. размер амплитуды в % от средней амплитуды для определения звезд и дожи
3. размер тела в % от текущей амплитуды для определения дожи

сделал так потому что везде упомянаются такие определения как "большая тень", "больше в два три раза" и подобно этому а вот точно нет спецификаций и поэтому каждый делает так как он считает. В принципе код есть и его можно дополнять другими конфигурациями по образцу
 
Немогу понять причину - оба варианта ничего не показывают в MT4 (177)