Initial commit: MQL5 Indicators Collection (MetaTrader 5) - Part 3
@@ -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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
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:
|
||||

|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
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);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
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:
|
||||

|
||||
|
||||
> Made with ❤️ for the trading community.
|
||||