Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Ocn_BTXx version 1.2
- #property copyright "© jim sloman, jma © mark jurik, for metatrader reprogrammed by udc"
- #property link "udc@seznam.cz"
- #property indicator_separate_window
- #property indicator_buffers 6
- #property indicator_color1 Magenta
- #property indicator_color2 MediumVioletRed
- #property indicator_color3 MediumVioletRed
- #property indicator_color4 MediumVioletRed
- #property indicator_color5 Lime
- #property indicator_color6 Red
- #property indicator_level1 35
- #property indicator_levelcolor Gray
- #property indicator_levelstyle 2
- #property indicator_minimum 0
- #property indicator_maximum 100
- extern bool Show_Histogram = false;
- extern int BTX_period = 40;
- extern int SmLen = 20;
- extern bool Use_JMA_instead_TEMA = false;
- extern double JMA_Length = 10;
- extern int JMA_Phase = 50;
- extern int MaxBars = 0;
- extern bool Show_SD = true;
- extern int SD_len = 20;
- extern double SD_up = 1.5;
- extern double SD_dn = 1.5;
- extern bool Show_SD_up = true;
- extern bool Show_SD_dn = true;
- extern bool Show_SD_md = true;
- extern bool BTX_2line_based_colors = false;
- extern bool Colors_use_threshold = true;
- extern int Threshold = 35;
- double BTX[];
- double SD[];
- double SD2[];
- double SD3[];
- double BTXbull[];
- double BTXbear[];
- double RawBTX[];
- double maBTX[];
- int oldbars;
- double RawBTXp[], newRawBTXp[];
- double maBTXp[], newmaBTXp[];
- double RawBTXn[], newRawBTXn[];
- double maBTXn[], newmaBTXn[];
- double fC0Buffer[];
- double fA8Buffer[];
- double fC8Buffer[];
- double list[128], ring1[128], ring2[11], buffer[62];
- bool initFlag;
- int limitValue, startValue, loopParam, loopCriteria;
- int cycleLimit, highLimit, counterA, counterB;
- double cycleDelta, lowDValue, highDValue, absValue, paramA, paramB;
- double phaseParam, logParam, JMAValue, series, sValue, sqrtParam, lengthDivider;
- int s58, s60, s40, s38, s68;
- bool initialized;
- #import "OBP1Lock32x.dll"
- bool LTInitializeFromInix(string);
- double LTCalcValx(string, double, double, double, double, string);
- #define dll "OBP1Lock32.dll"
- #import
- double arr6[99], arr7[99], arr8[99], arr9[99], arr10[99], arr11[99];
- double arr9x[99], arr10x[99], arr11x[99], arr12x[99], arr13x[99], arr14x[99], arr15x[99], arr16x[99], arr17x[99], arr18x[99];
- int init()
- {
- initialized = LTInitializeFromInix(dll);
- if(!initialized) return(0);
- if(SmLen < 1) SmLen = 1;
- if(BTX_period > 98) BTX_period = 98;
- string btxname = "(" + BTX_period + ", " + SmLen + ")";
- if(Use_JMA_instead_TEMA) btxname = "_JMA(" + BTX_period + ", " + JMA_Length + ", " + JMA_Phase + ")";
- IndicatorShortName("BTX"+btxname);
- IndicatorDigits(2);
- IndicatorBuffers(8);
- SetIndexBuffer(0, BTX);
- SetIndexLabel(0, "BTX"+btxname);
- SetIndexBuffer(1, SD);
- SetIndexBuffer(2, SD2);
- SetIndexBuffer(3, SD3);
- if(Show_SD_up) SetIndexLabel(1, "BTX_SD_up(" + SD_len + ")");
- else SetIndexLabel(1, "unused");
- if(Show_SD_dn) SetIndexLabel(2, "BTX_SD_dn(" + SD_len + ")");
- else SetIndexLabel(2, "unused");
- if(Show_SD_md) SetIndexLabel(3, "BTX_SD_md(" + SD_len + ")");
- else SetIndexLabel(3, "unused");
- SetIndexBuffer(4, BTXbull);
- SetIndexBuffer(5, BTXbear);
- if(BTX_2line_based_colors) { SetIndexLabel(4, "BTX_bull"+btxname); SetIndexLabel(5, "BTX_bear"+btxname); }
- else { SetIndexLabel(4, "unused"); SetIndexLabel(5, "unused"); }
- if(Show_Histogram) { SetIndexStyle(0, DRAW_HISTOGRAM); SetIndexStyle(4, DRAW_HISTOGRAM); SetIndexStyle(5, DRAW_HISTOGRAM); }
- SetIndexBuffer(6, RawBTX);
- SetIndexBuffer(7, maBTX);
- ArraySetAsSeries(arr6, true); ArraySetAsSeries(arr7, true); ArraySetAsSeries(arr8, true);
- ArraySetAsSeries(arr9, true); ArraySetAsSeries(arr10, true); ArraySetAsSeries(arr11, true);
- if(BTX_2line_based_colors)
- {
- ArraySetAsSeries(RawBTXp, true); ArraySetAsSeries(newRawBTXp, true); ArrayResize(RawBTXp, Bars); ArrayInitialize(RawBTXp, 0);
- ArraySetAsSeries(maBTXp, true); ArraySetAsSeries(newmaBTXp, true); ArrayResize(maBTXp, Bars); ArrayInitialize(maBTXp, 0);
- ArraySetAsSeries(RawBTXn, true); ArraySetAsSeries(newRawBTXn, true); ArrayResize(RawBTXn, Bars); ArrayInitialize(RawBTXn, 0);
- ArraySetAsSeries(maBTXn, true); ArraySetAsSeries(newmaBTXn, true); ArrayResize(maBTXn, Bars); ArrayInitialize(maBTXn, 0);
- oldbars = Bars;
- ArraySetAsSeries(arr9x, true); ArraySetAsSeries(arr10x, true); ArraySetAsSeries(arr11x, true);
- ArraySetAsSeries(arr12x, true); ArraySetAsSeries(arr13x, true); ArraySetAsSeries(arr14x, true);
- ArraySetAsSeries(arr15x, true); ArraySetAsSeries(arr16x, true); ArraySetAsSeries(arr17x, true);
- ArraySetAsSeries(arr18x, true);
- }
- return(0);
- }
- int start()
- {
- if(!initialized) return(0);
- int limit, i, ii, counted_bars = IndicatorCounted()-1, bars;
- if(MaxBars > 0) { bars = MaxBars; if(counted_bars > bars) counted_bars = bars - 2; } else bars = Bars;
- if(Use_JMA_instead_TEMA) { if(bars <= BTX_period + JMA_Length) return(0); }
- else { if(bars <= BTX_period + 3*SmLen) return(0); }
- if(counted_bars < 0) counted_bars = 0;
- if(counted_bars > BTX_period) limit = bars - counted_bars;
- else limit = bars - BTX_period - 1;
- if((BTX_2line_based_colors) && (oldbars != Bars))
- {
- ArrayResize(newRawBTXp, Bars); ArrayCopy(newRawBTXp, RawBTXp, (Bars-oldbars)); ArrayResize(RawBTXp, Bars); ArrayCopy(RawBTXp, newRawBTXp);
- ArrayResize(newmaBTXp, Bars); ArrayCopy(newmaBTXp, maBTXp, (Bars-oldbars)); ArrayResize(maBTXp, Bars); ArrayCopy(maBTXp, newmaBTXp);
- ArrayResize(newRawBTXn, Bars); ArrayCopy(newRawBTXn, RawBTXn, (Bars-oldbars)); ArrayResize(RawBTXn, Bars); ArrayCopy(RawBTXn, newRawBTXn);
- ArrayResize(newmaBTXn, Bars); ArrayCopy(newmaBTXn, maBTXn, (Bars-oldbars)); ArrayResize(maBTXn, Bars); ArrayCopy(maBTXn, newmaBTXn);
- oldbars = Bars;
- }
- for(i = limit; i >= 0; i--)
- {
- double var2 = 0, var3 = 0;
- ArrayInitialize(arr6, 0); ArrayInitialize(arr7, 0); ArrayInitialize(arr8, 0);
- ArrayInitialize(arr9, 0); ArrayInitialize(arr10, 0); ArrayInitialize(arr11, 0);
- arr6[0] = LTCalcValx(dll, Close[i], 0.5, High[i], Low[i], "eBBcmGJhfe");
- for(ii = 1; ii <= BTX_period; ii++)
- {
- arr6[ii] = LTCalcValx(dll, Close[i+ii], Close[i+ii-1], 0.5, Close[i], "FpmqUGJh");
- arr7[ii] = LTCalcValx(dll, arr6[ii-1], arr6[ii], Close[i], 0.5, "rmEsGMDfF");
- arr8[ii] = LTCalcValx(dll, arr8[ii-1], (arr7[ii]), arr8[ii], arr7[ii-1], "smUDecGMJYh");
- if(arr8[ii] == 0) arr9[ii] = 0;
- else arr9[ii] = LTCalcValx(dll, arr6[0], arr6[ii], arr8[ii], arr7[ii], "rUGMecDJYBBXU");
- arr10[ii] = 1 / LTCalcValx(dll, 0.5, ii, arr9[ii], -MathAbs(arr9[ii-1]), "UhWGceMBBJn");
- arr11[ii] = LTCalcValx(dll, arr9[ii], arr10[ii], arr9[ii-1], arr8[ii], "F3ecmGBBMqec");
- var2 = LTCalcValx(dll, var2, arr11[ii], arr11[ii], var2, "ceGMhftTds");
- var3 = LTCalcValx(dll, var3, arr10[ii], var2, var3, "jTGceMBBh");
- }
- RawBTX[i] = LTCalcValx(dll, var2, var3, 100, 0.5, "mUDF0AA8GMUXBBq");
- if(BTX_2line_based_colors)
- {
- double var2x = 0, var3x = 0, var4x = 0, var5x = 0;
- ArrayInitialize(arr9x, 0); ArrayInitialize(arr10x, 0); ArrayInitialize(arr11x, 0);
- ArrayInitialize(arr12x, 0); ArrayInitialize(arr13x, 0); ArrayInitialize(arr14x, 0);
- ArrayInitialize(arr15x, 0); ArrayInitialize(arr16x, 0); ArrayInitialize(arr17x, 0);
- ArrayInitialize(arr18x, 0);
- arr9x[0] = MathLog(Close[i]);
- for(ii = 1; ii <= BTX_period; ii++)
- {
- arr9x[ii] = LTCalcValx(dll, Close[i+ii], Close[i+ii-1], 0.5, Close[i], "mmGBBJhfgg");
- if((arr9x[ii-1]-arr9x[ii]) > 0) arr10x[ii] = LTCalcValx(dll, arr9x[ii-1], arr9x[ii], Close[i], 0.5, "qUGecBBMD");
- else arr10x[ii] = 0;
- if((arr9x[ii-1]-arr9x[ii]) < 0) arr11x[ii] = LTCalcValx(dll, arr9x[ii-1], arr9x[ii], Close[i], 0.5, "hrmGMBBceDf");
- else arr11x[ii] = 0;
- arr12x[ii] = LTCalcValx(dll, arr12x[ii-1], arr10x[ii], 0.5, Close[i], "F9mGMcehfft");
- arr13x[ii] = LTCalcValx(dll, arr13x[ii-1], arr11x[ii], 0.5, Close[i], "F9mGMcehfft");
- if((arr9x[0]-arr9x[ii]) > 0) { if(arr12x[ii] == 0) arr14x[ii] = 0; else arr14x[ii] = LTCalcValx(dll, arr9x[0], arr9x[ii], arr12x[ii], arr10x[ii], "CqdGMDBBXUfA"); }
- else arr14x[ii] = 0;
- if((arr9x[0]-arr9x[ii]) < 0) { if(arr13x[ii] == 0) arr15x[ii] = 0; else arr15x[ii] = LTCalcValx(dll, arr9x[0], arr9x[ii], arr13x[ii], arr11x[ii], "FmGMBBDXUfa"); }
- else arr15x[ii] = 0;
- arr16x[ii] = 1 / LTCalcValx(dll, 0.5, ii, arr14x[ii], arr15x[ii], "UhWGceMBBJn");
- arr17x[ii] = LTCalcValx(dll, arr14x[ii], arr16x[ii], arr14x[ii-1], arr12x[ii], "BBWGMecqfrr");
- arr18x[ii] = LTCalcValx(dll, arr15x[ii], arr16x[ii], arr15x[ii-1], arr13x[ii], "ceGWWMBBqffr");
- var2x = LTCalcValx(dll, var2x, arr17x[ii], arr17x[ii-1], var2x, "ceGMhftTds");
- var3x = LTCalcValx(dll, var3x, arr18x[ii], arr18x[ii-1], var3x, "ceGMhftTds");
- var4x = LTCalcValx(dll, var4x, arr16x[ii], var2x, var4x, "jTGceMBBhffv");
- var5x = LTCalcValx(dll, var5x, arr16x[ii], var3x, var5x, "jTGceMBBhffv");
- }
- RawBTXp[i] = LTCalcValx(dll, var2x, var4x, 100, 0.5, "mGBBMUceXq");
- RawBTXn[i] = LTCalcValx(dll, var3x, var5x, 100, 0.5, "mGMUXecqfUr");
- }
- }
- if(!Use_JMA_instead_TEMA)
- {
- double ExpSmooth = 2, XAvg1, XAvg2, XAvg3;
- ExpSmooth = ExpSmooth / (SmLen + 1);
- for(i = bars - BTX_period - 1; i >= 0; i--)
- {
- XAvg1 += ExpSmooth * (RawBTX[i] - XAvg1);
- XAvg2 += ExpSmooth * (XAvg1 - XAvg2);
- XAvg3 += ExpSmooth * (XAvg2 - XAvg3);
- maBTX[i] = 3 * XAvg1 - 3 * XAvg2 + XAvg3;
- if(i < bars - BTX_period - 1 - 3*SmLen)
- BTX[i] = NormalizeDouble(maBTX[i], 2);
- }
- if(BTX_2line_based_colors)
- {
- ExpSmooth = 2; XAvg1 = 0; XAvg2 = 0; XAvg3 = 0;
- ExpSmooth = ExpSmooth / (SmLen + 1);
- for(i = bars - BTX_period - 1; i >= 0; i--)
- {
- XAvg1 += ExpSmooth * (RawBTXp[i] - XAvg1);
- XAvg2 += ExpSmooth * (XAvg1 - XAvg2);
- XAvg3 += ExpSmooth * (XAvg2 - XAvg3);
- maBTXp[i] = 3 * XAvg1 - 3 * XAvg2 + XAvg3;
- }
- ExpSmooth = 2; XAvg1 = 0; XAvg2 = 0; XAvg3 = 0;
- ExpSmooth = ExpSmooth / (SmLen + 1);
- for(i = bars - BTX_period - 1; i >= 0; i--)
- {
- XAvg1 += ExpSmooth * (RawBTXn[i] - XAvg1);
- XAvg2 += ExpSmooth * (XAvg1 - XAvg2);
- XAvg3 += ExpSmooth * (XAvg2 - XAvg3);
- maBTXn[i] = 3 * XAvg1 - 3 * XAvg2 + XAvg3;
- }
- for(i = bars - BTX_period - 1 - 3*SmLen; i >= 0; i--)
- {
- if(!(Colors_use_threshold) || (BTX[i] >= Threshold))
- {
- if(maBTXp[i] > maBTXn[i]) BTXbull[i] = BTX[i];
- else if(maBTXn[i] > maBTXp[i]) BTXbear[i] = BTX[i];
- }
- }
- }
- }
- else
- {
- ArrayResize(fC0Buffer, bars - BTX_period); ArraySetAsSeries(fC0Buffer, true); ArrayInitialize(fC0Buffer, 0);
- ArrayResize(fA8Buffer, bars - BTX_period); ArraySetAsSeries(fA8Buffer, true); ArrayInitialize(fA8Buffer, 0);
- ArrayResize(fC8Buffer, bars - BTX_period); ArraySetAsSeries(fC8Buffer, true); ArrayInitialize(fC8Buffer, 0);
- ArrayInitialize(list, 0);
- initFlag = false;
- limitValue = 0; startValue = 0; loopParam = 0; loopCriteria = 0;
- cycleLimit = 0; highLimit = 0; counterA = 0; counterB = 0;
- cycleDelta = 0; lowDValue = 0; highDValue = 0; absValue = 0; paramA = 0; paramB = 0;
- phaseParam = 0; logParam = 0; JMAValue = 0; series = 0; sValue = 0; sqrtParam = 0; lengthDivider = 0;
- s58 = 0; s60 = 0; s40 = 0; s38 = 0; s68 = 0;
- ArrayInitialize(ring2, 0);
- ArrayInitialize(ring1, 0);
- ArrayInitialize(buffer, 0);
- double lengthParam;
- limitValue = 63;
- startValue = 64;
- for(i = 0; i <= limitValue; i++) list[i] = -1000000;
- for(i = startValue; i <= 127; i++) list[i] = 1000000;
- initFlag = true;
- if(JMA_Length < 1.0000000002) lengthParam = 0.0000000001;
- else lengthParam = (JMA_Length - 1) / 2.0;
- if(JMA_Phase < -100) phaseParam = 0.5;
- else if(JMA_Phase > 100) phaseParam = 2.5;
- else phaseParam = JMA_Phase / 100.0 + 1.5;
- logParam = MathLog(MathSqrt(lengthParam)) / MathLog(2.0);
- if(logParam + 2.0 < 0) logParam = 0;
- else logParam = logParam + 2.0;
- sqrtParam = MathSqrt(lengthParam) * logParam;
- lengthParam = lengthParam * 0.9;
- lengthDivider = lengthParam / (lengthParam + 2.0);
- for(i = bars - BTX_period - 1; i >= 0; i--)
- {
- jma(RawBTX, maBTX, i);
- if(i < bars - BTX_period - 1 - JMA_Length)
- BTX[i] = NormalizeDouble(maBTX[i], 2);
- }
- if(BTX_2line_based_colors)
- {
- ArrayInitialize(fC0Buffer, 0);
- ArrayInitialize(fA8Buffer, 0);
- ArrayInitialize(fC8Buffer, 0);
- ArrayInitialize(list, 0);
- initFlag = false;
- limitValue = 0; startValue = 0; loopParam = 0; loopCriteria = 0;
- cycleLimit = 0; highLimit = 0; counterA = 0; counterB = 0;
- cycleDelta = 0; lowDValue = 0; highDValue = 0; absValue = 0; paramA = 0; paramB = 0;
- phaseParam = 0; logParam = 0; JMAValue = 0; series = 0; sValue = 0; sqrtParam = 0; lengthDivider = 0;
- s58 = 0; s60 = 0; s40 = 0; s38 = 0; s68 = 0;
- ArrayInitialize(ring2, 0);
- ArrayInitialize(ring1, 0);
- ArrayInitialize(buffer, 0);
- limitValue = 63;
- startValue = 64;
- for(i = 0; i <= limitValue; i++) list[i] = -1000000;
- for(i = startValue; i <= 127; i++) list[i] = 1000000;
- initFlag = true;
- if(JMA_Length < 1.0000000002) lengthParam = 0.0000000001;
- else lengthParam = (JMA_Length - 1) / 2.0;
- if(JMA_Phase < -100) phaseParam = 0.5;
- else if(JMA_Phase > 100) phaseParam = 2.5;
- else phaseParam = JMA_Phase / 100.0 + 1.5;
- logParam = MathLog(MathSqrt(lengthParam)) / MathLog(2.0);
- if(logParam + 2.0 < 0) logParam = 0;
- else logParam = logParam + 2.0;
- sqrtParam = MathSqrt(lengthParam) * logParam;
- lengthParam = lengthParam * 0.9;
- lengthDivider = lengthParam / (lengthParam + 2.0);
- for(i = bars - BTX_period - 1; i >= 0; i--)
- jma(RawBTXp, maBTXp, i);
- ArrayInitialize(fC0Buffer, 0);
- ArrayInitialize(fA8Buffer, 0);
- ArrayInitialize(fC8Buffer, 0);
- ArrayInitialize(list, 0);
- initFlag = false;
- limitValue = 0; startValue = 0; loopParam = 0; loopCriteria = 0;
- cycleLimit = 0; highLimit = 0; counterA = 0; counterB = 0;
- cycleDelta = 0; lowDValue = 0; highDValue = 0; absValue = 0; paramA = 0; paramB = 0;
- phaseParam = 0; logParam = 0; JMAValue = 0; series = 0; sValue = 0; sqrtParam = 0; lengthDivider = 0;
- s58 = 0; s60 = 0; s40 = 0; s38 = 0; s68 = 0;
- ArrayInitialize(ring2, 0);
- ArrayInitialize(ring1, 0);
- ArrayInitialize(buffer, 0);
- limitValue = 63;
- startValue = 64;
- for(i = 0; i <= limitValue; i++) list[i] = -1000000;
- for(i = startValue; i <= 127; i++) list[i] = 1000000;
- initFlag = true;
- if(JMA_Length < 1.0000000002) lengthParam = 0.0000000001;
- else lengthParam = (JMA_Length - 1) / 2.0;
- if(JMA_Phase < -100) phaseParam = 0.5;
- else if(JMA_Phase > 100) phaseParam = 2.5;
- else phaseParam = JMA_Phase / 100.0 + 1.5;
- logParam = MathLog(MathSqrt(lengthParam)) / MathLog(2.0);
- if(logParam + 2.0 < 0) logParam = 0;
- else logParam = logParam + 2.0;
- sqrtParam = MathSqrt(lengthParam) * logParam;
- lengthParam = lengthParam * 0.9;
- lengthDivider = lengthParam / (lengthParam + 2.0);
- for(i = bars - BTX_period - 1; i >= 0; i--)
- jma(RawBTXn, maBTXn, i);
- for(i = bars - BTX_period - 1 - JMA_Length; i >= 0; i--)
- {
- if(!(Colors_use_threshold) || (BTX[i] >= Threshold))
- {
- if(maBTXp[i] > maBTXn[i]) BTXbull[i] = BTX[i];
- else if(maBTXn[i] > maBTXp[i]) BTXbear[i] = BTX[i];
- }
- }
- }
- }
- int limitx;
- if(!Use_JMA_instead_TEMA) limitx = bars - BTX_period - 1 - 3*SmLen;
- else limitx = bars - BTX_period - 1 - JMA_Length;
- if(Show_SD)
- for(i = limit; i >= 0; i--)
- if(i < limitx - SD_len)
- {
- if(Show_SD_up) SD[i] = iBandsOnArray(BTX, 0, SD_len, SD_up, 0, MODE_UPPER, i);
- if(Show_SD_dn) SD2[i] = iBandsOnArray(BTX, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
- if(Show_SD_md) SD3[i] = (iBandsOnArray(BTX, 0, SD_len, SD_up, 0, MODE_UPPER, i)+
- iBandsOnArray(BTX, 0, SD_len, SD_dn, 0, MODE_LOWER, i)) / 2;
- }
- return(0);
- }
- double jma(double& input[], double& output[], int shift)
- {
- series = input[shift];
- if(loopParam < 61)
- {
- loopParam++;
- buffer[loopParam] = series;
- }
- if(loopParam > 30)
- {
- if(initFlag)
- {
- initFlag = false;
- int diffFlag = 0;
- for(int i = 1; i <= 29; i++)
- if(buffer[i + 1] != buffer[i]) diffFlag = 1;
- highLimit = diffFlag * 30;
- if(highLimit == 0) paramB = series;
- else paramB = buffer[1];
- paramA = paramB;
- if(highLimit > 29) highLimit = 29;
- }
- else
- highLimit = 0;
- for(i = highLimit; i >= 0; i--)
- {
- if(i == 0) sValue = series; else sValue = buffer [31 - i];
- if(MathAbs(sValue - paramA) > MathAbs(sValue - paramB)) absValue = MathAbs(sValue - paramA); else absValue = MathAbs(sValue - paramB);
- double dValue = absValue + 0.0000000001;
- if(counterA <= 1) counterA = 127; else counterA--;
- if(counterB <= 1) counterB = 10; else counterB--;
- if(cycleLimit < 128) cycleLimit++;
- cycleDelta += (dValue - ring2[counterB]);
- ring2[counterB] = dValue;
- if(cycleLimit > 10) highDValue = cycleDelta / 10.0; else highDValue = cycleDelta / cycleLimit;
- if(cycleLimit > 127)
- {
- dValue = ring1[counterA];
- ring1[counterA] = highDValue;
- s68 = 64; s58 = s68;
- while(s68 > 1)
- {
- if(list[s58] < dValue)
- {
- s68 = s68 / 2.0;
- s58 += s68;
- }
- else if(list[s58] == dValue)
- s68 = 1;
- else
- {
- s68 = s68 / 2.0;
- s58 -= s68;
- }
- }
- }
- else
- {
- ring1[counterA] = highDValue;
- if((limitValue + startValue) > 127)
- {
- startValue--;
- s58 = startValue;
- }
- else
- {
- limitValue++;
- s58 = limitValue;
- }
- if(limitValue > 96) s38 = 96; else s38 = limitValue;
- if(startValue < 32) s40 = 32; else s40 = startValue;
- }
- s68 = 64;
- s60 = s68;
- while(s68 > 1)
- {
- if(list[s60] >= highDValue)
- {
- if(list[s60 - 1] <= highDValue)
- s68 = 1;
- else
- {
- s68 = s68 / 2.0;
- s60 -= s68;
- }
- }
- else
- {
- s68 = s68 / 2.0;
- s60 += s68;
- }
- if((s60 == 127) && (highDValue > list[127])) s60 = 128;
- }
- if(cycleLimit > 127)
- {
- if(s58 >= s60)
- {
- if(((s38 + 1) > s60) && ((s40 - 1) < s60))
- lowDValue += highDValue;
- else if((s40 > s60) && ((s40 - 1) < s58))
- lowDValue += list[s40 - 1];
- }
- else if(s40 >= s60)
- {
- if(((s38 + 1) < s60) && ((s38 + 1) > s58))
- lowDValue += list[s38 + 1];
- }
- else if((s38 + 2) > s60)
- lowDValue += highDValue;
- else if(((s38 + 1) < s60) && ((s38 + 1) > s58))
- lowDValue += list[s38 + 1];
- if(s58 > s60)
- {
- if(((s40 - 1) < s58) && ((s38 + 1) > s58))
- lowDValue -= list[s58];
- else if((s38 < s58) && ((s38 + 1) > s60))
- lowDValue -= list[s38];
- }
- else
- {
- if(((s38 + 1) > s58) && ((s40 - 1) < s58))
- lowDValue -= list[s58];
- else if((s40 > s58) && (s40 < s60))
- lowDValue -= list[s40];
- }
- }
- if(s58 <= s60)
- {
- if(s58 >= s60) list[s60] = highDValue;
- else
- {
- for(int j = s58 + 1; j <= (s60 - 1); j++)
- list[j - 1] = list[j];
- list[s60 - 1] = highDValue;
- }
- }
- else
- {
- for(j = s58 - 1; j >= s60; j--)
- list[j + 1] = list[j];
- list[s60] = highDValue;
- }
- if(cycleLimit <= 127)
- {
- lowDValue = 0;
- for(j = s40; j <= s38; j++)
- lowDValue += list[j];
- }
- if((loopCriteria + 1) > 31) loopCriteria = 31; else loopCriteria++;
- double JMATempValue, sqrtDivider = sqrtParam / (sqrtParam + 1.0);
- if(loopCriteria <= 30)
- {
- if(sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * sqrtDivider;
- if(sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * sqrtDivider;
- JMATempValue = series;
- if(loopCriteria == 30)
- {
- fC0Buffer[shift] = series;
- int intPart;
- if(MathCeil(sqrtParam) >= 1) intPart = MathCeil(sqrtParam); else intPart = 1;
- int leftInt = IntPortion(intPart);
- if(MathFloor(sqrtParam) >= 1) intPart = MathFloor(sqrtParam); else intPart = 1;
- int rightPart = IntPortion (intPart);
- if(leftInt == rightPart) dValue = 1.0;
- else dValue = (sqrtParam - rightPart) / (leftInt - rightPart);
- if(rightPart <= 29) int upShift = rightPart; else upShift = 29;
- if(leftInt <= 29) int dnShift = leftInt; else dnShift = 29;
- fA8Buffer[shift] = (series - buffer[loopParam - upShift]) * (1 - dValue) / rightPart + (series - buffer[loopParam - dnShift]) * dValue / leftInt;
- }
- }
- else
- {
- double powerValue, squareValue;
- dValue = lowDValue / (s38 - s40 + 1);
- if(0.5 <= logParam - 2.0) powerValue = logParam - 2.0;
- else powerValue = 0.5;
- if(logParam >= MathPow(absValue/dValue, powerValue)) dValue = MathPow(absValue/dValue, powerValue); else dValue = logParam;
- if(dValue < 1) dValue = 1;
- powerValue = MathPow(sqrtDivider, MathSqrt (dValue));
- if(sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * powerValue;
- if(sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * powerValue;
- }
- }
- if(loopCriteria > 30)
- {
- JMATempValue = output[shift + 1];
- powerValue = MathPow(lengthDivider, dValue);
- squareValue = MathPow(powerValue, 2);
- fC0Buffer[shift] = (1 - powerValue) * series + powerValue * fC0Buffer[shift + 1];
- fC8Buffer[shift] = (series - fC0Buffer[shift]) * (1 - lengthDivider) + lengthDivider * fC8Buffer[shift + 1];
- fA8Buffer[shift] = (phaseParam * fC8Buffer[shift] + fC0Buffer[shift] - JMATempValue) *
- (powerValue * (-2.0) + squareValue + 1) + squareValue * fA8Buffer[shift + 1];
- JMATempValue += fA8Buffer[shift];
- }
- JMAValue = JMATempValue;
- }
- if(loopParam <= 30) JMAValue = 0;
- output[shift] = JMAValue;
- }
- int IntPortion(double param)
- {
- if (param > 0) return (MathFloor (param));
- if (param < 0) return (MathCeil (param));
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement