Initial commit: MQL5 Indicators Collection (MetaTrader 5) - Part 3

This commit is contained in:
GeneralTradingSarl
2025-06-24 00:49:58 +01:00
commit ce28e11d35
5015 changed files with 75789 additions and 0 deletions
+178
View File
@@ -0,0 +1,178 @@
//+---------------------------------------------------------------------+
//| MC.mq5 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+---------------------------------------------------------------------+
//| Для работы индикатора следует положить файл SmoothAlgorithms.mqh |
//| в папку (директорию): каталог_данных_терминала\\MQL5\Include |
//+---------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//---- номер версии индикатора
#property version "1.00"
//---- отрисовка индикатора в отдельном окне
#property indicator_separate_window
//---- количество индикаторных буферов 2
#property indicator_buffers 2
//---- использовано всего два графических построения
#property indicator_plots 2
//+-----------------------------------+
//| Параметры отрисовки индикатора |
//+-----------------------------------+
//---- отрисовка индикатора в виде заливки между двумя линиями
#property indicator_type1 DRAW_FILLING
//---- в качестве цветов заливки индикатора использованы цвета SteelBlue и HotPink цвета
#property indicator_color1 clrSteelBlue,clrHotPink
//--- отображение метки индикатора
#property indicator_label1 "XMACD Cloud"
//+-----------------------------------+
//| Описание классов усреднений |
//+-----------------------------------+
#include <SmoothAlgorithms.mqh>
//+-----------------------------------+
//---- объявление переменных класса CXMA из файла SmoothAlgorithms.mqh
CXMA XMA1,XMA2,XMA3;
//+-----------------------------------+
//| объявление перечислений |
//+-----------------------------------+
enum Applied_price_ //Тип константы
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
PRICE_HIGH_, //High
PRICE_LOW_, //Low
PRICE_MEDIAN_, //Median Price (HL/2)
PRICE_TYPICAL_, //Typical Price (HLC/3)
PRICE_WEIGHTED_, //Weighted Close (HLCC/4)
PRICE_SIMPL_, //Simpl Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+-----------------------------------+
//| объявление перечислений |
//+-----------------------------------+
/*enum Smooth_Method - перечисление объявлено в файле SmoothAlgorithms.mqh
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA, //AMA
}; */
//+-----------------------------------+
//| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА |
//+-----------------------------------+
input Smooth_Method XMA_Method=MODE_T3; //метод усреднения гистограммы
input int Fast_XMA = 12; //период быстрого мувинга
input int Slow_XMA = 26; //период медленного мувинга
input int XPhase = 100; //параметр усреднения мувингов,
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- Для VIDIA это период CMO, для AMA это период медленной скользящей
input Smooth_Method Signal_Method=MODE_JJMA; //метод усреднения сигнальной линии
input int Signal_XMA=9; //период сигнальной линии
input int Signal_Phase=100; // параметр сигнальной линии,
//---- изменяющийся в пределах -100 ... +100,
//---- влияет на качество переходного процесса;
input Applied_price_ AppliedPrice=PRICE_CLOSE_;//ценовая константа
//+-----------------------------------+
//---- Объявление целых переменных начала отсчёта данных
int min_rates_total,min_rates_1;
//---- объявление динамических массивов, которые будут в
// дальнейшем использованы в качестве индикаторных буферов
double XMACDBuffer[],SignBuffer[];
//+------------------------------------------------------------------+
//| XMACD indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- Инициализация переменных начала отсчёта данных
min_rates_1=MathMax(GetStartBars(XMA_Method,Fast_XMA,XPhase),GetStartBars(XMA_Method,Slow_XMA,XPhase));
min_rates_total=min_rates_1+GetStartBars(Signal_Method,Signal_XMA,Signal_Phase)+2;
//---- превращение динамического массива XMACDBuffer в индикаторный буфер
SetIndexBuffer(0,XMACDBuffer,INDICATOR_DATA);
//---- превращение динамического массива SignBuffer в индикаторный буфер
SetIndexBuffer(1,SignBuffer,INDICATOR_DATA);
//---- осуществление сдвига начала отсчёта отрисовки индикатора
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- установка значений индикатора, которые не будут видимы на графике
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- установка алертов на недопустимые значения внешних переменных
XMA1.XMALengthCheck("Fast_XMA", Fast_XMA);
XMA1.XMALengthCheck("Slow_XMA", Slow_XMA);
XMA1.XMALengthCheck("Signal_XMA", Signal_XMA);
//---- установка алертов на недопустимые значения внешних переменных
XMA1.XMAPhaseCheck("XPhase", XPhase, XMA_Method);
XMA1.XMAPhaseCheck("Signal_Phase", Signal_Phase, Signal_Method);
//---- инициализации переменной для короткого имени индикатора
string shortname;
string Smooth1=XMA1.GetString_MA_Method(XMA_Method);
string Smooth2=XMA1.GetString_MA_Method(Signal_Method);
StringConcatenate(shortname,
"XMACD( ",Fast_XMA,", ",Slow_XMA,", ",Signal_XMA,", ",Smooth1,", ",Smooth2," )");
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- завершение инициализации
}
//+------------------------------------------------------------------+
//| XMACD iteration function |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[]
)
{
//---- Проверка количества баров на достаточность для расчёта
if(rates_total<min_rates_total) return(0);
//---- Объявление целых переменных
int first,bar;
//---- Объявление переменных с плавающей точкой
double price,fast_xma,slow_xma,xmacd,sign_xma;
//---- Инициализация индикатора в блоке OnCalculate()
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчёта индикатора
{
first=0; // стартовый номер для расчёта всех баров первого цикла
}
else // стартовый номер для расчёта новых баров
{
first=prev_calculated-1;
}
//---- Основной цикл расчёта индикатора
for(bar=first; bar<rates_total; bar++)
{
price=PriceSeries(AppliedPrice,bar,open,low,high,close);;
fast_xma=XMA1.XMASeries(0,prev_calculated,rates_total,XMA_Method,XPhase,Fast_XMA,price,bar,false);
slow_xma=XMA2.XMASeries(0,prev_calculated,rates_total,XMA_Method,XPhase,Slow_XMA,price,bar,false);
xmacd=fast_xma-slow_xma;
sign_xma=XMA3.XMASeries(min_rates_1,prev_calculated,rates_total,Signal_Method,Signal_Phase,Signal_XMA,xmacd,bar,false);
//---- Загрузка полученных значений в индикаторные буферы
XMACDBuffer[bar]= xmacd/_Point;
SignBuffer[bar] = sign_xma/_Point;
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `MC.mq5`
### Screenshots:
![Screenshot](picture__53.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -0,0 +1,22 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_demarker_sign.mq5`
### Screenshots:
![Screenshot](picture_1.png)
![Screenshot](picture_2.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,212 @@
//+------------------------------------------------------------------+
//| METRO_DeMarker_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO_DeMarker Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO_DeMarker Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint PeriodDeMarker=7; // Ïåðèîä èíäèêàòîðà
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int DeMarker_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(PeriodDeMarker);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà DeMarker
DeMarker_Handle=iDeMarker(NULL,0,PeriodDeMarker);
if(DeMarker_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà DeMarker");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",PeriodDeMarker,", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(DeMarker_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,DeMarker0,DeMarker[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(DeMarker,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(DeMarker_Handle,0,0,to_copy,DeMarker)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
DeMarker0=DeMarker[bar]*100;
//---
fmax0=DeMarker0+2*StepSizeFast;
fmin0=DeMarker0-2*StepSizeFast;
//---
if(DeMarker0>fmax1) ftrend=+1;
if(DeMarker0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=DeMarker0+2*StepSizeSlow;
smin0=DeMarker0-2*StepSizeSlow;
//---
if(DeMarker0>smax1) strend=+1;
if(DeMarker0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_demarker_sign.mq5`
### Screenshots:
![Screenshot](picture__32.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,212 @@
//+------------------------------------------------------------------+
//| METRO_DeMarker_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO_DeMarker Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO_DeMarker Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint PeriodDeMarker=7; // Ïåðèîä èíäèêàòîðà
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int DeMarker_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(PeriodDeMarker);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà DeMarker
DeMarker_Handle=iDeMarker(NULL,0,PeriodDeMarker);
if(DeMarker_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà DeMarker");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",PeriodDeMarker,", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(DeMarker_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,DeMarker0,DeMarker[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(DeMarker,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(DeMarker_Handle,0,0,to_copy,DeMarker)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
DeMarker0=DeMarker[bar]*100;
//---
fmax0=DeMarker0+2*StepSizeFast;
fmin0=DeMarker0-2*StepSizeFast;
//---
if(DeMarker0>fmax1) ftrend=+1;
if(DeMarker0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=DeMarker0+2*StepSizeSlow;
smin0=DeMarker0-2*StepSizeSlow;
//---
if(DeMarker0>smax1) strend=+1;
if(DeMarker0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

@@ -0,0 +1,22 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_sign.mq5`
### Screenshots:
![Screenshot](picture_1__5.png)
![Screenshot](picture_2__5.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,213 @@
//+------------------------------------------------------------------+
//| METRO_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí çåëåíûé öâåò
#property indicator_color2 clrLime
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint PeriodRSI=7; // Ïåðèîä èíäèêàòîðà
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
input ENUM_APPLIED_PRICE Applied_price=PRICE_CLOSE; // Òèï öåíû èëè handle
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int RSI_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(PeriodRSI);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà RSI
RSI_Handle=iRSI(NULL,0,PeriodRSI,Applied_price);
if(RSI_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà RSI");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",PeriodRSI,", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(RSI_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,RSI0,RSI[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(RSI,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(RSI_Handle,0,0,to_copy,RSI)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
RSI0=RSI[bar];
//---
fmax0=RSI0+2*StepSizeFast;
fmin0=RSI0-2*StepSizeFast;
//---
if(RSI0>fmax1) ftrend=+1;
if(RSI0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=RSI0+2*StepSizeSlow;
smin0=RSI0-2*StepSizeSlow;
//---
if(RSI0>smax1) strend=+1;
if(RSI0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_sign.mq5`
### Screenshots:
![Screenshot](picture__31.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,213 @@
//+------------------------------------------------------------------+
//| METRO_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí çåëåíûé öâåò
#property indicator_color2 clrLime
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint PeriodRSI=7; // Ïåðèîä èíäèêàòîðà
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
input ENUM_APPLIED_PRICE Applied_price=PRICE_CLOSE; // Òèï öåíû èëè handle
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int RSI_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(PeriodRSI);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà RSI
RSI_Handle=iRSI(NULL,0,PeriodRSI,Applied_price);
if(RSI_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà RSI");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",PeriodRSI,", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(RSI_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,RSI0,RSI[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(RSI,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(RSI_Handle,0,0,to_copy,RSI)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
RSI0=RSI[bar];
//---
fmax0=RSI0+2*StepSizeFast;
fmin0=RSI0-2*StepSizeFast;
//---
if(RSI0>fmax1) ftrend=+1;
if(RSI0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=RSI0+2*StepSizeSlow;
smin0=RSI0-2*StepSizeSlow;
//---
if(RSI0>smax1) strend=+1;
if(RSI0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -0,0 +1,22 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_stochastic_sign.mq5`
### Screenshots:
![Screenshot](picture_1__6.png)
![Screenshot](picture_2__6.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,219 @@
//+------------------------------------------------------------------+
//| METRO_Stochastic_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO_Stochastic Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO_Stochastic Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint KPeriod=5;
input uint DPeriod=3;
input int Slowing=3;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
input ENUM_STO_PRICE Applied_price=STO_LOWHIGH; // Òèï öåíû èëè handle
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int Stochastic_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(KPeriod+DPeriod+Slowing);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà Stochastic
Stochastic_Handle=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MA_Method,Applied_price);
if(Stochastic_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà Stochastic");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",
KPeriod,", ",DPeriod,", ",Slowing,", ",EnumToString(MA_Method),", ",EnumToString(Applied_price),", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(Stochastic_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,Stochastic0,Stochastic[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(Stochastic,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(Stochastic_Handle,0,0,to_copy,Stochastic)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
Stochastic0=Stochastic[bar]*100;
//---
fmax0=Stochastic0+2*StepSizeFast;
fmin0=Stochastic0-2*StepSizeFast;
//---
if(Stochastic0>fmax1) ftrend=+1;
if(Stochastic0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=Stochastic0+2*StepSizeSlow;
smin0=Stochastic0-2*StepSizeSlow;
//---
if(Stochastic0>smax1) strend=+1;
if(Stochastic0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_stochastic_sign.mq5`
### Screenshots:
![Screenshot](picture__52.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,219 @@
//+------------------------------------------------------------------+
//| METRO_Stochastic_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí ðîçîâûé öâåò
#property indicator_color1 clrMagenta
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO_Stochastic Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO_Stochastic Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint KPeriod=5;
input uint DPeriod=3;
input int Slowing=3;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
input ENUM_STO_PRICE Applied_price=STO_LOWHIGH; // Òèï öåíû èëè handle
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int Stochastic_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(KPeriod+DPeriod+Slowing);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà Stochastic
Stochastic_Handle=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MA_Method,Applied_price);
if(Stochastic_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà Stochastic");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",
KPeriod,", ",DPeriod,", ",Slowing,", ",EnumToString(MA_Method),", ",EnumToString(Applied_price),", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(Stochastic_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,Stochastic0,Stochastic[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(Stochastic,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(Stochastic_Handle,0,0,to_copy,Stochastic)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
Stochastic0=Stochastic[bar]*100;
//---
fmax0=Stochastic0+2*StepSizeFast;
fmin0=Stochastic0-2*StepSizeFast;
//---
if(Stochastic0>fmax1) ftrend=+1;
if(Stochastic0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=Stochastic0+2*StepSizeSlow;
smin0=Stochastic0-2*StepSizeSlow;
//---
if(Stochastic0>smax1) strend=+1;
if(Stochastic0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

@@ -0,0 +1,22 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_wpr_sign.mq5`
### Screenshots:
![Screenshot](picture_1__3.png)
![Screenshot](picture_2__3.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,213 @@
//+------------------------------------------------------------------+
//| METRO_WPR_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO_WPR"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí êðàñíûé öâåò
#property indicator_color1 clrRed
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO_WPR Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO_WPR Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint PeriodWPR=7; // Ïåðèîä èíäèêàòîðà
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int WPR_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(PeriodWPR);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà WPR
WPR_Handle=iWPR(NULL,0,PeriodWPR);
if(WPR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà WPR");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",PeriodWPR,", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(WPR_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,WPR0,WPR[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(WPR,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(WPR_Handle,0,0,to_copy,WPR)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
WPR0=WPR[bar]+100;
//---
fmax0=WPR0+2*StepSizeFast;
fmin0=WPR0-2*StepSizeFast;
//---
if(WPR0>fmax1) ftrend=+1;
if(WPR0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=WPR0+2*StepSizeSlow;
smin0=WPR0-2*StepSizeSlow;
//---
if(WPR0>smax1) strend=+1;
if(WPR0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_wpr_sign.mq5`
### Screenshots:
![Screenshot](picture__47.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,213 @@
//+------------------------------------------------------------------+
//| METRO_WPR_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO_WPR"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.10"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî âñåãî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí êðàñíûé öâåò
#property indicator_color1 clrRed
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label1 "METRO_WPR Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷üåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå áû÷üåé ìåòêè èíäèêàòîðà
#property indicator_label2 "METRO_WPR Buy"
//+----------------------------------------------+
//| Îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint PeriodWPR=7; // Ïåðèîä èíäèêàòîðà
input int StepSizeFast=5; // Áûñòðûé øàã
input int StepSizeSlow=15; // Ìåäëåííûé øàã
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ äëÿ õåíäëîâ èíäèêàòîðîâ
int WPR_Handle,ATR_Handle;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int ATR_Period=15;
min_rates_total=int(PeriodWPR);
min_rates_total=MathMax(min_rates_total,ATR_Period)+1;
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---- ïîëó÷åíèå õåíäëà èíäèêàòîðà WPR
WPR_Handle=iWPR(NULL,0,PeriodWPR);
if(WPR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà WPR");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(SellBuffer,true);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(BuyBuffer,true);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"METRO_Sign(",PeriodWPR,", ",StepSizeFast,", ",StepSizeSlow,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double& high[], // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double& low[], // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû äëÿ ðàñ÷åòà èíäèêàòîðà
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(BarsCalculated(WPR_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- îáúÿâëåíèå ëîêàëüíûõ ïåðåìåííûõ
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,WPR0,WPR[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(WPR,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
to_copy=limit+1;
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(WPR_Handle,0,0,to_copy,WPR)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- âîññòàíàâëèâàåì çíà÷åíèÿ ïåðåìåííûõ
ftrend=ftrend_;
strend=strend_;
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- çàïîìèíàåì çíà÷åíèÿ ïåðåìåííûõ ïåðåä ïðîãîíàìè íà òåêóùåì áàðå
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
WPR0=WPR[bar]+100;
//---
fmax0=WPR0+2*StepSizeFast;
fmin0=WPR0-2*StepSizeFast;
//---
if(WPR0>fmax1) ftrend=+1;
if(WPR0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=WPR0+2*StepSizeSlow;
smin0=WPR0-2*StepSizeSlow;
//---
if(WPR0>smax1) strend=+1;
if(WPR0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

@@ -0,0 +1,22 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_xrsx_htf_signal.mq5`
### Screenshots:
![Screenshot](picture_1__2.png)
![Screenshot](picture_2__2.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,368 @@
//+------------------------------------------------------------------+
//| METRO_XRSX_HTF_Signal.mq5 |
//| Copyright © 2016, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
//---- номер версии индикатора
#property version "1.60"
//+------------------------------------------------+
//| Параметры отрисовки индикатора |
//+------------------------------------------------+
//---- отрисовка индикатора в главном окне
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//+------------------------------------------------+
//| Объявление констант |
//+------------------------------------------------+
#define INDICATOR_NAME "METRO_XRSX" // Имя индикатора
#define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора
#define NAMES_SYMBOLS_FONT "Georgia" // Шрифт для названия индикатора
#define SIGNAL_SYMBOLS_FONT "Wingdings" // Шрифт для символа входа в позицию
#define TREND_SYMBOLS_FONT "Wingdings" // Шрифт для символа тренда
#define UP_SIGNAL_SYMBOL "м" // Символ для открывания long
#define DN_SIGNAL_SYMBOL "о" // Символ для открывания short
#define UP_TREND_SYMBOL "]" // Символ для растущего тренда
#define DN_TREND_SYMBOL "]" // Символ для падающего тренда
#define BUY_SOUND "alert.wav" // Звуковой файл для входа в long
#define SELL_SOUND "alert.wav" // Звуковой файл для входа в short
#define BUY_ALERT_TEXT "Buy signal" // Текст алерта для входа в long
#define SELL_ALERT_TEXT "Sell signal" // Текст алерта для входа в short
#define ENAM_EMPTY_VALUE 0.0 // Значение для EMPTY_VALUE
//+------------------------------------------------+
//| Перечисление для индикации срабатывания уровня |
//+------------------------------------------------+
enum ENUM_ALERT_MODE // тип константы
{
OnlySound, // только звук
OnlyAlert // только алерт
};
//+----------------------------------------------+
//| Описание класса CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//| Объявление перечислений |
//+----------------------------------------------+
enum Applied_price_ //тип константы
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
PRICE_HIGH_, //High
PRICE_LOW_, //Low
PRICE_MEDIAN_, //Median Price (HL/2)
PRICE_TYPICAL_, //Typical Price (HLC/3)
PRICE_WEIGHTED_, //Weighted Close (HLCC/4)
PRICE_SIMPL_, //Simpl Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+----------------------------------------------+
//| Объявление перечислений |
//+----------------------------------------------+
/*enum Smooth_Method - объявлено в файле SmoothAlgorithms.mqh
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA, //AMA
}; */
//+------------------------------------------------+
//| Входные параметры индикатора |
//+------------------------------------------------+
input string Symbol_=""; // Финансовый актив
input ENUM_TIMEFRAMES Timeframe=PERIOD_H6; // Таймфрейм индикатора для расчета индикатора
input Smooth_Method DSmoothMethod=MODE_JJMA; // Метод усреднения цены
input int DPeriod=15; // Период скользящей средней
input int DPhase=100; // Параметр усреднения скользящей средней
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- для VIDIA это период CMO, для AMA это период медленной скользящей
input Smooth_Method SSmoothMethod=MODE_JurX; // Метод усреднения сигнальной линии
input int SPeriod=7; // Период сигнальной линии
input int SPhase=100; // Параметр сигнальной линии
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- для VIDIA это период CMO, для AMA это период медленной скользящей
input Applied_price_ IPC=PRICE_CLOSE; // Ценовая константа
input int StepSizeFast=5; // Быстрый шаг
input int StepSizeSlow=15; // Медленный шаг
//---- настройки визуального отображения индикатора
input uint SignalBar=0; // Номер бара для получения сигнала (0 - текущий бар)
input string Symbols_Sirname=INDICATOR_NAME"_Label_"; // Название для меток индикатора
input color Upsymbol_Color=clrDodgerBlue; // Цвет символа роста
input color Dnsymbol_Color=clrMagenta; // Цвет символа падения
input color IndName_Color=clrDarkOrchid; // Цвет названия индикатора
input uint Symbols_Size=60; // Размер символов сигнала
input uint Font_Size=10; // Размер шрифта названия индикатора
input int X_1=5; // Смещение названия по горизонтали
input int Y_1=-15; // Смещение названия по вертикали
input bool ShowIndName=true; // Отображение названия индикатора
input ENUM_BASE_CORNER WhatCorner=CORNER_RIGHT_UPPER; // Угол расположения
input uint X_=0; // Смещение по горизонтали
input uint Y_=20; // Смещение по вертикали
//---- настройки алертов
input ENUM_ALERT_MODE alert_mode=OnlySound; // Вариант индикации срабатывания
input uint AlertCount=0; // Количество подаваемых алертов
//+-----------------------------------+
//---- объявление целочисленных переменных для хендлов индикаторов
int Ind_Handle;
//---- объявление целочисленных переменных начала отсчета данных
int min_rates_total;
//---- объявление целочисленных переменных расположения индексов по горизонтали и вертикали
uint X_0,Yn,X_1_,Y_1_;
//---- объявление переменных для имен меток
string name0,name1,IndName,Symb;
//+------------------------------------------------------------------+
//| Получение таймфрейма в виде строки |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
{
//----
return(StringSubstr(EnumToString(timeframe),7,-1));
//----
}
//+------------------------------------------------------------------+
//| Создание текстовой метки |
//+------------------------------------------------------------------+
void CreateTLabel(long chart_id, // идентификатор графика
string name, // имя объекта
int nwin, // индекс окна
ENUM_BASE_CORNER corner, // положение угла привязки
ENUM_ANCHOR_POINT point, // положение точки привязки
int X, // дистанция в пикселях по оси X от угла привязки
int Y, // дистанция в пикселях по оси Y от угла привязки
string text, // текст
string textTT, // текст всплывающей подсказки
color Color, // цвет текста
string Font, // шрифт текста
int Size) // размер шрифта
{
//----
ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0);
ObjectSetInteger(chart_id,name,OBJPROP_CORNER,corner);
ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,point);
ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,X);
ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,Y);
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetString(chart_id,name,OBJPROP_FONT,Font);
ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,Size);
ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,textTT);
ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); //объект на заднем плане
//----
}
//+------------------------------------------------------------------+
//| Переустановка текстовой метки |
//+------------------------------------------------------------------+
void SetTLabel(long chart_id, // идентификатор графика
string name, // имя объекта
int nwin, // индекс окна
ENUM_BASE_CORNER corner, // положение угла привязки
ENUM_ANCHOR_POINT point, // положение точки привязки
int X, // дистанция в пикселях по оси X от угла привязки
int Y, // дистанция в пикселях по оси Y от угла привязки
string text, // текст
string textTT, // текст всплывающей подсказки
color Color, // цвет текста
string Font, // шрифт текста
int Size) // размер шрифта
{
//----
if(ObjectFind(chart_id,name)==-1)
{
CreateTLabel(chart_id,name,nwin,corner,point,X,Y,text,textTT,Color,Font,Size);
}
else
{
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,X);
ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,Y);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,Size);
}
//----
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- инициализация переменных начала отсчёта данных
int ATR_Period=15;
min_rates_total=GetStartBars(DSmoothMethod,DPeriod,DPhase)+1;
min_rates_total+=GetStartBars(SSmoothMethod,SPeriod,SPhase);
min_rates_total+=MathMax(min_rates_total,ATR_Period)+1;
min_rates_total+=int(SignalBar);
//---- инициализация переменных
if(Symbol_!="") Symb=Symbol_;
else Symb=Symbol();
//----
X_0=X_;
Yn=Y_+5;
//----
name0=Symbols_Sirname+"0";
if(ShowIndName)
{
Y_1_=Yn+Y_1;
X_1_=X_0+X_1;
name1=Symbols_Sirname+"1";
StringConcatenate(IndName,INDICATOR_NAME,"(",Symb," ",GetStringTimeframe(Timeframe),")");
}
//---- получение хендла индикатора METRO_XRSX_Sign
Ind_Handle=iCustom(Symb,Timeframe,"METRO_XRSX_Sign",DSmoothMethod,DPeriod,DPhase,SSmoothMethod,SPeriod,SPhase,IPC,StepSizeFast,StepSizeSlow);
if(Ind_Handle==INVALID_HANDLE)
{
Print(" Не удалось получить хендл индикатора METRO_XRSX_Sign");
return(INIT_FAILED);
}
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
IndicatorSetString(INDICATOR_SHORTNAME,INDICATOR_NAME);
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- завершение инициализации
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void Deinit()
{
//----
if(ObjectFind(0,name0)!=-1) ObjectDelete(0,name0);
if(ObjectFind(0,name1)!=-1) ObjectDelete(0,name1);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//----
Deinit();
//----
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- проверка количества баров на достаточность для расчета
if(BarsCalculated(Ind_Handle)<min_rates_total) return(RESET);
if(BarsCalculated(Ind_Handle)<Bars(Symb,Timeframe)) return(prev_calculated);
//---- объявление локальных переменных
int limit,trend;
double UpSign[],DnSign[];
datetime TIME[1];
color Color0=clrNONE;
string SignSymbol;
static datetime prev_time;
static int trend_;
bool signal=false;
static uint buycount=0,sellcount=0;
//---- копируем вновь появившиеся данные в массивы
if(CopyTime(Symb,Timeframe,SignalBar,1,TIME)<=0) return(RESET);
//---- расчеты необходимого количества копируемых данных для функции CopyBuffer
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
{
prev_time=time[0];
trend_=0;
}
//---- копируем вновь появившиеся данные в массивы
if(CopyBuffer(Ind_Handle,0,TIME[0],prev_time,DnSign)<=0) return(RESET);
if(CopyBuffer(Ind_Handle,1,TIME[0],prev_time,UpSign)<=0) return(RESET);
//---- расчеты стартового номера limit для цикла пересчета баров
limit=ArraySize(UpSign)-1;
trend=trend_;
//---- индексация элементов в массивах, как в таймсериях
ArraySetAsSeries(DnSign,true);
ArraySetAsSeries(UpSign,true);
//---- ставим счетчики алертов в исходное положение
if(TIME[0]!=prev_time && AlertCount)
{
buycount=AlertCount;
sellcount=AlertCount;
}
//---- основной цикл расчета индикатора
for(int bar=limit; bar>=0 && !IsStopped(); bar--)
{
if(UpSign[bar]&&UpSign[bar]!=ENAM_EMPTY_VALUE) {trend=+1; if(!bar) signal=true;}
if(DnSign[bar]&&DnSign[bar]!=ENAM_EMPTY_VALUE) {trend=-1; if(!bar) signal=true;}
if(bar || SignalBar) trend_=trend;
}
//----
if(trend>0)
{
Color0=Upsymbol_Color;
//----
if(signal)
{
SignSymbol=UP_SIGNAL_SYMBOL;
if(buycount)
{
switch(alert_mode)
{
case OnlyAlert: Alert(IndName+": "+BUY_ALERT_TEXT); break;
case OnlySound: PlaySound(BUY_SOUND); break;
}
//----
buycount--;
}
}
else SignSymbol=UP_TREND_SYMBOL;
}
//----
if(trend<0)
{
Color0=Dnsymbol_Color;
//----
if(signal)
{
SignSymbol=DN_SIGNAL_SYMBOL;
if(sellcount)
{
switch(alert_mode)
{
case OnlyAlert: Alert(IndName+": "+SELL_ALERT_TEXT); break;
case OnlySound: PlaySound(SELL_SOUND); break;
}
//----
sellcount--;
}
}
else SignSymbol=DN_TREND_SYMBOL;
}
//----
if(trend)
{
if(ShowIndName)
SetTLabel(0,name1,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_1_,Y_1_,IndName,IndName,IndName_Color,NAMES_SYMBOLS_FONT,Font_Size);
if(signal) SetTLabel(0,name0,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_0,Yn,SignSymbol,IndName,Color0,SIGNAL_SYMBOLS_FONT,Symbols_Size);
else SetTLabel(0,name0,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_0,Yn,SignSymbol,IndName,Color0,TREND_SYMBOLS_FONT,Symbols_Size);
}
else Deinit();
//----
ChartRedraw(0);
prev_time=TIME[0];
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `metro_xrsx_sign.mq5`
### Screenshots:
![Screenshot](picture__64.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,258 @@
//+------------------------------------------------------------------+
//| METRO_XRSX_Sign.mq5 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "E-mail: igorad2004@list.ru"
#property description "METRO_XRSX"
//---- номер версии индикатора
#property version "1.10"
//--- отрисовка индикатора в главном окне
#property indicator_chart_window
//--- для расчета и отрисовки индикатора использовано два буфера
#property indicator_buffers 2
//--- использовано всего два графических построения
#property indicator_plots 2
//+----------------------------------------------+
//| Параметры отрисовки медвежьего индикатора |
//+----------------------------------------------+
//--- отрисовка индикатора 1 в виде символа
#property indicator_type1 DRAW_ARROW
//--- в качестве цвета медвежьей линии индикатора использован Magenta цвет
#property indicator_color1 clrMagenta
//--- толщина линии индикатора 1 равна 4
#property indicator_width1 4
//--- отображение медвежьей метки индикатора
#property indicator_label1 "METRO_XRSX Sell"
//+----------------------------------------------+
//| Параметры отрисовки бычьего индикатора |
//+----------------------------------------------+
//--- отрисовка индикатора 2 в виде символа
#property indicator_type2 DRAW_ARROW
//--- в качестве цвета бычьей линии индикатора использован DeepSkyBlue цвет
#property indicator_color2 clrDeepSkyBlue
//--- толщина линии индикатора 2 равна 4
#property indicator_width2 4
//--- отображение бычьей метки индикатора
#property indicator_label2 "METRO_XRSX Buy"
//+----------------------------------------------+
//| Объявление констант |
//+----------------------------------------------+
#define RESET 0 // константа для возврата терминалу команды на пересчет индикатора
//+----------------------------------------------+
//| Описание класса CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//| Объявление перечислений |
//+----------------------------------------------+
enum Applied_price_ //тип константы
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
PRICE_HIGH_, //High
PRICE_LOW_, //Low
PRICE_MEDIAN_, //Median Price (HL/2)
PRICE_TYPICAL_, //Typical Price (HLC/3)
PRICE_WEIGHTED_, //Weighted Close (HLCC/4)
PRICE_SIMPL_, //Simpl Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+----------------------------------------------+
//| Объявление перечислений |
//+----------------------------------------------+
/*enum Smooth_Method - объявлено в файле SmoothAlgorithms.mqh
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA, //AMA
}; */
//+----------------------------------------------+
//| Входные параметры индикатора |
//+----------------------------------------------+
input Smooth_Method DSmoothMethod=MODE_JJMA; // Метод усреднения цены
input int DPeriod=15; // Период скользящей средней
input int DPhase=100; // Параметр усреднения скольщяшей средней
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- для VIDIA это период CMO, для AMA это период медленной скользящей
input Smooth_Method SSmoothMethod=MODE_JurX; //метод усреднения сигнальной линии
input int SPeriod=7; // Период сигнальной линии
input int SPhase=100; // Параметр сигнальной линии
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- для VIDIA это период CMO, для AMA это период медленной скользящей
input Applied_price_ IPC=PRICE_CLOSE; // Ценовая константа
input int StepSizeFast=5; // Быстрый шаг
input int StepSizeSlow=15; // Медленный шаг
//+----------------------------------------------+
//--- объявление динамических массивов, которые в дальнейшем
//--- будут использованы в качестве индикаторных буферов
double SellBuffer[];
double BuyBuffer[];
//---- объявление целочисленных переменных для хендлов индикаторов
int XRSX_Handle,ATR_Handle;
//---- объявление целочисленных переменных начала отсчета данных
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- инициализация переменных начала отсчета данных
int ATR_Period=15;
min_rates_total=GetStartBars(DSmoothMethod,DPeriod,DPhase)+1;
min_rates_total+=GetStartBars(SSmoothMethod,SPeriod,SPhase);
min_rates_total+=MathMax(min_rates_total,ATR_Period)+1;
//--- получение хендла индикатора ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Не удалось получить хендл индикатора ATR");
return(INIT_FAILED);
}
//---- получение хендла индикатора XRSX
XRSX_Handle=iCustom(NULL,0,"XRSX",DSmoothMethod,DPeriod,DPhase,SSmoothMethod,SPeriod,SPhase,IPC,0,1);
if(XRSX_Handle==INVALID_HANDLE)
{
Print(" Не удалось получить хендл индикатора XRSX");
return(INIT_FAILED);
}
//--- превращение динамического массива в индикаторный буфер
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- осуществление сдвига начала отсчета отрисовки индикатора 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- символ для индикатора
PlotIndexSetInteger(0,PLOT_ARROW,174);
//---- установка значений индикатора, которые не будут видимы на графике
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(SellBuffer,true);
//--- превращение динамического массива в индикаторный буфер
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- осуществление сдвига начала отсчета отрисовки индикатора 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- символ для индикатора
PlotIndexSetInteger(1,PLOT_ARROW,174);
//---- установка значений индикатора, которые не будут видимы на графике
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(BuyBuffer,true);
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
IndicatorSetString(INDICATOR_SHORTNAME,"METRO_Sign");
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- завершение инициализации
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &time[],
const double &open[],
const double& high[], // ценовой массив максимумов цены для расчета индикатора
const double& low[], // ценовой массив минимумов цены для расчета индикатора
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- проверка количества баров на достаточность для расчета
if(BarsCalculated(XRSX_Handle)<rates_total || BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- объявление локальных переменных
int limit,to_copy,bar,ftrend,strend;
double fmin0,fmax0,smin0,smax0,XRSX0,XRSX[],ATR[],fast=0.0,slow=0.0;
static double fmax1,fmin1,smin1,smax1,fast_prev,slow_prev;
static int ftrend_,strend_;
//---- индексация элементов в массивах как в таймсериях
ArraySetAsSeries(XRSX,true);
ArraySetAsSeries(ATR,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//---- расчет стартового номера first для цикла пересчета баров
if(prev_calculated>rates_total || prev_calculated<=0) // проверка на первый старт расчета индикатора
{
limit=rates_total-1; // стартовый номер для расчета всех баров
fmin1=+999999;
fmax1=-999999;
smin1=+999999;
smax1=-999999;
ftrend_=0;
strend_=0;
fast_prev=0.0;
slow_prev=0.0;
}
else limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
to_copy=limit+1;
//---- копируем вновь появившиеся данные в массив
if(CopyBuffer(XRSX_Handle,0,0,to_copy,XRSX)<=0) return(RESET);
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
//---- восстанавливаем значения переменных
ftrend=ftrend_;
strend=strend_;
//---- основной цикл расчета индикатора
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
//---- запоминаем значения переменных перед прогонами на текущем баре
if(rates_total!=prev_calculated && bar==0)
{
ftrend_=ftrend;
strend_=strend;
}
//---
XRSX0=(XRSX[bar]+100)/2;
//---
fmax0=XRSX0+2*StepSizeFast;
fmin0=XRSX0-2*StepSizeFast;
//---
if(XRSX0>fmax1) ftrend=+1;
if(XRSX0<fmin1) ftrend=-1;
//---
if(ftrend>0 && fmin0<fmin1) fmin0=fmin1;
if(ftrend<0 && fmax0>fmax1) fmax0=fmax1;
//---
smax0=XRSX0+2*StepSizeSlow;
smin0=XRSX0-2*StepSizeSlow;
//---
if(XRSX0>smax1) strend=+1;
if(XRSX0<smin1) strend=-1;
//---
if(strend>0 && smin0<smin1) smin0=smin1;
if(strend<0 && smax0>smax1) smax0=smax1;
//---
if(ftrend>0) fast=fmin0+StepSizeFast;
if(ftrend<0) fast=fmax0-StepSizeFast;
if(strend>0) slow=smin0+StepSizeSlow;
if(strend<0) slow=smax0-StepSizeSlow;
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(fast_prev<=slow_prev && fast>slow) BuyBuffer[bar]=low[bar]-ATR[bar]*3/8;
if(fast_prev>=slow_prev && fast<slow) SellBuffer[bar]=high[bar]+ATR[bar]*3/8;
//---
if(bar>0)
{
fmin1=fmin0;
fmax1=fmax0;
smin1=smin0;
smax1=smax0;
fast_prev=fast;
slow_prev=slow;
}
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `mfi_smoothed.mq5`
### Screenshots:
![Screenshot](cb__56.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `mfi_price.mq5`
### Screenshots:
![Screenshot](picture__3.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `mficandlekeltner.mq5`
### Screenshots:
![Screenshot](picture__5.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `mfi_chart.mq5`
### Screenshots:
![Screenshot](picture__69.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,233 @@
//+---------------------------------------------------------------------+
//| MFI_Chart.mq5 |
//| Copyright © 2015, Yuriy Tokman (YTG) |
//| http://ytg.com.ua/ |
//+---------------------------------------------------------------------+
//| Для работы индикатора следует положить файл SmoothAlgorithms.mqh |
//| в папку (директорию): каталог_данных_терминала\\MQL5\Include |
//+---------------------------------------------------------------------+
#property copyright "Copyright © 2015, Yuriy Tokman (YTG)"
#property link "http://ytg.com.ua/"
#property description "Индикатор MFI на ценовом графике"
//---- номер версии индикатора
#property version "1.00"
//---- отрисовка индикатора в главном окне
#property indicator_chart_window
//---- количество индикаторных буферов 4
#property indicator_buffers 4
//---- использовано всего три графических построения
#property indicator_plots 3
//+----------------------------------------------+
//|Параметры отрисовки индикатора MFI Cloud |
//+----------------------------------------------+
//---- отрисовка индикатора в виде облака
#property indicator_type1 DRAW_FILLING
//---- в качестве цветов облака индикатора использованы
#property indicator_color1 clrLavender
//---- отображение метки индикатора
#property indicator_label1 "MFI Cloud"
//+----------------------------------------------+
//| Параметры отрисовки индикатора XMA |
//+----------------------------------------------+
//---- отрисовка индикатора 2 в виде линии
#property indicator_type2 DRAW_LINE
//---- в качестве цвета линии индикатора использован цвет MediumBlue
#property indicator_color2 clrMediumBlue
//---- линия индикатора 2 - непрерывная кривая
#property indicator_style2 STYLE_SOLID
//---- толщина линии индикатора 2 равна 2
#property indicator_width2 2
//---- отображение метки индикатора
#property indicator_label2 "XMA"
//+----------------------------------------------+
//| Параметры отрисовки индикатора MFI |
//+----------------------------------------------+
//---- отрисовка индикатора 3 в виде линии
#property indicator_type3 DRAW_LINE
//---- в качестве цвета линии индикатора использован цвет Crimson
#property indicator_color3 clrCrimson
//---- линия индикатора 3 - непрерывная кривая
#property indicator_style3 STYLE_SOLID
//---- толщина линии индикатора 3 равна 2
#property indicator_width3 2
//---- отображение метки индикатора
#property indicator_label3 "MFI"
//+----------------------------------------------+
//| Объявление констант |
//+----------------------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора
//+----------------------------------------------+
//| Описание класса CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//---- объявление переменных класса CXMA из файла SmoothAlgorithms.mqh
CXMA XMA1;
//+----------------------------------------------+
//| Объявление перечислений |
//+----------------------------------------------+
enum Applied_price_ //Тип константы
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
PRICE_HIGH_, //High
PRICE_LOW_, //Low
PRICE_MEDIAN_, //Median Price (HL/2)
PRICE_TYPICAL_, //Typical Price (HLC/3)
PRICE_WEIGHTED_, //Weighted Close (HLCC/4)
PRICE_SIMPL_, //Simpl Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+----------------------------------------------+
//| Объявление перечислений |
//+----------------------------------------------+
/*enum Smooth_Method - перечисление объявлено в файле SmoothAlgorithms.mqh
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA, //AMA
}; */
//+----------------------------------------------+
//| Входные параметры индикатора |
//+----------------------------------------------+
input uint PeriodMFI=14; // Период индикатора MFI
input ENUM_APPLIED_VOLUME VolumeType=VOLUME_TICK; // Объем
input Smooth_Method XMA_Method=MODE_SMMA; // Метод усреднения
input uint XLength=12; // Глубина усреднения
input int XPhase=15; // Параметр сглаживания
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- для VIDIA это период CMO, для AMA это период медленной скользящей
input double Dev=10.0; // Девиация ширины канала
input ENUM_APPLIED_PRICE Applied_price=PRICE_CLOSE; // Тип цены или handle
input int Level_MFI_UP = 70; // Уровень перекупленности
input int Level_MFI_DN = 30; // Уровень перепроданности
input int Shift=0; // Сдвиг индикатора по горизонтали в барах
//+----------------------------------------------+
//---- объявление динамических массивов, которые в дальнейшем
//---- будут использованы в качестве индикаторных буферов
double Line1Buffer[];
double Line2Buffer[];
double Line3Buffer[];
double Line4Buffer[];
//----
double dLevel_MFI_UP,dLevel_MFI_DN;
//---- объявление целочисленных переменных начала отсчета данных
int min_rates_total,min_rates_1;
//--- объявление целочисленных переменных для хендлов индикаторов
int Ind_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- инициализация переменных начала отсчета данных
min_rates_1=int(PeriodMFI);
min_rates_total=min_rates_1+GetStartBars(XMA_Method,XLength,XPhase);
//----
dLevel_MFI_UP=int(Level_MFI_UP-50)*_Point*Dev;
dLevel_MFI_DN=int(Level_MFI_DN-50)*_Point*Dev;
//--- получение хендла индикатора MFI
Ind_Handle=iMFI(Symbol(),NULL,PeriodMFI,VolumeType);
if(Ind_Handle==INVALID_HANDLE)
{
Print("Не удалось получить хендл индикатора MFI");
return(INIT_FAILED);
}
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(0,Line1Buffer,INDICATOR_DATA);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(1,Line2Buffer,INDICATOR_DATA);
//---- осуществление сдвига индикатора 1 по горизонтали на Shift
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчета отрисовки индикатора 1 на min_rates_total
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(2,Line3Buffer,INDICATOR_DATA);
//---- осуществление сдвига индикатора 2 по горизонтали на Shift
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчета отрисовки индикатора 2 на min_rates_total
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(3,Line4Buffer,INDICATOR_DATA);
//---- осуществление сдвига индикатора 3 по горизонтали на Shift
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчета отрисовки индикатора 3 на min_rates_total
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(Line1Buffer,true);
ArraySetAsSeries(Line2Buffer,true);
ArraySetAsSeries(Line3Buffer,true);
ArraySetAsSeries(Line4Buffer,true);
//---- инициализация переменной для короткого имени индикатора
string shortname;
StringConcatenate(shortname,"F_MFI(",PeriodMFI,")");
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- завершение инициализации
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- проверка количества баров на достаточность для расчета
if(BarsCalculated(Ind_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- Объявление переменных с плавающей точкой
double price,xma,MFI[];
//---- Объявление целочисленных переменных и получение уже посчитанных баров
int to_copy,limit,bar,maxbar=rates_total-1-min_rates_1;
//---- расчет стартового номера limit для цикла пересчета баров
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
{
limit=maxbar; // стартовый номер для расчета всех баров
}
else limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
//----
to_copy=limit+1;
//---- копируем вновь появившиеся данные в массивы
if(CopyBuffer(Ind_Handle,MAIN_LINE,0,to_copy,MFI)<=0) return(RESET);
//---- индексация элементов в массиве как в таймсерии
ArraySetAsSeries(MFI,true);
ArraySetAsSeries(open,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(close,true);
//---- Основной цикл расчета индикатора
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
price=PriceSeries(Applied_price,bar,open,low,high,close);
xma=XMA1.XMASeries(maxbar,prev_calculated,rates_total,XMA_Method,XPhase,XLength,price,bar,true);
Line3Buffer[bar]=xma;
Line4Buffer[bar]=xma+Dev*(MFI[bar]-50)*_Point;
Line1Buffer[bar]=xma+dLevel_MFI_UP;
Line2Buffer[bar]=xma+dLevel_MFI_DN;
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

@@ -0,0 +1,240 @@
//+---------------------------------------------------------------------+
//| MFI_Chart.mq5 |
//| Copyright © 2015, Yuriy Tokman (YTG) |
//| http://ytg.com.ua/ |
//+---------------------------------------------------------------------+
//| Для работы индикатора следует положить файл SmoothAlgorithms.mqh |
//| в папку (директорию): каталог_данных_терминала\\MQL5\Include |
//+---------------------------------------------------------------------+
#property copyright "Copyright © 2015, Yuriy Tokman (YTG)"
#property link "http://ytg.com.ua/"
#property description "Индикатор MFI на ценовом графике"
//---- номер версии индикатора
#property version "1.01"
//---- отрисовка индикатора в главном окне
#property indicator_chart_window
//---- количество индикаторных буферов 4
#property indicator_buffers 4
//---- использовано всего три графических построения
#property indicator_plots 3
//+----------------------------------------------+
//|Параметры отрисовки индикатора MFI Cloud |
//+----------------------------------------------+
//---- отрисовка индикатора в виде облака
#property indicator_type1 DRAW_FILLING
//---- в качестве цветов облака индикатора использованы
#property indicator_color1 clrLavender
//---- отображение метки индикатора
#property indicator_label1 "MFI Cloud"
//+----------------------------------------------+
//| Параметры отрисовки индикатора XMA |
//+----------------------------------------------+
//---- отрисовка индикатора 2 в виде линии
#property indicator_type2 DRAW_LINE
//---- в качестве цвета линии индикатора использован цвет MediumBlue
#property indicator_color2 clrMediumBlue
//---- линия индикатора 2 - непрерывная кривая
#property indicator_style2 STYLE_SOLID
//---- толщина линии индикатора 2 равна 2
#property indicator_width2 2
//---- отображение метки индикатора
#property indicator_label2 "XMA"
//+----------------------------------------------+
//| Параметры отрисовки индикатора MFI |
//+----------------------------------------------+
//---- отрисовка индикатора 3 в виде линии
#property indicator_type3 DRAW_LINE
//---- в качестве цвета линии индикатора использован цвет Crimson
#property indicator_color3 clrCrimson
//---- линия индикатора 3 - непрерывная кривая
#property indicator_style3 STYLE_SOLID
//---- толщина линии индикатора 3 равна 2
#property indicator_width3 2
//---- отображение метки индикатора
#property indicator_label3 "MFI"
//+----------------------------------------------+
//| объявление констант |
//+----------------------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора
//+----------------------------------------------+
//| Описание класса CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//---- объявление переменных класса CXMA из файла SmoothAlgorithms.mqh
CXMA XMA1;
//+----------------------------------------------+
//| объявление перечислений |
//+----------------------------------------------+
enum Applied_price_ //Тип константы
{
PRICE_CLOSE_ = 1, //Close
PRICE_OPEN_, //Open
PRICE_HIGH_, //High
PRICE_LOW_, //Low
PRICE_MEDIAN_, //Median Price (HL/2)
PRICE_TYPICAL_, //Typical Price (HLC/3)
PRICE_WEIGHTED_, //Weighted Close (HLCC/4)
PRICE_SIMPL_, //Simpl Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+----------------------------------------------+
//| объявление перечислений |
//+----------------------------------------------+
/*enum Smooth_Method - перечисление объявлено в файле SmoothAlgorithms.mqh
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA, //AMA
}; */
//+----------------------------------------------+
//| Входные параметры индикатора |
//+----------------------------------------------+
input uint PeriodMFI=14; // Период индикатора MFI
input ENUM_APPLIED_VOLUME VolumeType=VOLUME_TICK; // объём
input Smooth_Method XMA_Method=MODE_SMMA_; // метод усреднения
input uint XLength=12; // глубина усреднения
input int XPhase=15; // параметр сглаживания,
//---- для JJMA изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса;
//---- Для VIDIA это период CMO, для AMA это период медленной скользящей
input double Dev=10.0; // Девиация ширины канала
input Applied_price_ Applied_price=PRICE_CLOSE_; // тип цены или handle
input int Level_MFI_UP = 70; // уровень перекупленности
input int Level_MFI_DN = 30; // уровень перепроданности
input int Shift=0; // Сдвиг индикатора по горизонтали в барах
//+----------------------------------------------+
//---- объявление динамических массивов, которые в дальнейшем
//---- будут использованы в качестве индикаторных буферов
double Line1Buffer[];
double Line2Buffer[];
double Line3Buffer[];
double Line4Buffer[];
double dLevel_MFI_UP,dLevel_MFI_DN;
//---- объявление целочисленных переменных начала отсчета данных
int min_rates_total,min_rates_1;
//--- объявление целочисленных переменных для хендлов индикаторов
int Ind_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- инициализация переменных начала отсчета данных
min_rates_1=int(PeriodMFI);
min_rates_total=min_rates_1+GetStartBars(XMA_Method,XLength,XPhase);
dLevel_MFI_UP=int(Level_MFI_UP-50)*_Point*Dev;
dLevel_MFI_DN=int(Level_MFI_DN-50)*_Point*Dev;
//--- получение хендла индикатора MFI
Ind_Handle=iMFI(Symbol(),NULL,PeriodMFI,VolumeType);
if(Ind_Handle==INVALID_HANDLE)
{
Print("Не удалось получить хендл индикатора MFI");
return(INIT_FAILED);
}
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(0,Line1Buffer,INDICATOR_DATA);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(1,Line2Buffer,INDICATOR_DATA);
//---- осуществление сдвига индикатора 1 по горизонтали на Shift
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчета отрисовки индикатора 1 на min_rates_total
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(2,Line3Buffer,INDICATOR_DATA);
//---- осуществление сдвига индикатора 2 по горизонтали на Shift
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчета отрисовки индикатора 2 на min_rates_total
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(3,Line4Buffer,INDICATOR_DATA);
//---- осуществление сдвига индикатора 3 по горизонтали на Shift
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчета отрисовки индикатора 3 на min_rates_total
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(Line1Buffer,true);
ArraySetAsSeries(Line2Buffer,true);
ArraySetAsSeries(Line3Buffer,true);
ArraySetAsSeries(Line4Buffer,true);
//---- инициализации переменной для короткого имени индикатора
string shortname;
StringConcatenate(shortname,"F_MFI(",PeriodMFI,")");
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- завершение инициализации
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[]
)
{
//---- проверка количества баров на достаточность для расчёта
if(BarsCalculated(Ind_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- Объявление переменных с плавающей точкой
double price,xma,MFI[];
//---- Объявление целых переменных и получение уже посчитанных баров
int to_copy,limit,bar,maxbar=rates_total-1-min_rates_1;
//---- расчет стартового номера limit для цикла пересчета баров
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
{
limit=maxbar; // стартовый номер для расчета всех баров
}
else limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
to_copy=limit+1;
//---- копируем вновь появившиеся данные в массивы
if(CopyBuffer(Ind_Handle,MAIN_LINE,0,to_copy,MFI)<=0) return(RESET);
//---- индексация элементов в массиве как в таймсерии
ArraySetAsSeries(MFI,true);
ArraySetAsSeries(open,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(close,true);
//---- Основной цикл расчёта индикатора
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
price=PriceSeries(Applied_price,bar,open,low,high,close);
xma=XMA1.XMASeries(maxbar,prev_calculated,rates_total,XMA_Method,XPhase,XLength,price,bar,true);
Line3Buffer[bar]=xma;
Line4Buffer[bar]=xma+Dev*(MFI[bar]-50)*_Point;
Line1Buffer[bar]=xma+dLevel_MFI_UP;
Line2Buffer[bar]=xma+dLevel_MFI_DN;
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `MFI_Chart.mq5`
### Screenshots:
![Screenshot](picture__77.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `mfi_histogram.mq5`
### Screenshots:
![Screenshot](picture__28.png)
> Made with ❤️ for the trading community.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,152 @@
//+------------------------------------------------------------------+
//| MFI_Histogram.mq5 |
//| Copyright © 2016, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
//---- номер версии индикатора
#property version "1.00"
//---- отрисовка индикатора в отдельном окне
#property indicator_separate_window
//---- количество индикаторных буферов 3
#property indicator_buffers 3
//---- использовано одно графическое построение
#property indicator_plots 1
//+-----------------------------------+
//| объявление констант |
//+-----------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора
//+-----------------------------------+
//| Параметры отрисовки индикатора |
//+-----------------------------------+
//---- отрисовка индикатора в виде гистограммы
#property indicator_type1 DRAW_COLOR_HISTOGRAM2
//---- в качестве цветов индикатора использованы
#property indicator_color1 clrMediumTurquoise,clrGray,clrGold
//---- линия индикатора - сплошная
#property indicator_style1 STYLE_SOLID
//---- толщина линии индикатора равна 2
#property indicator_width1 2
//---- отображение метки индикатора
#property indicator_label1 "MFI_Histogram"
//+-----------------------------------+
//| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА |
//+-----------------------------------+
input uint MFIPeriod=14; // период индикатора
input ENUM_APPLIED_VOLUME VolumeType=VOLUME_TICK; // объём
input uint HighLevel=70; // уровень перекупленности
input uint LowLevel=30; // уровень перепроданности
input int Shift=0; // Сдвиг индикатора по горизонтали в барах
//+-----------------------------------+
//---- Объявление целых переменных начала отсчёта данных
int min_rates_total;
//---- объявление динамических массивов, которые будут в
// дальнейшем использованы в качестве индикаторных буферов
double UpBuffer[],DnBuffer[],ColorBuffer[];
//---- Объявление целых переменных для хендлов индикаторов
int MFI_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- Инициализация переменных начала отсчёта данных
min_rates_total=int(MFIPeriod);
//---- получение хендла индикатора iMFI
MFI_Handle=iMFI(NULL,0,MFIPeriod,VolumeType);
if(MFI_Handle==INVALID_HANDLE)
{
Print(" Не удалось получить хендл индикатора iMFI");
return(INIT_FAILED);
}
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(0,UpBuffer,INDICATOR_DATA);
//---- осуществление сдвига начала отсчёта отрисовки индикатора
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- установка значений индикатора, которые не будут видимы на графике
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- осуществление сдвига индикатора по горизонтали на InpKijun
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(UpBuffer,true);
//---- превращение динамического массива в индикаторный буфер
SetIndexBuffer(1,DnBuffer,INDICATOR_DATA);
//---- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(DnBuffer,true);
//---- превращение динамического массива в цветовой, индексный буфер
SetIndexBuffer(2,ColorBuffer,INDICATOR_COLOR_INDEX);
//---- индексация элементов в буфере как в таймсерии
ArraySetAsSeries(ColorBuffer,true);
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
IndicatorSetString(INDICATOR_SHORTNAME,"MFI_Histogram("+string(MFIPeriod)+")");
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- количество горизонтальных уровней индикатора 3
IndicatorSetInteger(INDICATOR_LEVELS,3);
//---- значения горизонтальных уровней индикатора
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,HighLevel);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,LowLevel);
//---- в качестве цветов линий горизонтальных уровней использованы серый и розовый цвета
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrGreen);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGray);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrBrown);
//---- в линии горизонтального уровня использован короткий штрих-пунктир
IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_DASHDOTDOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_DASHDOTDOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DASHDOTDOT);
//---- завершение инициализации
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &Tick_Volume[],
const long &Volume[],
const int &Spread[]
)
{
//---- проверка количества баров на достаточность для расчёта
if(BarsCalculated(MFI_Handle)<rates_total || rates_total<min_rates_total) return(RESET);
//---- объявления локальных переменных
int to_copy,limit,bar;
//---- расчет стартового номера limit для цикла пересчета баров
if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора
{
limit=rates_total-min_rates_total-1; // стартовый номер для расчета всех баров
}
else limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
to_copy=limit+1;
//---- копируем вновь появившиеся данные в массивы
if(CopyBuffer(MFI_Handle,0,0,to_copy,UpBuffer)<=0) return(RESET);
//---- основной цикл раскраски индикатора
for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
DnBuffer[bar]=50.0;
int clr=1.0;
if(UpBuffer[bar]>HighLevel) clr=0.0;
else if(UpBuffer[bar]<LowLevel) clr=2.0;
ColorBuffer[bar]=clr;
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@@ -0,0 +1,21 @@
# 🚀 Unlock the Power of Trading!
Welcome to this open-source trading project. Here you will find powerful tools to enhance your trading journey. If you find this project useful, please consider starring ⭐, sharing, or donating to support further development!
---
**Support the project:**
- Star this repository on GitHub
- Share it with your trading friends
- [Donate here](https://www.paypal.com/donate/?hosted_button_id=YOUR_BUTTON_ID) to help us grow!
---
## Files included:
### Source Files:
- `mfi_histogram_round.mq5`
### Screenshots:
![Screenshot](picture__32.png)
> Made with ❤️ for the trading community.

Some files were not shown because too many files have changed in this diff Show More