Индикаторы: Свечной анализ

 

Свечной анализ:

новая версия индикатора

Author: Vladimir Khlystov

 
На сколько сигнал открытия сделки запаздывает ?
 
Предложение разделить в настройках отображение фигур.
 
Он перерисовывается..
 
Вопрос к автору, а можно избавиться от перерисовки ?
 
BeerGod:
На сколько сигнал открытия сделки запаздывает ?

анализ происходит при закрытии свечи, получается, что на 1 свечу идет запаздывание.
 
BeerGod:
Вопрос к автору, а можно избавиться от перерисовки ?


А где он перерисовывается? Можно увидеть это на скринах?

Для оперативности отправьте картинки сюда:

email: cmillion@narod.ru
Skype: mqlcmillion

 

Предлагаю сделать опцию - краткое именование свечного сигнала - чтобы названия не накладываличись. А в лог писать полное название и силу сигнала.

//+------------------------------------------------------------------+
//|                                                FiguresCandle.mq4 |
//|                               Copyright © 2012, Vladivir Hlystov |
//|                                         http://cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Vladivir Hlystov"
#property link      "http://cmillion@narod.ru"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
extern bool  AlertON    = true;
extern color colorBulls = Blue;
extern color colorBears = Red;
extern bool  DrawCandle = true;
extern bool ShortNames = true;
double BufferUP[],P;
double BufferDN[];
int candle[],Timei;
color Color;
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(0,236);
   SetIndexArrow(1,238);
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   SetIndexLabel(0,"UP");
   SetIndexLabel(1,"DOWN");
   SetIndexEmptyValue(0,0.0);
   IndicatorShortName("FiguresCandle");
   return(0);
  }
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectsDeleteAll(0,OBJ_TREND);
   ObjectsDeleteAll(0,OBJ_TEXT);
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   int limit=Bars-IndicatorCounted();
   string NameFigur;
   for(int i=1; i<limit; i++)
   {
      bool up=false,down=false;
      double MA0 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i);
      double MA1 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i);
      double MA2 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i+1);
      double MA3 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i+2);
      
           if (MA0>MA1 && MA1>MA2 && MA2>MA3) up=true;
           else up=false;
           if (MA0<MA1 && MA1<MA2 && MA2<MA3) down=true;
           else down=false;
           //---
           NameFigur="";
           if (Close[i]>Close[i+1] && Close[i]>Open[i+1])
           {
         if (down && Open[i+1]>Close[i+1] && Open[i]>Close[i+1] && Close[i]<Open[i+1] && Close[i]>Open[i])
              {
            if (ShortNames==true) NameFigur="BuH"; else  NameFigur="BullHarami";
            Print("BullHarami");
            
            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);
         }
         if (Open[i+1]>Close[i+1] && Open[i]>Close[i+1] && Open[i]<Open[i+1] && Close[i]>Open[i+1])
         {
            if (ShortNames==true) NameFigur="BuC"; else  NameFigur="BullCross";
            Print("BullCross");
            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);
         }
         if (Close[i+1]<Open[i+1] && Open[i]<Close[i+1] && Close[i]>Open[i+1]) 
         {
            if (ShortNames==true) NameFigur="BuE"; else NameFigur="Bullish Engulfing";
            Print("Bullish Engulfing");
                           if (Close[i+1]<Open[i+1] && Close[i]>Open[i] && Open[i]<Close[i+1] && Close[i]>Close[i+1]+((Open[i+1]-Close[i+1])/2))
                           { 
            if (ShortNames==true) NameFigur="BuP"; else  NameFigur="BullPierce";
            Print("BullPierce");
            }
            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);
         }
         if (Close[i+2]<Open[i+2] && Open[i+1]<Close[i+2] && Close[i+1]<Close[i+2] && Open[i]>Close[i+1] && Open[i]>Open[i+1] && Close[i]>=Close[i+2])
         {
            if (ShortNames==true) NameFigur="MS"; else  NameFigur="Morning Star";
            Print("Morning Star");
            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur); Redraw(i+2,colorBulls,NameFigur);
         }
      }
      if (Open[i]-Low[i]>MathMax(High[i]-Close[i],Close[i]-Open[i])*3 && Close[i]-Low[i]>MathMax(High[i]-Close[i],Close[i]-Open[i])*3)
      {
         if (ShortNames==true) NameFigur="Ha"; else  NameFigur="Hammer";
         Print("Hammer");
         if (up) {Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);}
         if (down) {Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);}
      }
      ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè ///// ìåäâåäè
      if (Close[i]<Close[i+1] && Close[i]<Open[i+1])
      {
         if (up && Open[i+1]<Close[i+1] && Open[i]<Close[i+1] && Close[i]>Open[i+1] && Close[i]<Open[i])
         {
            if (ShortNames==true) NameFigur="BeH"; else NameFigur="BearHarami";
            Print("BearHarami");
            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);
         }
         if (Open[i+1]<Close[i+1] && Open[i]<Close[i+1] && Open[i]>Open[i+1] && Close[i]<Open[i+1])
         {
            if (ShortNames==true) NameFigur="BeC"; else  NameFigur="BearCross";
            Print("BearCross");
            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);
         }
         if (Close[i+1]>Open[i+1] && Close[i]<Open[i] && Open[i]>Close[i+1] && Close[i]<Open[i+1])
         {
            if (ShortNames==true) NameFigur="BeE"; else  NameFigur="BearEngulf";
            Print("BearEngulf");
            if (Close[i+1]>Open[i+1] && Open[i]>Close[i+1] && Close[i]<Close[i+1]-((Close[i+1]-Open[i+1])/2))
            {
               if (ShortNames==true) NameFigur="DC"; else  NameFigur="DarkCloud";
               Print("DarkCloud");
            }
            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);
         }
         if (Close[i+2]>Open[i+2] && Open[i+1]>Close[i+2] && Close[i+1]>Close[i+2] && Open[i]<Close[i+1] && Open[i]<Open[i+1] && Close[i]<Close[i+2])
         {
            if (ShortNames==true) NameFigur="ES"; else  NameFigur="EveningStar";
            Print("EveningStar");
            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur); Redraw(i+2,colorBears,NameFigur);
         }
         if (up && High[i]-Open[i]>MathMax(Close[i]-Low[i],Open[i]-Close[i])*3 && High[i]-Close[i]>MathMax(Close[i]-Low[i],Open[i]-Close[i])*3) 
         {
            if (ShortNames==true) NameFigur="Sh"; else  NameFigur="Shooter";
            Print("Shooter");
            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);
         }
      }
      if (NameFigur!="") 
      {
         double DELTA = (MathMax(High[i],High[i+1])-MathMin(Low[i],Low[i+1]))/2;
         if (Color==colorBears) {BufferDN[i]=MathMax(High[i],High[i+1]);P=BufferDN[i]+DELTA;}
         else {BufferUP[i]=MathMin(Low[i],Low[i+1]);P=BufferUP[i]-DELTA;}
         DrawTEXT(StringConcatenate(NameFigur," ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)),NameFigur, Color, Time[i+1], P);
      }
   }
   if (Timei!=Time[0]&&AlertON&&i==0&&NameFigur!="") {Alert(Symbol()+" FiguresCandle = "+NameFigur);Timei=Time[0];}
   return(0);
}
//-------------------------------------------------------------------
int Redraw(int i,color col,string name)
{
   Color=col;
   if (!DrawCandle) return;
   name = StringConcatenate(name," ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
   ObjectCreate(name, OBJ_TREND, 0,Time[i],High[i],Time[i],Low[i]);
   ObjectSet   (name, OBJPROP_COLOR, col);
   ObjectSet   (name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (name, OBJPROP_BACK,  false);    
   ObjectSet   (name, OBJPROP_RAY,   false);
   ObjectSet   (name, OBJPROP_WIDTH, 2);
   name=StringConcatenate(name," o");
   ObjectCreate(name, OBJ_TREND, 0,Time[i],Open[i],Time[i],Open[i]);
   ObjectSet   (name, OBJPROP_COLOR, col);
   ObjectSet   (name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (name, OBJPROP_BACK,  false);    
   ObjectSet   (name, OBJPROP_RAY,   false);
   ObjectSet   (name, OBJPROP_WIDTH, 2);
   name=StringConcatenate(name," c");
   ObjectCreate(name, OBJ_TREND, 0,Time[i],Close[i],Time[i]+Period()*60,Close[i]);
   ObjectSet   (name, OBJPROP_COLOR, col);
   ObjectSet   (name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (name, OBJPROP_BACK,  false);    
   ObjectSet   (name, OBJPROP_RAY,   false);
   ObjectSet   (name, OBJPROP_WIDTH, 2);
}
//-------------------------------------------------------------------
int DrawTEXT(string NT, string Name, color col, datetime t1, double p1)
{
   ObjectDelete (NT);
   ObjectCreate (NT, OBJ_TEXT,0,t1,p1,0,0,0,0);
   ObjectSet    (NT, OBJPROP_COLOR, col);
   ObjectSetText(NT, Name ,10,"Arial");
}
//--------------------------------------------------------------------
 

Автор кодит неустанно. Молодец!

Хочу спросить не приходилось ли уже, и, если нет, нет ли желания сделать одну очень простенькую вещь - подсвечивать свечу в которой длина пути цены (исходя из меньшего ТФ) больше чем в обычной. То есть цена прошла путь не OHLC для медвежей, а OLHC. Таких свечей не много, было бы любопытно посмотреть где они таки есть.

 
shi:

Автор кодит неустанно. Молодец!

Хочу спросить не приходилось ли уже, и, если нет, нет ли желания сделать одну очень простенькую вещь - подсвечивать свечу в которой длина пути цены (исходя из меньшего ТФ) больше чем в обычной. То есть цена прошла путь не OHLC для медвежей, а OLHC. Таких свечей не много, было бы любопытно посмотреть где они таки есть.


Написать такой не сложно, но это отдельная тема.

Создавать ее здесь не вижу смысла, могу написать в ветке моих бесплатных индикаторов.

Разместите здесь Вашу просьбу : indikatori-ot-cmillion

 
Владимир. Решил написать Вам по поводу этого индикатора по свечному анализу свое предложение. В приложении посылаю Вам информацию по свечному анализу разворота цены. Свечной анализ предсказывает разворот цены, т.е он не запаздывает на 1 свечу, как у Вас, а предсказывает на 1 свечу вперед. Если бы Вы смогли написать индикатор предсказывающий движение цены по свечным моделям, думаю это было бы шагом вперед. К сожалению, свечных моделей маловато получается, но главное начать.