rsx (vidya) 1.2 mtf + arrows.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsx (vidya) 1.2 mtf + arrows.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный индикатор предназначен для платформы MetaTrader 5 и выполняет расчёт аналитического показателя RSX с применением сглаживания Vidya. Он работает в отдельном окне графика и поддерживает многотаймфреймный режим, позволяя отображать данные с более высокого таймфрейма на текущем графике.
Индикатор отрисовывает три линии RSX в отдельном окне и рисует стрелки-маркеры при изменении направления наклона. Пользователь может выбирать из множества типов цен для расчёта, включая стандартные (Close, Open, High, Low) и цены Хейкин Аши. Доступна интерполяция значений при работе в многотаймфреймном режиме.
Система уведомлений поддерживает несколько каналов: всплывающие сообщения, звуковые сигналы, электронную почту и push-уведомления. Уведомления срабатывают при смене направления наклона показателя. Настройки позволяют гибко управлять периодами расчёта, внешним видом стрелок, цветами и поведением оповещений.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Выбирает таймфрейм, на котором выполняется расчёт показателя. |
| RsxLength | Задаёт период расчёта показателя RSX. |
| Price | Выбирает тип цены, используемый для расчёта показателя (Close, Open, High, Low, Median, Typical, Weighted, Average, Heikin Ashi и другие). |
| VidyaPeriod | Задаёт период расчёта Vidya. |
| VidyaSmooth | Задаёт период сглаживания Vidya. |
| AlertsOn | Включает или отключает систему уведомлений при смене направления наклона показателя. |
| AlertsOnCurrent | Определяет, на какой свече отслеживать изменение направления: на текущей открытой или на следующей. |
| AlertsMessage | Разрешает отображение всплывающих сообщений при смене направления наклона показателя. |
| AlertsSound | Разрешает воспроизведение звукового сигнала при смене направления наклона показателя. |
| AlertsEmail | Разрешает отправку уведомлений по электронной почте при смене направления наклона показателя. |
| AlertsPushNotif | Разрешает отправку push-уведомлений при смене направления наклона показателя. |
| arrowsVisible | Включает или отключает отображение стрелок-маркеров на графике. |
| arrowsOnNewest | Определяет, рисовать ли стрелки на самой новой свече более высокого таймфрейма. |
| arrowsIdentifier | Указывает уникальный идентификатор для объектов-стрелок на графике. |
| arrowsUpperGap | Задаёт отступ стрелки вверх от цены в единицах ATR. |
| arrowsLowerGap | Задаёт отступ стрелки вниз от цены в единицах ATR. |
| arrowsUpColor | Задаёт цвет стрелки для восходящего направления. |
| arrowsDnColor | Задаёт цвет стрелки для нисходящего направления. |
| arrowsUpCode | Задаёт код стрелки для восходящего направления. |
| arrowsDnCode | Задаёт код стрелки для нисходящего направления. |
| arrowsUpSize | Задаёт размер стрелки для восходящего направления. |
| arrowsDnSize | Задаёт размер стрелки для нисходящего направления. |
| Interpolate | Включает интерполяцию значений при работе индикатора в многотаймфреймном режиме. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 clrLimeGreen
#property indicator_color2 clrOrange
#property indicator_color3 clrOrange
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_minimum -2
#property indicator_maximum 102
#property indicator_level1 70
#property indicator_level2 30
#property indicator_levelcolor clrDarkGray
#property indicator_levelstyle 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
pr_habclose, // Heiken ashi (better formula) close
pr_habopen , // Heiken ashi (better formula) open
pr_habhigh, // Heiken ashi (better formula) high
pr_hablow, // Heiken ashi (better formula) low
pr_habmedian, // Heiken ashi (better formula) median
pr_habtypical, // Heiken ashi (better formula) typical
pr_habweighted,// Heiken ashi (better formula) weighted
pr_habaverage, // Heiken ashi (better formula) average
pr_habmedianb, // Heiken ashi (better formula) median body
pr_habtbiased, // Heiken ashi (better formula) trend biased price
pr_habtbiased2 // Heiken ashi (better formula) trend biased (extreme) price
};
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Time frame
extern int RsxLength = 14; // RSX period
extern enPrices Price = pr_close; // Price to use
extern int VidyaPeriod = 10; // Vidya period
extern int VidyaSmooth = 5; // Vidya period
extern bool AlertsOn = false; // Turn alerts on?
extern bool AlertsOnCurrent = true; // Alerts on still opened bar?
extern bool AlertsMessage = true; // Alerts should show popup message?
extern bool AlertsSound = false; // Alerts should play a sound?
extern bool AlertsEmail = false; // Alerts should send email?
extern bool AlertsPushNotif = false; // Alerts should send notification?
input bool arrowsVisible = false; // Arrows visible on/off?
input bool arrowsOnNewest = true; // Arrows drawn on newest bar of higher time frame bar on/off?
input string arrowsIdentifier = "rsx Arrows1"; // Unique ID for arrows
input double arrowsUpperGap = 0.5; // Upper arrow gap
input double arrowsLowerGap = 0.5; // Lower arrow gap
input color arrowsUpColor = clrLimeGreen; // Up arrow color
input color arrowsDnColor = clrOrange; // Down arrow color
input int arrowsUpCode = 221; // Up arrow code
input int arrowsDnCode = 222; // Down arrow code
input int arrowsUpSize = 2; // Up arrow size
input int arrowsDnSize = 2; // Down arrow size
extern bool Interpolate = true; // Interpolate in mtf mode
double rsx[],rsxDa[],rsxDb[],slope[],wrkBuffer[][13],count[];
string indicatorFileName;
#define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,RsxLength,Price,VidyaPeriod,VidyaSmooth,AlertsOn,AlertsOnCurrent,AlertsMessage,AlertsSound,AlertsEmail,AlertsPushNotif,arrowsVisible,arrowsOnNewest,arrowsIdentifier,arrowsUpperGap,arrowsLowerGap,arrowsUpColor,arrowsDnColor,arrowsUpCode,arrowsDnCode,arrowsUpSize,arrowsDnSize,_buff,_ind)
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
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);
}
}
int start()
{
// код доступен только после оплаты
}
int i,r,counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=fmin(Bars-counted_bars,Bars-1); count[0] = limit;
if (TimeFrame!=_Period)
{
limit = (int)fmax(limit,fmin(Bars-1,_mtfCall(4,0)*TimeFrame/Period()));
if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);
for (i=limit;i>=0;i--)
{
int y = iBarShift(NULL,TimeFrame,Time[i]);
rsx[i] = _mtfCall(0,y);
rsxDa[i] = rsxDb[i] = EMPTY_VALUE;
slope[i] = _mtfCall(3,y);
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(rsx);
}
for (i=limit; i >= 0; i--) if (slope[i]==-1) PlotPoint(i,rsxDa,rsxDb,rsx);
return(0);
}
double Kg = (3.0)/(2.0+RsxLength);
double Hg = 1.0-Kg;
if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);
if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);
for(i=limit, r=Bars-i-1; i>=0; i--, r++)
{
double price = getPrice(Price,Open,Close,High,Low,i,Bars);
wrkBuffer[r][12] = iVidya(price,price,VidyaPeriod,VidyaSmooth,i,Bars);
if (i==(Bars-1)) for (int c=0; c<12; c++) wrkBuffer[r][c] = 0;
double roc = (r>0) ? wrkBuffer[r][12]-wrkBuffer[r-1][12] : 0;
double roa = fabs(roc);
for (int k=0; k<3 && r>0; k++)
{
int kk = k*2;
wrkBuffer[r][kk+0] = Kg*roc + Hg*wrkBuffer[r-1][kk+0];
wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; roc = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];
wrkBuffer[r][kk+6] = Kg*roa + Hg*wrkBuffer[r-1][kk+6];
wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; roa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7];
}
rsx[i] = (roa != 0) ? fmax(fmin((roc/roa+1.0)*50.0,100.00),0.00) : 50;
rsxDa[i] = rsxDb[i] = EMPTY_VALUE;
slope[i] = (i<Bars-1) ? (rsx[i]>rsx[i+1]) ? 1 : (rsx[i]<rsx[i+1])? -1 : slope[i+1] : 0;
if (slope[iПоказано первые 50% кода (символов: 11502)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.