adxm fl 1.1 arrows.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «adxm fl 1.1 arrows.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для MetaTrader 5, рассчитывающий модифицированный индикатор ADXm (Average Directional Index) с дополнительными аналитическими возможностями. Индикатор отображается в отдельном окне графика и использует 10 буферов для отрисовки различных графических элементов.
Основные функции включают выбор типа цены для расчёта (в том числе цены Heikin Ashi), сглаживание цены различными методами скользящих средних, фильтрацию значений цены или ADXm, а также динамические уровни двух типов — плавающие и квантильные. Линия индикатора меняет цвет в зависимости от направления тренда, определяемого пересечением уровней или изменением наклона.
Индикатор поддерживает анализ на множественных таймфреймах с возможностью интерполяции, отображает стрелки при смене тренда и предоставляет расширенную систему уведомлений, включая всплывающие сообщения, звуковые сигналы, push-уведомления и email-рассылку.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм анализа |
| ForSymbol | Символ для анализа (пустая строка — символ текущего графика) |
| AdxmPeriod | Период расчёта ADXm |
| AdxmPriceC | Тип цены для закрытия |
| AdxmPriceH | Тип цены для максимума |
| AdxmPriceL | Тип цены для минимума |
| PriceSmoothing | Период сглаживания цены (-1 — равен периоду ADXm, 0 — без сглаживания) |
| PriceMaType | Метод сглаживания цены (SMA, EMA, SMMA, LWMA) |
| Filter | Значение фильтра (≤ 0 — фильтр отключён) |
| FilterOn | Объект фильтрации (цена, значение ADXm или оба) |
| FilterPeriod | Период фильтра (≤ 0 — использовать период ADXm) |
| LevelsType | Тип уровней (плавающие или квантильные) |
| LevelsPeriod | Период расчёта уровней |
| LevelsUp | Процент верхнего уровня |
| LevelsDown | Процент нижнего уровня |
| AlertsOn | Включить уведомления |
| AlertsOnCurrent | Уведомлять на текущей (открытой) свече |
| AlertsMessage | Показывать всплывающее сообщение |
| AlertsSound | Воспроизводить звуковой сигнал |
| AlertsPushNotif | Отправлять push-уведомления |
| AlertsEmail | Включить отправку email-уведомлений |
| ColorOn | Условие смены цвета линии |
| arrowsVisible | Отображать стрелки на графике |
| arrowsOnNewest | Рисовать стрелки на новой свече более высокого таймфрейма |
| arrowsIdentifier | Уникальный идентификатор стрелок |
| arrowsUpperGap | Отступ верхней стрелки |
| arrowsLowerGap | Отступ нижней стрелки |
| arrowsUpColor | Цвет стрелки вверх |
| arrowsDnColor | Цвет стрелки вниз |
| arrowsUpCode | Код стрелки вверх |
| arrowsDnCode | Код стрелки вниз |
| arrowsSize | Размер стрелок |
| ColorUp | Цвет для восходящего тренда |
| ColorDown | Цвет для нисходящего тренда |
| LineWidth | Толщина основной линии |
| ShadowWidth | Толщина теневой линии (≤ 0 — основная толщина + 3) |
| Interpolate | Включить интерполяцию при анализе множественных таймфреймов |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 10
#property indicator_color1 clrSilver
#property indicator_color2 clrSilver
#property indicator_color3 clrSilver
#property indicator_color4 clrSilver
#property indicator_color5 clrDimGray
#property indicator_color6 clrDimGray
#property indicator_style2 STYLE_DOT
#property strict
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
};
enum enFilterWhat
{
flt_prc, // Filter the price
flt_val, // Filter the ADXm value
flt_both // Filter both
};
enum enColorOn
{
cc_onSlope, // Change color on slope change
cc_onMiddle, // Change color on middle line cross
cc_onLevels // Change color on outer levels cross
};
enum enLevelType
{
lvl_floa, // Floating levels
lvl_quan // Quantile levels
};
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Time frame
extern string ForSymbol = ""; // For symbol (leave empty for current chart symbol)
extern int AdxmPeriod = 14; // Adxm period
extern enPrices AdxmPriceC = pr_close; // Price for close
extern enPrices AdxmPriceH = pr_high; // Price for high
extern enPrices AdxmPriceL = pr_low; // Price for low
extern int PriceSmoothing = -1; // Price smoothing (-1 same as adxm period, 0 no smoothing)
extern enMaTypes PriceMaType = ma_ema; // Price smoothing method
extern double Filter = 0; // Filter to use (<= 0 no filter)
extern enFilterWhat FilterOn = flt_prc; // Apply filter to :
extern int FilterPeriod = 0; // Filter period (<=0 use ADXm period)
extern enLevelType LevelsType = lvl_floa; // Levels type
extern int LevelsPeriod = 25; // Levels period
extern double LevelsUp = 80; // Upper level %
extern double LevelsDown = 20; // Lower level %
extern bool AlertsOn = false; // Turn alerts on?
extern bool AlertsOnCurrent = true; // Alerts on current (still opened) bar?
extern bool AlertsMessage = true; // Alerts should show pop-up message?
extern bool AlertsSound = false; // Alerts should play alert sound?
extern bool AlertsPushNotif = false; // Alerts should send push notification?
extern bool AlertsEmail = false; // Alerts should send email?
extern enColorOn ColorOn = cc_onLevels; // Color change on :
extern bool arrowsVisible = false; // Arrows visible?
extern bool arrowsOnNewest = false; // Arrows drawn on newst bar of higher time frame bar?
extern string arrowsIdentifier = "adxm Arrows1"; // Unique ID for arrows
extern double arrowsUpperGap = 1.0; // Upper arrow gap
extern double arrowsLowerGap = 1.0; // Lower arrow gap
extern color arrowsUpColor = clrLimeGreen; // Up arrow color
extern color arrowsDnColor = clrOrange; // Down arrow color
extern int arrowsUpCode = 241; // Up arrow code
extern int arrowsDnCode = 242; // Down arrow code
extern int arrowsSize = 0; // Arrows size
extern color ColorUp = clrDodgerBlue; // Color for up
extern color ColorDown = clrSandyBrown; // Color for down
extern int LineWidth = 3; // Main line width
extern int ShadowWidth = 0; // Shadow width (<=0 main line width+3)
extern bool Interpolate = true; // Interpolate in multi time frame?
double val[],valUa[],valUb[],valDa[],valDb[],levup[],levmi[],levdn[],trend[],shadowa[],shadowb[];
string indicatorFileName;
bool returnBars;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
string lookFor = arrowsIdentifier+":";
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
return(0);
}
int start()
{
// код доступен только после оплаты
}
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { levup[0] = limit+1; return(0); }
if (TimeFrame != _Period || ForSymbol!=_Symbol)
{
#define _mtfCall(_buff) iCustom(ForSymbol,TimeFrame,indicatorFileName,PERIOD_CURRENT,"",AdxmPeriod,AdxmPriceC,AdxmPriceH,AdxmPriceL,PriceSmoothing,PriceMaType,Filter,FilterOn,FilterPeriod,LevelsType,LevelsPeriod,LevelsUp,LevelsDown,AlertsOn,AlertsOnCurrent,AlertsMessage,AlertsSound,AlertsPushNotif,AlertsEmail,ColorOn,arrowsVisible,arrowsOnNewest,arrowsIdentifier,arrowsUpperGap,arrowsLowerGap,arrowsUpColor,arrowsDnColor,arrowsUpCode,arrowsDnCode,arrowsSize,_buff,y);
limit = (int)MathMax(limit,MathMin(Bars-1,iCustom(ForSymbol,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/_Period));
if (trend[limit]== 1) { CleanPoint(limit,valUa,valUb); CleanPoint(limit,shadowa,shadowb); }
if (trend[limit]==-1) { CleanPoint(limit,valDa,valDb); CleanPoint(limit,shadowa,shadowb); }
for(int i=limit; i>=0; i--)
{
int y = iBarShift(ForSymbol,TimeFrame,Time[i]);
levup[i] = _mtfCall( 0);
levmi[i] = _mtfCall( 1);
levdn[i] = _mtfCall( 2);
val[i] = _mtfCall( 3);
trend[i] = _mtfCall(10);
valDa[i] = EMPTY_VALUE;
valDb[i] = EMPTY_VALUE;
valUa[i] = EMPTY_VALUE;
valUb[i] = EMPTY_VALUE;
shadowa[i] = EMPTY_VALUE;
shadowb[i] = EMPTY_VALUE;
if (!Interpolate || (i>0 && y==iBarShift(NULL,TimeFrame,Time[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)<Bars && Time[i+n] >= time; n++) continue;
for(k = 1; k<n && (i+n)<Bars && (i+k)<Bars; k++)
{
_interpolate(levup);
_interpolate(levmi);
_interpolate(levdn);
_interpolate(val);
}
}
for(int i=limit; i>=0; i--)
{
if (trend[i] == 1) { PlotPoint(i,valUa,valUb,val); PlotPoint(i,shadowa,shadowb,val); }
if (trend[i] == -1) { PlotPoint(i,valDa,valDb,val); PlotPoint(i,shadowa,shadowb,val); }
}
return(0);
}
int speriod = (PriceSmoothing<0) ? AdxmPeriod : PriceSmoothing;
int tperiod = (FilterPeriod<=0) ? AdxmPeriod : FilterPeriod;
double pfilter = (FilterOn==flt_prc) ? Filter : 0;
double vfilter = (FilterOn==flt_val) ? Filter : 0;
int colorOn = (LevelsPeriod>0) ? ColorOn : cc_onSlope;
if (trend[limit]== 1) { CleanPoint(limit,valUa,valUb); CleanPoint(limit,shadowa,shadowb); }
if (trend[limit]==-1) { CleanPoint(limit,valDa,valDb); CleanPoint(limit,shadowa,shadowb); }
for(int i=limit; i>=0; i--)
{
double prices[3],tdi=0,tadx=0;
prices[0] = iCustomMa(PriceMaType,iFilter(getPrice(AdxmPriceC,Open,Close,High,Low,i,0),pfilter,tperiod,i,Bars,0),speriod,i,0);
prices[1] = iCustomMa(PriceMaType,iFilter(getPrice(AdxmPriceH,Open,Close,High,Low,i,1),pfilter,tperiod,i,Bars,1),speriod,i,1);
prices[2] = iCustomMa(PriceMaType,iFilter(getPrice(AdxmPriceL,Open,Close,High,Low,i,2),pfilter,tperiod,i,Bars,2),speriod,i,2);
ArraySort(prices);
iAdxm(prices[1],prices[2],prices[0],tperiod,tdi,tadx,i,Bars);
val[i] = iFilter(tadx,vfilter,tperiod,i,Bars,3);
valDa[i] = EMPTY_VALUE;
valDb[i] = EMPTY_VALUE;
valUa[i] = EMPTY_VALUE;
valUb[i] = EMPTY_VALUE;
shadowa[i] = EMPTY_VALUE;
shadowb[i] = EMPTY_VALUE;
double hi = val[i]; double lo = val[i];
if (LevelsType==lvl_floa)
{
if (LevelsPeriod>0)
{
hi = val[ArrayMaximum(val,LevelsPeriod,i)];
lo = val[ArrayMinimum(val,LevelsPeriod,i)];
hi = lo+(hi-lo)*LevelsUp /100.0;
lo = lo+(hi-lo)*LevelsDown/100.0;
}
levup[i] = hi;
levdn[i] = lo;
levmi[i] = (levup[i]+levdn[i])/2.0;
}
else
{
levup[i] = iQuantile(val[i],LevelsPeriod, LevelsUp ,i,Bars);
levdn[i] = iQuantile(val[i],LevelsPeriod, LevelsDown,i,Bars);
levmi[i] = iQuantile(val[i],LevelsPeriod,(LevelsDown+LevelsUp)/2,i,Bars);
}
switch(colorOn)
{
case cc_onLevels: trend[i] = (val[i]>levup[i]) ? 1 : (val[i]<levdn[i]) ? -1 : 0; break;
case cc_onMiddle: trend[i] = (val[i]>levmi[i]) ? 1 : (val[i]<levmi[i]) ? -1 : 0; break;
default : if (i<Bars-1) trend[i] = (val[i]>val[i+1]) ? 1 : (val[i]<val[i+1]) ? -1 : trend[i+1];
}
if (trend[i] == 1) { PlotPoint(i,valUa,valUb,val); PlotPoint(i,shadowa,shadowb,val); }
if (trend[i] == -1) { PlotPoint(i,valDa,valDb,val); PlotPoint(i,shadowa,shadowb,val); }
if (arrowsVisible)
{
string lookFor = arrowsIdentifier+":"+(string)Time[i]; ObjectDelete(lookFor);
if (i<(Bars-1) && trend[i] != trend[i+1])
{
if (trend[i] == 1) drawArrow(i,arrowsUpColor,arrowsUpCode,false);
if (trend[i] ==-1) drawArrПоказано первые 50% кода (символов: 18380)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.