BB stops
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «bb stops (new format) 1.3.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
BB stops — пользовательский индикатор для MetaTrader 4, отображающий на графике уровни «стопов», рассчитанные на основе полос Боллинджера и выбранной скользящей средней. Индикатор определяет текущий тренд по соотношению цены с рассчитанными границами и визуализирует его в виде гистограмм, линий и стрелок смены тренда.
Поддерживается работа на различных таймфреймах, включая режим интерполяции данных с высших таймфреймов. Доступен выбор множества типов цен, включая Heikin Ashi, а также нескольких видов скользящих средних (SMA, EMA, SMMA, LWMA, TEMA) с настройкой периода и отклонения.
Индикатор оснащён системой уведомлений: всплывающие сообщения, звуковые сигналы, push-уведомления и email-оповещения, которые срабатывают при смене состояния тренда. Внутренние расчётные буферы и вспомогательные функции не экспортируются как отдельные API.
Настройки программы
| Настройка | Описание |
|---|---|
| Time frame (TimeFrame) | Time frame — Таймфрейм, на котором выполняется расчёт индикатора. |
| Bands period (BandsPeriod) | Bands period — Период расчёта полос и скользящей средней. |
| Bands deviation (BandsDeviation) | Bands deviation — Коэффициент отклонения полос от центральной линии. |
| Bands deviation with sample correction? (BandsDeviationSample) | Bands deviation with sample correction — Включает коррекцию выборки при расчёте отклонения. |
| Bands risk (BandsRisk) | Bands risk — Коэффициент риска, влияющий на ширину финальных уровней стопов. |
| Bands average type (BandsMaType) | Bands average type — Тип скользящей средней, используемой для центральной линии. |
| Price (Price) | Price — Тип цены, используемый для расчётов (Close, Open, High, Low, Median и другие, включая Heikin Ashi). |
| Turn alerts on? (alertsOn) | Turn alerts on — Включает или отключает систему уведомлений. |
| Alerts on still opened bar? (alertsOnCurrent) | Alerts on still opened bar — Разрешает уведомления на текущей ещё незавершённой свече. |
| Alerts should display message? (alertsMessage) | Alerts should display message? — Включает отображение всплывающих сообщений при смене тренда. |
| Alerts should play a sound? (alertsSound) | Alerts should play a sound — Включает воспроизведение звукового сигнала при смене тренда. |
| Alerts should send a notification? (alertsNotify) | Alerts should send a notification? — Включает отправку push-уведомлений при смене тренда. |
| Alerts should send an email? (alertsEmail) | Alerts should send an email? — Включает отправку email-уведомлений при смене тренда. |
| Sound file (soundFile) | Sound file — Путь к звуковому файлу, используемому для уведомлений. |
| Display type (DisplayWhat) | Display type — Тип отображения: линии, столбцы, нулевая линия или их комбинации. |
| Color for up (ColorUp) | Color for up — Цвет отображения элементов восходящего тренда. |
| Color for down (ColorDn) | Color for down — Цвет отображения элементов нисходящего тренда. |
| Color for neutral and "zero" line (ColorNe) | Color for neutral and "zero" line — Цвет нулевой линии и нейтральных элементов. |
| Interpolate in multi time frame mode? (Interpolate) | Interpolate in multi time frame mode — Включает интерполяцию при работе на мультитаймфрейме. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3
#property strict
#define _disBar 1
#define _disLin 2
#define _disZer 4
enum enDisplayType
{
dis_01=_disLin, // Display bb stops line
dis_02=_disBar, // Display bb stops bars
dis_03=_disZer, // Display bb stops "zero" line
dis_04=_disLin+_disBar, // Display bb stops line and bars
dis_05=_disLin+_disZer, // Display bb stops line and "zero" line
dis_06=_disBar+_disZer, // Display bb stops bars and "zero" line
dis_07=_disLin+_disBar+_disZer // Display all
};
enum enPrices
{
pr_close, // Close
pr_open, // Open
pr_high, // High
pr_low, // Low
pr_median, // Median
pr_typical, // Typical
pr_weighted, // Weighted
pr_average, // Average (high+low+open+close)/4
pr_medianb, // Average median body (open+close)/2
pr_tbiased, // Trend biased price
pr_tbiased2, // Trend biased (extreme) price
pr_haclose, // Heiken ashi close
pr_haopen , // Heiken ashi open
pr_hahigh, // Heiken ashi high
pr_halow, // Heiken ashi low
pr_hamedian, // Heiken ashi median
pr_hatypical, // Heiken ashi typical
pr_haweighted, // Heiken ashi weighted
pr_haaverage, // Heiken ashi average
pr_hamedianb, // Heiken ashi median body
pr_hatbiased, // Heiken ashi trend biased price
pr_hatbiased2 // Heiken ashi trend biased (extreme) price
};
enum enMaTypes
{
ma_sma, // Simple moving average
ma_ema, // Exponential moving average
ma_smma, // Smoothed MA
ma_lwma, // Linear weighted MA
ma_tema // Triple exponential moving average - TEMA
};
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Time frame
extern int BandsPeriod = 21; // Bands period
extern double BandsDeviation = 3; // Bands deviation
extern bool BandsDeviationSample = false; // Bands deviation with sample correction?
extern double BandsRisk = 3; // Bands risk
extern enMaTypes BandsMaType = ma_sma; // Bands average type
extern enPrices Price = pr_close; // Price
extern bool alertsOn = false; // Turn alerts on?
extern bool alertsOnCurrent = false; // Alerts on still opened bar?
extern bool alertsMessage = true; // Alerts should display message?
extern bool alertsSound = false; // Alerts should play a sound?
extern bool alertsNotify = false; // Alerts should send a notification?
extern bool alertsEmail = false; // Alerts should send an email?
extern string soundFile = "alert2.wav"; // Sound file
extern enDisplayType DisplayWhat = _disLin+_disBar; // Display type
extern color ColorUp = clrLimeGreen; // Color for up
extern color ColorDn = clrOrangeRed; // Color for down
extern color ColorNe = clrDarkGray; // Color for neutral and "zero" line
extern bool Interpolate = true; // Interpolate in multi time frame mode?
double upb[],dnb[],upa[],dna[],histou[],histod[],zero[],amax[],amin[],bmin[],bmax[],trend[],count[];
string indicatorFileName;
#define _mtfCall(_buff,_y) iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,BandsPeriod,BandsDeviation,BandsDeviationSample,BandsRisk,BandsMaType,Price,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsNotify,alertsEmail,soundFile,_buff,_y)
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason) { }
int OnCalculate (const int rates_total,
const int prev_calculated,
const datetime& btime[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[] )
{
// код доступен только после оплаты
}
int counted_bars = prev_calculated;
if(counted_bars < 0) return(-1);
if(counted_bars > 0) counted_bars--;
int limit=MathMin(rates_total-counted_bars,rates_total-1); count[0] = limit;
if (TimeFrame!=_Period)
{
limit = (int)MathMax(limit,MathMin(rates_total-1,_mtfCall(12,0)*TimeFrame/_Period));
for (int i=limit;i>=0; i--)
{
int y = iBarShift(NULL,TimeFrame,btime[i]);
zero[i] = _mtfCall( 2,y);
bmax[i] = _mtfCall( 9,y);
bmin[i] = _mtfCall(10,y);
trend[i] = _mtfCall(11,y);
if (!Interpolate || (i>0 && y==iBarShift(NULL,TimeFrame,btime[i-1]))) continue;
#define _interpolate(buff) buff[i+k] = buff[i]+(buff[i+n]-buff[i])*k/n
int n,k; datetime time = iTime(NULL,TimeFrame,y);
for(n = 1; (i+n)<rates_total && btime[i+n] >= time; n++) continue;
for(k = 1; k<n && (i+n)<rates_total && (i+k)<rates_total; k++)
{
_interpolate(zero);
_interpolate(bmax);
_interpolate(bmin);
}
}
for (int i=limit;i>=0; i--)
{
upb[i] = dnb[i] = EMPTY_VALUE;
if (trend[i] == 1) { upb[i] = bmin[i]; histou[i] = high[i]; histod[i] = low[i]; }
if (trend[i] == -1) { dnb[i] = bmax[i]; histod[i] = high[i]; histou[i] = low[i]; }
upa[i] = (i<Bars-1) ? (trend[i]!=trend[i+1] && trend[i]== 1) ? upb[i] : EMPTY_VALUE : EMPTY_VALUE;
dna[i] = (i<Bars-1) ? (trend[i]!=trend[i+1] && trend[i]==-1) ? dnb[i] : EMPTY_VALUE : EMPTY_VALUE;
}
return(rates_total);
}
for(int i=limit; i>=0; i--)
{
double price = getPrice(Price,open,close,high,low,i);
double dev = iDeviation(price,BandsPeriod,BandsDeviationSample,i);
zero[i] = iCustomMa(BandsMaType,price,BandsPeriod,i,0);
amax[i] = zero[i]+dev*BandsDeviation;
amin[i] = zero[i]-dev*BandsDeviation;
bmax[i] = amax[i]+0.5*(BandsRisk-1)*(amax[i]-amin[i]);
bmin[i] = amin[i]-0.5*(BandsRisk-1)*(amax[i]-amin[i]);
trend[i] = (i<Bars-1) ? (price>amax[i+1]) ? 1 : (price<amin[i+1]) ? -1 : trend[i+1] : 0;
if (i<Bars-1)
{
if (trend[i]==-1 && amax[i]>amax[i+1]) amax[i] = amax[i+1];
if (trend[i]== 1 && amin[i]<amin[i+1]) amin[i] = amin[i+1];
if (trend[i]==-1 && bmax[i]>bmax[i+1]) bmax[i] = bmax[i+1];
if (trend[i]== 1 && bmin[i]<bmin[i+1]) bmin[i] = bmin[i+1];
}
upb[i] = EMPTY_VALUE; dnb[i] = EMPTY_VALUE;
if (trend[i] == 1) { uПоказано первые 50% кода (символов: 12529)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.