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

DarvasBoxes

darvasboxes nmc.mq5

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4, реализующий концепцию Дарвасовских коробок (Darvas Boxes). Индикатор рассчитывает опорные уровни — верхние и нижние пивоты — на основе configurable силы пивота и периода оценки, после чего строит ценовые коробки вокруг этих уровней. Поддерживается шесть режимов работы Дарваса: классический, современный и би-направленные варианты.

Индикатор отображает коробки на графике в виде линий тренда с различной цветовой кодировкой для нейтрального, восходящего и нисходящего трендов. Помимо основных коробок, доступны режимы каналов, маркеры пивотов в виде стрелок, сигнальные стрелки при пробое уровней и полупрозрачные «призрачные» коробки, показывающие предполагаемые границы.

Внутренняя логика использует шесть буферов для хранения верхних и нижних границ коробок, значений пивотов и сигналов. Отрисовка коробок выполняется через создание объектов-линий тренда на графике с уникальными именами, управляемыми параметром идентификатора.

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

НастройкаОписание
UniqueName UniqueName — Уникальный префикс имён для объектов индикатора на графике
Darvas Modes (See table above) (DarvasMode) DarvasMode — Режим расчёта Дарваса: 0-Классический, 1-Современный, 2-Би-направленный классический, 3-Би-направленный современный, 4-Классический по первому пивоту, 5-Современный по первому пивоту
Pivot Strength in bars (PivotStrength) PivotStrength — Сила пивота в барах, определяющая минимальное расстояние между опорными уровнями
Rolling period of evaluation(Classic-12 months,Modern-6 months or less) (RollingPeriod) RollingPeriod — Период оценки для верификации пивотов (Classic-12 месяцев, Modern-6 месяцев или менее)
NeutralColor NeutralColor — Цвет отображения коробок в нейтральном состоянии
UpTrendColor UpTrendColor — Цвет отображения коробок в восходящем тренде
DnTrendColor DnTrendColor — Цвет отображения коробок в нисходящем тренде
BoxWidth BoxWidth — Толщина линий коробок на графике
0-off,1-on (BoxesMode) BoxesMode — Включение или отключение отображения коробок (0-выкл, 1-вкл)
0-off,1-on (ChannelMode) ChannelMode — Включение или отключение отображения канала (0-выкл, 1-вкл)
0-off,1-on (PivotsMode) PivotsMode — Включение или отключение отображения маркеров пивотов (0-выкл, 1-вкл)
0-off,1-on (GhostBoxesMode) GhostBoxesMode — Включение или отключение призрачных коробок (0-выкл, 1-вкл)
0-off,1-on (SignalMode) SignalMode — Включение или отключение сигнальных стрелок (0-выкл, 1-вкл)
Получить полный код

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

#include <stdlib.mqh>

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 RoyalBlue
#property indicator_color2 Tomato
#property indicator_color3 RoyalBlue
#property indicator_color4 Tomato
#property indicator_color5 RoyalBlue
#property indicator_color6 Tomato

#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 2
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width6 2

extern string  UniqueName           =     "D_Box";
extern int     DarvasMode           =           3;    //Darvas Modes (See table above) 
extern int     PivotStrength        =           3;    //Pivot Strength in bars
extern int     RollingPeriod        =           1;    //Rolling period of evaluation(Classic-12 months,Modern-6 months or less) 
extern color   NeutralColor         =      Silver;
extern color   UpTrendColor         =  DodgerBlue;
extern color   DnTrendColor         =       Coral;
extern int     BoxWidth             =           2; 
extern int     BoxesMode            =           1;    //0-off,1-on
extern int     ChannelMode          =           0;    //0-off,1-on
extern int     PivotsMode           =           1;    //0-off,1-on
extern int     GhostBoxesMode       =           0;    //0-off,1-on
extern int     SignalMode           =           1;    //0-off,1-on

double topBox[];
double botBox[];
double pivotHi[];
double pivotLo[];
double upSignal[];
double dnSignal[];
double trend[];

double HiArray[],LoArray[], boxTop[2], boxBottom[2], ghostHeight[2], ghostTop[2], ghostBottom[2], hiPrice[2], loPrice[2];
int    Length, startState[2], confirmState[2], prevState;
string short_name, IndicatorName, name;
datetime prevtime, startTime[2], endTime[2], ghostTime[2], prevTime, confTime, prevGhostTime;

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

int deinit()
  {

   deleteObj(UniqueName);

   return(0);
  }

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

void _DarvasBoxes(int limit,int counted_bars)
{

   for(int shift=limit;shift>=0;shift--) 
   {	
      if(prevtime != Time[shift]) 
      {
      startState[1]   = startState[0]; 
      confirmState[1] = confirmState[0]; 
      boxTop[1]       = boxTop[0];
      boxBottom[1]    = boxBottom[0];
      startTime[1]    = startTime[0];
      endTime[1]      = endTime[0];
      ghostHeight[1]  = ghostHeight[0];
      ghostTime[1]    = ghostTime[0];  
      ghostTop[1]     = ghostTop[0];
      ghostBottom[1]  = ghostBottom[0];
      hiPrice[1]      = hiPrice[0];
      loPrice[1]      = loPrice[0];
      prevtime        = Time[shift];
      } 

      for(int j = 0; j < Length; j++)
	   { 
      HiArray[j] = iMA(NULL,0,1,0,0,PRICE_HIGH,shift+j);
      LoArray[j] = iMA(NULL,0,1,0,0,PRICE_LOW,shift+j);
      } 

	double hiBoxPrice = High[shift];       
	double loBoxPrice = Low [shift];

	if(DarvasMode == 0 || DarvasMode == 2 || DarvasMode == 4) {hiPrice[0] = High[shift]; loPrice[0] = Low[shift];}
	else {hiPrice[0] = Close[shift]; loPrice[0] = Close[shift];}   

	trend[shift]  = trend[shift+1];
	botBox[shift] = botBox[shift+1];			
	topBox[shift] = topBox[shift+1];

	double upPivot = DarvasPivot(HiArray,0,PivotStrength);
	double loPivot = DarvasPivot(LoArray,1,PivotStrength);

      if(PivotsMode > 0)
	   {
	   pivotHi[shift+PivotStrength] = EMPTY_VALUE;
	   pivotLo[shift+PivotStrength] = EMPTY_VALUE;

      if(upPivot > 0) pivotHi[shift+PivotStrength] = upPivot;  
	   if(loPivot > 0) pivotLo[shift+PivotStrength] = loPivot;    
      }

	startState[0]   = startState[1]; 
   confirmState[0] = confirmState[1];
	boxTop[0]       = boxTop[1];
	boxBottom[0]    = boxBottom[1];
	startTime[0]    = startTime[1];
   endTime[0]      = endTime[1]; 
   ghostHeight[0]  = ghostHeight[1];
   ghostTime[0]    = ghostTime[1];  
   ghostTop[0]     = ghostTop[1];
   ghostBottom[0]  = ghostBottom[1];

      if(startState[0] == 0) 
      {
      bool allPivotVerify = false; 

      bool upPivotVerify = upPivot > 0 && shift+PivotStrength == iHighest(NULL,0,MODE_HIGH,RollingPeriod,shift+PivotStrength);    
      bool loPivotVerify = loPivot > 0 && shift+PivotStrength == iLowest (NULL,0,MODE_LOW ,RollingPeriod,shift+PivotStrength); 

      if(DarvasMode < 2) allPivotVerify = upPivotVerify;
      else
      if(DarvasMode < 4) {if(trend[shift] > 0) allPivotVerify = upPivotVerify; else allPivotVerify = loPivotVerify;}
      else allPivotVerify = upPivotVerify || loPivotVerify;

         if(allPivotVerify)
         {
         startTime[0] = Time[shift+PivotStrength];   
            if(startTime[0] >= endTime[0])
            {
               if(DarvasMode < 2) {boxTop[0] = upPivot; startState[0] = 1;}
               else
               if(DarvasMode < 4) 
               {
               startState[0] = 1; 
               if(trend[shift] > 0) boxTop[0] = upPivot; else boxBottom[0] = loPivot;
               }
               else
               {  
               if(upPivotVerify ||(upPivotVerify && loPivotVerify)) {boxTop[0] = upPivot; startState[0] = 1;}
               else {boxBottom[0] = loPivot; startState[0] =-1;}
	            }  

            prevTime      = startTime[0];
            prevState     = startState[0];
            }
         } 
      }

      if(startState[0] != 0 && confirmState[0] == 0)
      {      
         if(DarvasMode < 2)
         {
            if(upPivot > boxTop[0] || hiBoxPrice > boxTop[0]) {startState[0] = 0; startTime[0] = 0;} 
            else
            if(loPivot > 0 && Time[shift] > startTime[0]) {confirmState[0] = 1; boxBottom[0] = loPivot; confTime = Time[shift];}
         }
         else
         if(DarvasMode < 4)
         {

            if(trend[shift] > 0 && (upPivot > boxTop[0] || hiBoxPrice > boxTop[0])) {startState[0] = 0; startTime[0] = 0;} 
            else 
            if(trend[shift] < 0 && ((loPivot > 0 && loPivot < boxBottom[0]) || loBoxPrice < boxBottom[0])) {startState[0] = 0; startTime[0] = 0; } 
            else
            if(Time[shift] > startTime[0])
            {
               if(trend[shift] > 0 && loPivot > 0){confirmState[0] = 1; boxBottom[0] = loPivot; confTime = Time[shift];}
               else
               if(trend[shift] < 0 && upPivot > 0){confirmState[0] = 1; boxTop[0]    = upPivot; confTime = Time[shift];}
            }
         }
         else
         {
            if(startState[0] > 0 && (upPivot > boxTop[0] || hiBoxPrice > boxTop[0])) {startState[0] = 0; startTime[0] = 0;} 
            else 
            if(startState[0] < 0 && ((loPivot > 0 && loPivot < boxBottom[0]) || loBoxPrice < boxBottom[0])) {startState[0] = 0; startTime[0] = 0;} 
            else
            if(Time[shift] > startTime[0])
            {
               if(startState[0] > 0 && loPivot > 0 && confirmState[

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

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

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

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

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

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

Стоимость полного кода
1 178,60₽ ≈ $14.40