Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Ocn_BTX_2linex version 1.0
- #property copyright "© jim sloman, jma © mark jurik, for metatrader reprogrammed by udc"
- #property link "[email protected]"
- #property indicator_separate_window
- #property indicator_buffers 8
- #property indicator_color1 Lime
- #property indicator_color2 Green
- #property indicator_color3 Green
- #property indicator_color4 Green
- #property indicator_color5 Red
- #property indicator_color6 FireBrick
- #property indicator_color7 FireBrick
- #property indicator_color8 FireBrick
- #property indicator_level1 20
- #property indicator_levelcolor Gray
- #property indicator_levelstyle 2
- #property indicator_minimum 0
- #property indicator_maximum 100
- 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_BTXp = true;
- extern bool Show_BTXn = true;
- extern bool Show_BTXp_SD = true;
- extern bool Show_BTXn_SD = true;
- extern int SD_len = 20;
- extern double SD_up = 1.5;
- extern double SD_dn = 1.5;
- extern bool Show_BTXp_SD_up = true;
- extern bool Show_BTXp_SD_dn = true;
- extern bool Show_BTXp_SD_md = true;
- extern bool Show_BTXn_SD_up = true;
- extern bool Show_BTXn_SD_dn = true;
- extern bool Show_BTXn_SD_md = true;
- double BTXp[];
- double BTXp_SD[];
- double BTXp_SD2[];
- double BTXp_SD3[];
- double BTXn[];
- double BTXn_SD[];
- double BTXn_SD2[];
- double BTXn_SD3[];
- 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 arr9[99], arr10[99], arr11[99], arr12[99], arr13[99], arr14[99], arr15[99], arr16[99], arr17[99], arr18[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_2line"+btxname);
- IndicatorBuffers(8);
- SetIndexBuffer(0, BTXp);
- if(Show_BTXp) SetIndexLabel(0, "BTX_2line_p"+btxname);
- else SetIndexLabel(0, "unused");
- SetIndexBuffer(1, BTXp_SD);
- SetIndexBuffer(2, BTXp_SD2);
- SetIndexBuffer(3, BTXp_SD3);
- if((Show_BTXp) && (Show_BTXp_SD_up)) SetIndexLabel(1, "BTXp_SD_up(" + SD_len + ")");
- else SetIndexLabel(1, "unused");
- if((Show_BTXp) && (Show_BTXp_SD_dn)) SetIndexLabel(2, "BTXp_SD_dn(" + SD_len + ")");
- else SetIndexLabel(2, "unused");
- if((Show_BTXp) && (Show_BTXp_SD_md)) SetIndexLabel(3, "BTXp_SD_md(" + SD_len + ")");
- else SetIndexLabel(3, "unused");
- SetIndexBuffer(4, BTXn);
- if(Show_BTXn) SetIndexLabel(4, "BTX_2line_n"+btxname);
- else SetIndexLabel(4, "unused");
- SetIndexBuffer(5, BTXn_SD);
- SetIndexBuffer(6, BTXn_SD2);
- SetIndexBuffer(7, BTXn_SD3);
- if((Show_BTXn) && (Show_BTXn_SD_up)) SetIndexLabel(5, "BTXn_SD_up(" + SD_len + ")");
- else SetIndexLabel(5, "unused");
- if((Show_BTXn) && (Show_BTXn_SD_dn)) SetIndexLabel(6, "BTXn_SD_dn(" + SD_len + ")");
- else SetIndexLabel(6, "unused");
- if((Show_BTXn) && (Show_BTXn_SD_md)) SetIndexLabel(7, "BTXn_SD_md(" + SD_len + ")");
- else SetIndexLabel(7, "unused");
- 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(arr9, true); ArraySetAsSeries(arr10, true); ArraySetAsSeries(arr11, true);
- ArraySetAsSeries(arr12, true); ArraySetAsSeries(arr13, true); ArraySetAsSeries(arr14, true);
- ArraySetAsSeries(arr15, true); ArraySetAsSeries(arr16, true); ArraySetAsSeries(arr17, true);
- ArraySetAsSeries(arr18, 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(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, var4 = 0, var5 = 0;
- ArrayInitialize(arr9, 0); ArrayInitialize(arr10, 0); ArrayInitialize(arr11, 0);
- ArrayInitialize(arr12, 0); ArrayInitialize(arr13, 0); ArrayInitialize(arr14, 0);
- ArrayInitialize(arr15, 0); ArrayInitialize(arr16, 0); ArrayInitialize(arr17, 0);
- ArrayInitialize(arr18, 0);
- arr9[0] = MathLog(Close[i]);
- for(ii = 1; ii <= BTX_period; ii++)
- {
- arr9[ii] = LTCalcValx(dll, Close[i+ii], Close[i+ii-1], 0.5, Close[i], "mmGBBJhfgg");
- if((arr9[ii-1]-arr9[ii]) > 0) arr10[ii] = LTCalcValx(dll, arr9[ii-1], arr9[ii], Close[i], 0.5, "qUGecBBMD");
- else arr10[ii] = 0;
- if((arr9[ii-1]-arr9[ii]) < 0) arr11[ii] = LTCalcValx(dll, arr9[ii-1], arr9[ii], Close[i], 0.5, "hrmGMBBceDf");
- else arr11[ii] = 0;
- arr12[ii] = LTCalcValx(dll, arr12[ii-1], arr10[ii], 0.5, Close[i], "F9mGMcehfft");
- arr13[ii] = LTCalcValx(dll, arr13[ii-1], arr11[ii], 0.5, Close[i], "F9mGMcehfft");
- if((arr9[0]-arr9[ii]) > 0) { if(arr12[ii] == 0) arr14[ii] = 0; else arr14[ii] = LTCalcValx(dll, arr9[0], arr9[ii], arr12[ii], arr10[ii], "CqdGMDBBXUfA"); }
- else arr14[ii] = 0;
- if((arr9[0]-arr9[ii]) < 0) { if(arr13[ii] == 0) arr15[ii] = 0; else arr15[ii] = LTCalcValx(dll, arr9[0], arr9[ii], arr13[ii], arr11[ii], "FmGMBBDXUfa"); }
- else arr15[ii] = 0;
- arr16[ii] = 1 / LTCalcValx(dll, 0.5, ii, arr14[ii], arr15[ii], "UhWGceMBBJn");
- arr17[ii] = LTCalcValx(dll, arr14[ii], arr16[ii], arr14[ii-1], arr12[ii], "BBWGMecqfrr");
- arr18[ii] = LTCalcValx(dll, arr15[ii], arr16[ii], arr15[ii-1], arr13[ii], "ceGWWMBBqffr");
- var2 = LTCalcValx(dll, var2, arr17[ii], arr17[ii-1], var2, "ceGMhftTds");
- var3 = LTCalcValx(dll, var3, arr18[ii], arr18[ii-1], var3, "ceGMhftTds");
- var4 = LTCalcValx(dll, var4, arr16[ii], var2, var4, "jTGceMBBhffv");
- var5 = LTCalcValx(dll, var5, arr16[ii], var3, var5, "jTGceMBBhffv");
- }
- RawBTXp[i] = LTCalcValx(dll, var2, var4, 100, 0.5, "mGBBMUceXq");
- RawBTXn[i] = LTCalcValx(dll, var3, var5, 100, 0.5, "mGMUXecqfUr");
- }
- if(!Use_JMA_instead_TEMA)
- {
- double 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;
- if((Show_BTXp) && (i < bars - BTX_period - 1 - 3*SmLen))
- BTXp[i] = maBTXp[i];
- }
- 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;
- if((Show_BTXn) && (i < bars - BTX_period - 1 - 3*SmLen))
- BTXn[i] = maBTXn[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(RawBTXp, maBTXp, i);
- if((Show_BTXp) && (i < bars - BTX_period - 1 - JMA_Length))
- BTXp[i] = 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);
- if((Show_BTXn) && (i < bars - BTX_period - 1 - JMA_Length))
- BTXn[i] = maBTXn[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_BTXp) && (Show_BTXp_SD))
- for(i = limit; i >= 0; i--)
- if(i < limitx - SD_len)
- {
- if(Show_BTXp_SD_up) BTXp_SD[i] = iBandsOnArray(BTXp, 0, SD_len, SD_up, 0, MODE_UPPER, i);
- if(Show_BTXp_SD_dn) BTXp_SD2[i] = iBandsOnArray(BTXp, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
- if(Show_BTXp_SD_md) BTXp_SD3[i] = (iBandsOnArray(BTXp, 0, SD_len, SD_up, 0, MODE_UPPER, i)+
- iBandsOnArray(BTXp, 0, SD_len, SD_dn, 0, MODE_LOWER, i)) / 2;
- }
- if((Show_BTXn) && (Show_BTXn_SD))
- for(i = limit; i >= 0; i--)
- if(i < limitx - SD_len)
- {
- if(Show_BTXn_SD_up) BTXn_SD[i] = iBandsOnArray(BTXn, 0, SD_len, SD_up, 0, MODE_UPPER, i);
- if(Show_BTXn_SD_dn) BTXn_SD2[i] = iBandsOnArray(BTXn, 0, SD_len, SD_dn, 0, MODE_LOWER, i);
- if(Show_BTXn_SD_md) BTXn_SD3[i] = (iBandsOnArray(BTXn, 0, SD_len, SD_up, 0, MODE_UPPER, i)+
- iBandsOnArray(BTXn, 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