Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #property indicator_separate_window
- #property indicator_buffers 1
- #property indicator_color1 Red
- #property indicator_level1 0
- #property indicator_level2 50
- #property indicator_level3 -50
- #property indicator_levelcolor Gray
- #property indicator_levelstyle 2
- extern int NST_period = 20;
- extern int SmLen = 10;
- double NST[];
- double RawNST[];
- int init()
- {
- if(SmLen < 5) SmLen = 5;
- else if(SmLen > 15) SmLen = 15;
- string nstname = "NST(" + NST_period + ", " + SmLen + ")";
- IndicatorShortName(nstname);
- IndicatorDigits(0);
- IndicatorBuffers(2);
- SetIndexBuffer(0, NST);
- SetIndexLabel(0, nstname);
- SetIndexBuffer(1, RawNST);
- return(0);
- }
- int start()
- {
- int limit, i, ii, counted_bars = IndicatorCounted();
- if(Bars <= NST_period + 3*SmLen) return(0);
- if(counted_bars < 0) counted_bars = 0;
- if(counted_bars > NST_period) limit = Bars - counted_bars;
- else limit = Bars - NST_period - 1;
- for(i = limit; i >= 0; i--)
- {
- double SumWgt = 0, SumDnom = 0, HghAry, LowAry, RngAry, FrcAry, TmeAry, WgtAry;
- for(ii = 0; ii <= NST_period; ii++)
- {
- HghAry = iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, ii, i));
- LowAry = iLow(NULL, 0, iLowest(NULL, 0, MODE_LOW, ii, i));
- RngAry = HghAry - LowAry;
- if(RngAry == 0) FrcAry = 0; else FrcAry = (Close[i] - LowAry) / RngAry;
- TmeAry = 1 / MathPow(ii+1, 0.5);
- WgtAry = TmeAry * FrcAry;
- SumWgt += WgtAry;
- SumDnom += TmeAry;
- }
- RawNST[i] = (200 * SumWgt / SumDnom) - 100;
- }
- double ExpSmooth = 2, XAvg1, XAvg2, XAvg3, TemaNST;
- ExpSmooth = ExpSmooth / (SmLen + 1);
- for(i = Bars - NST_period - 1; i >= 0; i--)
- {
- XAvg1 += ExpSmooth * (RawNST[i] - XAvg1);
- XAvg2 += ExpSmooth * (XAvg1 - XAvg2);
- XAvg3 += ExpSmooth * (XAvg2 - XAvg3);
- TemaNST = 3 * XAvg1 - 3 * XAvg2 + XAvg3;
- if(i < Bars - NST_period - 1 - 3*SmLen)
- {
- if(TemaNST > 85) NST[i] = MathRound(85 + (TemaNST - 85) / 2);
- else if(TemaNST < -85) NST[i] = MathRound(-85 - (MathAbs(TemaNST) - 85) / 2);
- else NST[i] = MathRound(TemaNST);
- }
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement