DarvasBoxes
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «darvasboxes nmc.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы 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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.