Author: Copyright � 2012, Ivan Kornilov
2 Views
0 Downloads
0 Favorites
SimpleBars
//+------------------------------------------------------------------+
//|                                                   SimpleBars.mq5 |
//|                                  Copyright © 2012, Ivan Kornilov |
//|                                                 excelf@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Ivan Kornilov"
#property link "excelf@gmail.com"
#property description "SimpleBars"
//--- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà               |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî ïÿòü áóôåðîâ
#property indicator_buffers 5
//--- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//--- â êà÷åñòâå èíäèêàòîðà èñïîëüçîâàíû öâåòíûå ñâå÷è
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrSeaGreen,clrRed
//--- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "Upper;lower"
//+----------------------------------------------+
#define SIGNAL_NONE        0  //Ïóñòîé ñèãíàë
#define SIGNAL_BUY         1  //Ñèãíàë íà ïîêóïêó 
#define SIGNAL_SELL       -1  //Ñèãíàë íà ïðîäàæó 
#define SIGNAL_TRADE_ALLOW 3  //Ñèãíàë ðàçðåøàþùèé òîðãîâëþ
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                 |
//+----------------------------------------------+
input int period=6;
input bool useclose=true;
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò
//--- â äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtopenBuffer[];
double ExthighBuffer[];
double ExtlowBuffer[];
double ExtcloseBuffer[];
double ExtColorBuffer[];
//---
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- èíèöèàëèçàöèÿ ãëîáàëüíûõ ïåðåìåííûõ 
   min_rates_total=int(period)+1;
//--- ïðåâðàùåíèå äèíàìè÷åñêèõ ìàññèâîâ â èíäèêàòîðíûå áóôåðû
   SetIndexBuffer(0,ExtopenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExthighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtlowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ExtcloseBuffer,INDICATOR_DATA);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â öâåòîâîé, èíäåêñíûé áóôåð   
   SetIndexBuffer(4,ExtColorBuffer,INDICATOR_COLOR_INDEX);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
   PlotIndexSetInteger(4,PLOT_DRAW_BEGIN,min_rates_total);
//--- óñòàíîâêà ôîðìàòà òî÷íîñòè îòîáðàæåíèÿ èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- èìÿ äëÿ îêîí äàííûõ è ìåòêà äëÿ ïîäîêîí 
   string short_name="SimpleBars";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//---   
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   if(rates_total<min_rates_total) return(0);
//--- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   int first,bar,trend;
   static int prev_trend;
   double buyPrice,sellPrice;
//--- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
     {
      first=min_rates_total; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
      prev_trend=SIGNAL_NONE;
     }
   else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      if(useclose)
        {
         buyPrice=close[bar];
         sellPrice=close[bar];
        }
      else
        {
         buyPrice=low[bar];
         sellPrice=high[bar];
        }
        
      if(prev_trend==SIGNAL_NONE)
        {
         if(close[bar]>open[bar]) trend=SIGNAL_BUY;
         else trend=SIGNAL_SELL;
        }
      else
        {
         if(prev_trend==SIGNAL_BUY)
           {
            if(buyPrice>low[bar-1]) trend=SIGNAL_BUY;
            else
              {
               for(int j=2; j<=int(period); j++)
                 {
                  if(buyPrice>low[bar-j])
                    {
                     trend=SIGNAL_BUY;
                     break;
                    }
                  else trend=SIGNAL_SELL;
                 }
              }
           }
           
         if(prev_trend==SIGNAL_SELL)
           {
            if(sellPrice<high[bar-1]) trend=SIGNAL_SELL;
            else
              {
               for(int j=2; j<=int(period); j++)
                 {
                  if(sellPrice<high[bar-j])
                    {
                     trend=SIGNAL_SELL;
                     break;
                    }
                  else trend=SIGNAL_BUY;
                 }
              }
           }
        }
      //--- ðàñêðàøèâàíèå ñâå÷åé
      if(trend==SIGNAL_SELL) ExtColorBuffer[bar]=1.0;
      if(trend==SIGNAL_BUY) ExtColorBuffer[bar]=0.0;
      
      ExtopenBuffer[bar]=open[bar];
      ExtcloseBuffer[bar]=close[bar];
      ExthighBuffer[bar]=high[bar];
      ExtlowBuffer[bar]=low[bar];
      
      if(bar<rates_total-1) prev_trend=trend;
     }
//---     
   return(rates_total);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---