Indicators Used
1
Views
0
Downloads
0
Favorites
nratiosign
//+---------------------------------------------------------------------+
//| NRatioSign.mq5 |
//| Copyright © 2006, Rosh |
//| http://konkop.narod.ru/nrma.htm |
//+---------------------------------------------------------------------+
//| Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéë SmoothAlgorithms.mqh |
//| â ïàïêó (äèðåêòîðèþ): êàòàëîã_äàííûõ_òåðìèíàëà\\MQL5\Include |
//+---------------------------------------------------------------------+
#property copyright "Copyright © 2006, Rosh"
#property link "http://konkop.narod.ru/nrma.htm"
//--- íîìåð âåðñèè èíäèêàòîðà
#property version "1.01"
//--- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî äâà áóôåðà
#property indicator_buffers 2
//--- èñïîëüçîâàíî äâà ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 2
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ñèìâîëà
#property indicator_type1 DRAW_ARROW
//--- â êà÷åñòâå öâåòà ìåäâåæüåé ëèíèè èíäèêàòîðà èñïîëüçîâàí DeepPink öâåò
#property indicator_color1 clrDeepPink
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 4
#property indicator_width1 4
//--- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label1 "NRatioSign Sell"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üãî èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//--- â êà÷åñòâå öâåòà áû÷åé ëèíèè èíäèêàòîðà èñïîëüçîâàí DodgerBlue öâåò
#property indicator_color2 clrDodgerBlue
//--- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 4
#property indicator_width2 4
//--- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label2 "NRatioSign Buy"
//+----------------------------------------------+
//| Îïèñàíèå êëàññà CXMA |
//+----------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+----------------------------------------------+
//--- îáúÿâëåíèå ïåðåìåííûõ êëàññà CXMA èç ôàéëà SmoothAlgorithms.mqh
CXMA XMA1;
//+----------------------------------------------+
//| îáúÿâëåíèå êîíñòàíò |
//+----------------------------------------------+
#define RESET 0 // Êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷åò èíäèêàòîðà
//+----------------------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
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_, //Simple Price (OC/2)
PRICE_QUARTER_, //Quarted Price (HLOC/4)
PRICE_TRENDFOLLOW0_, //TrendFollow_1 Price
PRICE_TRENDFOLLOW1_, //TrendFollow_2 Price
PRICE_DEMARK_ //Demark Price
};
//+----------------------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
enum Alg_Method
{
MODE_IN, //Àëãîðèòì íà âõîäå â çîíû ÏÇ è ÏÏ
MODE_OUT //Àëãîðèòì íà âûõîäå â çîíû ÏÇ è ÏÏ
};
//+----------------------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+----------------------------------------------+
/*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_SMA; // Ìåòîä óñðåäíåíèÿ
input int XLength=3; // Ãëóáèíà ñãëàæèâàíèÿ
input int XPhase=15; // Ïàðàìåòð ñãëàæèâàíèÿ
//--- XPhase: äëÿ JJMA èçìåíÿåòñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
//--- XPhase: äëÿ VIDIA ýòî ïåðèîä CMO, äëÿ AMA ýòî ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input Applied_price_ IPC=PRICE_CLOSE; // Öåíîâàÿ êîíñòàíòà
input double Kf=1;
input double Fast=2;
input double Sharp=2;
input Alg_Method Mode=MODE_OUT; // Ïðîáîéíûé àëãîðèòì
input uint NRatio_UpLevel=80; // Óðîâåíü ïåðåêóïëåííîñòè
input uint NRatio_DnLevel=20; // Óðîâåíü ïåðåïðîäàííîñòè
input int Shift=0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double SellBuffer[];
double BuyBuffer[];
//--- îáúÿâëåíèå ïåðåìåííîé çíà÷åíèÿ âåðòèêàëüíîãî ñäâèãà ìóâèíãà
double dF;
//--- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
int ATR_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
min_rates_total=XMA1.GetStartBars(XMA_Method,XLength,XPhase)+1;
int ATR_Period=10;
min_rates_total=int(MathMax(min_rates_total+1,ATR_Period));
//--- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ
XMA1.XMALengthCheck("XLength",XLength);
XMA1.XMAPhaseCheck("XPhase",XPhase,XMA_Method);
//--- èíèöèàëèçàöèÿ êîíñòàíò
dF=2.0/(1.0+Fast);
//--- ïîëó÷åíèå õåíäëà èíäèêàòîðà ATR
ATR_Handle=iATR(NULL,0,ATR_Period);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
return(INIT_FAILED);
}
//---
if(NRatio_UpLevel<=NRatio_DnLevel)
{
Print("Óðîâåíü ïåðåêóïëåííîñòè âñåãäà äîëæåí áûòü áîëüøå óðîâíÿ ïåðåïðîäàííîñòè!!!");
return(INIT_FAILED);
}
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(0,PLOT_ARROW,175);
//--- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(1,PLOT_ARROW,175);
//--- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
string Smooth1=XMA1.GetString_MA_Method(XMA_Method);
StringConcatenate(shortname,"NRatioSign(",XLength,", ",Smooth1,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- çàâåðøåíèå èíèöèàëèçàöèè
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(rates_total<min_rates_total) return(0);
//--- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
double price,NRTR0,LPrice,HPrice,Oscil,xOscil,ATR[1],NRatio0;
static double NRTR1,NRatio1;
//--- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ
int first,bar,Trend0;
static int Trend1;
//--- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
first=1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
bar=first-1;
price=PriceSeries(IPC,bar,open,low,high,close);
NRatio1=50;
if(close[first]>open[first])
{
Trend1=+1;
NRTR1=NormalizeDouble(price*(1.0-Kf*0.01),_Digits);
}
else
{
Trend1=-1;
NRTR1=NormalizeDouble(price*(1.0+Kf*0.01),_Digits);
}
}
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
//--- âûçîâ ôóíêöèè PriceSeries äëÿ ïîëó÷åíèÿ âõîäíîé öåíû price
price=PriceSeries(IPC,bar,open,low,high,close);
NRTR0=NRTR1;
Trend0=Trend1;
//---
if(Trend1>=0)
{
if(price<NRTR1)
{
Trend0=-1;
NRTR0=NormalizeDouble(price*(1.0+Kf*0.01),_Digits);
}
else
{
Trend0=+1;
LPrice=NormalizeDouble(price*(1.0-Kf*0.01),_Digits);
if(LPrice>NRTR1) NRTR0=LPrice;
else NRTR0=NRTR1;
}
}
//---
if(Trend1<=0)
{
if(price>NRTR1)
{
Trend0=+1;
NRTR0=NormalizeDouble(price*(1.0-Kf*0.01),_Digits);
}
else
{
Trend0=-1;
HPrice=NormalizeDouble(price*(1.0+Kf*0.01),_Digits);
if(HPrice<NRTR1) NRTR0=HPrice;
else NRTR0=NRTR1;
}
}
//---
Oscil=(100.0*MathAbs(price-NRTR0)/price)/Kf;
xOscil=XMA1.XMASeries(1,prev_calculated,rates_total,XMA_Method,XPhase,XLength,Oscil,bar,false);
NRatio0=100*MathPow(xOscil,Sharp);
//---
BuyBuffer[bar]=0.0;
SellBuffer[bar]=0.0;
//---
if(Mode==MODE_IN)
{
if(NRatio0>NRatio_UpLevel && NRatio1<=NRatio_UpLevel)
{
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(ATR_Handle,0,time[bar],1,ATR)<=0) return(RESET);
BuyBuffer[bar]=low[bar]-ATR[0]*3/8;
}
if(NRatio0<NRatio_DnLevel && NRatio1>=NRatio_DnLevel)
{
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(ATR_Handle,0,time[bar],1,ATR)<=0) return(RESET);
SellBuffer[bar]=high[bar]+ATR[0]*3/8;
}
}
else
{
if(NRatio0<NRatio_UpLevel && NRatio1>=NRatio_UpLevel)
{
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(ATR_Handle,0,time[bar],1,ATR)<=0) return(RESET);
SellBuffer[bar]=high[bar]+ATR[0]*3/8;
}
if(NRatio0>NRatio_DnLevel && NRatio1<=NRatio_DnLevel)
{
//--- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâ
if(CopyBuffer(ATR_Handle,0,time[bar],1,ATR)<=0) return(RESET);
BuyBuffer[bar]=low[bar]-ATR[0]*3/8;
}
}
//---
if(bar<rates_total-1)
{
Trend1=Trend0;
NRTR1=NRTR0;
NRatio1=NRatio0;
}
}
//---
return(rates_total);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---