← К каталогу
Исходный код · ID 1214

PriceHistgram_channel

price histogram channel .mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор PriceHistgram_channel рассчитывает и отображает аналитические уровни на основе гистограммы ценовых диапазонов в рамках платформы MetaTrader 5. Он строит уровни поддержки и сопротивления (R1, S1, R2, S2), а также верхний уровень TOP и три линии пиков на графике цен.

Расчёт основывается на данных внутридневного таймфрейма M5 с использованием весовой оценки объёмных данных. Индикатор определяет пиковые зоны гистограммы и вычисляет соответствующие ценовые уровни, которые обновляются при формировании новых часовых баров в заданное время.

Индикатор отрисовывает восемь буферов в окне графика: гистограммные уровни R1 и S1, центральный уровень TOP, дальние уровни R2 и S2, а также три линии пиков разной ширины и стиля. Уровни сохраняются между обновлениями, что обеспечивает непрерывность отображения.

Настройки программы

НастройкаОписание
Calculation Time(hour) (InpCalcTime) Время расчёта (час) — Час, используемый для расчёта (Calculation Time, час).
Histogram Period(day) (InpDayPeriod) Период гистограммы (день) — Период гистограммы в днях (Histogram Period, день).
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 8

#property indicator_type1 DRAW_HISTOGRAM
#property indicator_type2 DRAW_HISTOGRAM
#property indicator_type3 DRAW_LINE
#property indicator_type4 DRAW_LINE
#property indicator_type5 DRAW_LINE
#property indicator_type6 DRAW_LINE
#property indicator_type7 DRAW_LINE
#property indicator_type8 DRAW_LINE

#property indicator_color1 YellowGreen
#property indicator_color2 YellowGreen
#property indicator_color3 Red
#property indicator_color4 Green
#property indicator_color5 Green
#property indicator_color6 DodgerBlue
#property indicator_color7 DodgerBlue
#property indicator_color8 DodgerBlue

#property indicator_label1 "R1"
#property indicator_label2 "S1"
#property indicator_label3 "Top"
#property indicator_label4 "R2"
#property indicator_label5 "S2"

#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 1
#property indicator_width5 1
#property indicator_width6 2
#property indicator_width7 2
#property indicator_width8 2

#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_SOLID
#property indicator_style4 STYLE_DASH
#property indicator_style5 STYLE_DASH
#property indicator_style6 STYLE_SOLID
#property indicator_style7 STYLE_SOLID
#property indicator_style8 STYLE_SOLID

input  int InpCalcTime = 4;    // Calculation Time(hour)
input  int InpDayPeriod = 3;   // Histogram Period(day)

int BinRangeScale=2;
double InpBinRange=5;
double LtBinRange=InpBinRange*BinRangeScale;

int d1_period=24*12;   // for 5min
int st_period=InpDayPeriod*24*12;   // for 5min
int min_rates_total;

double TOPBuffer[];
double R1Buffer[];
double S1Buffer[];
double R2Buffer[];
double S2Buffer[];
double Peak1Buffer[];
double Peak2Buffer[];
double Peak3Buffer[];

int OnInit()
  {
      // код доступен только после оплаты
   }

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[])
  {
      // код доступен только после оплаты
   }

   int i,first;

   if(rates_total<=min_rates_total)
      return(0);

   ArraySetAsSeries(TOPBuffer,false);
   ArraySetAsSeries(R1Buffer,false);
   ArraySetAsSeries(S1Buffer,false);
   ArraySetAsSeries(R2Buffer,false);
   ArraySetAsSeries(S2Buffer,false);
   ArraySetAsSeries(Peak1Buffer,false);
   ArraySetAsSeries(Peak2Buffer,false);
   ArraySetAsSeries(Peak3Buffer,false);

   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);

   first=min_rates_total-1;
   if(first+1<prev_calculated) first=prev_calculated-2;

   for(i=first; i<rates_total && !IsStopped(); i++)
     {
      bool is_update=false;
      MqlDateTime tm0,tm1;
      TimeToStruct(time[i],tm0);
      TimeToStruct(time[i-1],tm1);
      if(tm1.hour!=tm0.hour && tm0.hour==InpCalcTime)
        {
         int j;
         int  m5peaks[];
         int  m5hist[];
         int offset,limit;
         bool ok=generate_histgram(offset,limit,m5peaks,m5hist,time[i]);
         if(ok)
           {
            int m5peak_cnt=ArraySize(m5peaks);
            if(m5peak_cnt>0)
              {
               double up,dn;

               TOPBuffer[i]=(offset+m5peaks[0]*InpBinRange+InpBinRange/2)*_Point;

               calc_range(dn,up,m5hist,m5peaks[0],offset,InpBinRange,0.9);
               S2Buffer[i]=dn;
               R2Buffer[i]=up;

               calc_range(dn,up,m5hist,m5peaks[0],offset,InpBinRange,0.6);
               S1Buffer[i]=dn;
               R1Buffer[i]=up;

               Peak1Buffer[i-1] = EMPTY_VALUE;
               Peak2Buffer[

Показано первые 50% кода (символов: 6893)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
689,30₽ ≈ $8.42