#property copyright "mladen"
#property link "mladenfx@gmail.com"
#property indicator_separate_window
#property indicator_levelcolor MediumOrchid
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Lime
#property indicator_color4 Fuchsia
#property indicator_color5 Fuchsia
extern string TimeFrame = "current time frame";
extern int T3FastPrice = 0;
extern double T3FastPeriod = 12.0;
extern double T3FastHot = 0.0;
extern bool T3FastOriginal = FALSE;
extern int T3SlowPrice = 0;
extern double T3SlowPeriod = 34.0;
extern double T3SlowHot = 0.0;
extern bool T3SlowOriginal = FALSE;
extern double Length = 10.0;
extern double StDv = 2.0;
extern bool drawDots = TRUE;
extern double level1 = 0.005;
extern double level2 = -0.005;
double G_ibuf_168[];
double G_ibuf_172[];
double G_ibuf_176[];
double G_ibuf_180[];
double G_ibuf_184[];
double G_ibuf_188[];
double G_ibuf_192[];
int G_timeframe_196;
string Gs_200;
bool G_bool_208;
bool G_bool_212;
string Gsa_216[] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN"};
int Gia_220[] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200};
double Gda_224[][12];
double Gda_228[][6];
// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
IndicatorBuffers(7);
SetIndexBuffer(0, G_ibuf_168);
SetIndexBuffer(1, G_ibuf_172);
SetIndexBuffer(2, G_ibuf_176);
SetIndexBuffer(3, G_ibuf_180);
SetIndexBuffer(4, G_ibuf_184);
SetIndexBuffer(5, G_ibuf_188);
SetIndexBuffer(6, G_ibuf_192);
if (drawDots) {
SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID);
SetIndexArrow(2, 159);
SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID);
SetIndexArrow(3, 159);
SetIndexStyle(4, DRAW_NONE);
} else {
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
}
SetLevelValue(0, 0);
SetLevelValue(1, level1);
SetLevelValue(2, level2);
Gs_200 = WindowExpertName();
G_bool_212 = TimeFrame == "calculateValue";
if (G_bool_212) return (0);
G_bool_208 = TimeFrame == "returnBars";
if (G_bool_208) return (0);
G_timeframe_196 = f0_5(TimeFrame);
IndicatorDigits(5);
IndicatorShortName(f0_1(G_timeframe_196) + " T3 BB Macd (" + DoubleToStr(T3FastPeriod, 2) + "," + DoubleToStr(T3SlowPeriod, 2) + "," + DoubleToStr(Length, 2) + ")");
SetIndexLabel(0, "Upperband");
SetIndexLabel(1, "Lowerband");
SetIndexLabel(2, "BB Macd");
SetIndexLabel(3, NULL);
SetIndexLabel(4, NULL);
return (0);
}
// 52D46093050F38C27267BCE42543EF60
int deinit() {
return (0);
}
// EA2B2676C28C0DB26D39331A336C6B92
int start() {
double Ld_12;
double Ld_20;
int shift_28;
int Li_8 = IndicatorCounted();
if (Li_8 < 0) return (-1);
if (Li_8 > 0) Li_8--;
int Li_0 = MathMin(Bars - Li_8, Bars - 1);
if (G_bool_208) {
G_ibuf_168[0] = Li_0 + 1;
return (0);
}
if (G_bool_212 || G_timeframe_196 == Period()) {
if (!drawDots)
if (G_ibuf_192[Li_0] == -1.0) f0_2(Li_0, G_ibuf_180, G_ibuf_184);
Ld_12 = 2.0 / (Length + 1.0);
for (int Li_4 = Li_0; Li_4 >= 0; Li_4--) {
G_ibuf_176[Li_4] = f0_4(iMA(NULL, 0, 1, 0, MODE_EMA, T3FastPrice, Li_4), T3FastPeriod, T3FastHot, T3FastOriginal, Li_4, 0) - f0_4(iMA(NULL, 0, 1, 0, MODE_EMA, T3SlowPrice,
Li_4), T3SlowPeriod, T3SlowHot, T3SlowOriginal, Li_4, 1);
G_ibuf_188[Li_4] = G_ibuf_188[Li_4 + 1] + Ld_12 * (G_ibuf_176[Li_4] - (G_ibuf_188[Li_4 + 1]));
Ld_20 = f0_3(G_ibuf_176, G_ibuf_188[Li_4], Length, Li_4);
G_ibuf_168[Li_4] = G_ibuf_188[Li_4] + StDv * Ld_20;
G_ibuf_172[Li_4] = G_ibuf_188[Li_4] - StDv * Ld_20;
G_ibuf_180[Li_4] = EMPTY_VALUE;
G_ibuf_184[Li_4] = EMPTY_VALUE;
G_ibuf_192[Li_4] = G_ibuf_192[Li_4 + 1];
if (G_ibuf_176[Li_4] > G_ibuf_176[Li_4 + 1]) G_ibuf_192[Li_4] = 1;
if (G_ibuf_176[Li_4] < G_ibuf_176[Li_4 + 1]) G_ibuf_192[Li_4] = -1;
if (G_ibuf_192[Li_4] == -1.0) {
if (drawDots) {
G_ibuf_180[Li_4] = G_ibuf_176[Li_4];
continue;
}
f0_6(Li_4, G_ibuf_180, G_ibuf_184, G_ibuf_176);
}
}
return (0);
}
Li_0 = MathMax(Li_0, MathMin(Bars - 1, iCustom(NULL, G_timeframe_196, Gs_200, "returnBars", 0, 0) * G_timeframe_196 / Period()));
if (!drawDots)
if (G_ibuf_192[Li_0] == -1.0) f0_2(Li_0, G_ibuf_180, G_ibuf_184);
for (Li_4 = Li_0; Li_4 >= 0; Li_4--) {
shift_28 = iBarShift(NULL, G_timeframe_196, Time[Li_4]);
G_ibuf_168[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
T3SlowOriginal, Length, StDv, 0, shift_28);
G_ibuf_172[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
T3SlowOriginal, Length, StDv, 1, shift_28);
G_ibuf_176[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
T3SlowOriginal, Length, StDv, 2, shift_28);
G_ibuf_180[Li_4] = EMPTY_VALUE;
G_ibuf_184[Li_4] = EMPTY_VALUE;
G_ibuf_192[Li_4] = iCustom(NULL, G_timeframe_196, Gs_200, "calculateValue", T3FastPrice, T3FastPeriod, T3FastHot, T3FastOriginal, T3SlowPrice, T3SlowPeriod, T3SlowHot,
T3SlowOriginal, Length, StDv, 6, shift_28);
if (drawDots && G_ibuf_192[Li_4] == -1.0) G_ibuf_180[Li_4] = G_ibuf_176[Li_4];
}
if (!drawDots) {
for (Li_4 = Li_0; Li_4 >= 0; Li_4--)
if (G_ibuf_192[Li_4] == -1.0) f0_6(Li_4, G_ibuf_180, G_ibuf_184, G_ibuf_176);
}
return (0);
}
// 33B5F9392F2A76B37F7C243381478E4B
double f0_3(double Ada_0[], double Ad_4, int Ai_12, int Ai_16) {
double Ld_20 = 0.0;
for (int count_28 = 0; count_28 < Ai_12; count_28++) Ld_20 += (Ada_0[Ai_16 + count_28] - Ad_4) * (Ada_0[Ai_16 + count_28] - Ad_4);
return (MathSqrt(Ld_20 / Ai_12));
}
// 21F8D7C6ACBD885873A4BA3D594D41CD
void f0_2(int Ai_0, double &Ada_4[], double &Ada_8[]) {
if (Ada_8[Ai_0] != EMPTY_VALUE && Ada_8[Ai_0 + 1] != EMPTY_VALUE) {
Ada_8[Ai_0] = EMPTY_VALUE;
return;
}
if (Ada_4[Ai_0] != EMPTY_VALUE && Ada_4[Ai_0 + 1] != EMPTY_VALUE && Ada_4[Ai_0 + 2] == EMPTY_VALUE) Ada_4[Ai_0 + 1] = EMPTY_VALUE;
}
// D1B45A6FF1A5430B6E40FB3AD384517E
void f0_6(int Ai_0, double &Ada_4[], double &Ada_8[], double Ada_12[]) {
if (Ada_4[Ai_0 + 1] == EMPTY_VALUE) {
if (Ada_4[Ai_0 + 2] == EMPTY_VALUE) {
Ada_4[Ai_0] = Ada_12[Ai_0];
Ada_4[Ai_0 + 1] = Ada_12[Ai_0 + 1];
Ada_8[Ai_0] = EMPTY_VALUE;
return;
}
Ada_8[Ai_0] = Ada_12[Ai_0];
Ada_8[Ai_0 + 1] = Ada_12[Ai_0 + 1];
Ada_4[Ai_0] = EMPTY_VALUE;
return;
}
Ada_4[Ai_0] = Ada_12[Ai_0];
Ada_8[Ai_0] = EMPTY_VALUE;
}
// B9EDCDEA151586E355292E7EA9BE516E
int f0_5(string As_0) {
As_0 = f0_0(As_0);
for (int Li_8 = ArraySize(Gia_220) - 1; Li_8 >= 0; Li_8--)
if (As_0 == Gsa_216[Li_8] || As_0 == "" + Gia_220[Li_8]) return (MathMax(Gia_220[Li_8], Period()));
return (Period());
}
// 1368D28A27D3419A04740CF6C5C45FD7
string f0_1(int Ai_0) {
for (int Li_4 = ArraySize(Gia_220) - 1; Li_4 >= 0; Li_4--)
if (Ai_0 == Gia_220[Li_4]) return (Gsa_216[Li_4]);
return ("");
}
// 0385FAB291C6DD1F9F0C732E98E3917D
string f0_0(string As_0) {
int Li_20;
string Ls_ret_8 = As_0;
for (int Li_16 = StringLen(As_0) - 1; Li_16 >= 0; Li_16--) {
Li_20 = StringGetChar(Ls_ret_8, Li_16);
if ((Li_20 > \'`\' && Li_20 < \'{\') || (Li_20 > \'?\' && Li_20 < 256)) Ls_ret_8 = StringSetChar(Ls_ret_8, Li_16, Li_20 - 32);
else
if (Li_20 > -33 && Li_20 < 0) Ls_ret_8 = StringSetChar(Ls_ret_8, Li_16, Li_20 + 224);
}
return (Ls_ret_8);
}
// 5FFF0406096EE64C0135056E5E1304BD
double f0_4(double Ad_0, double Ad_8, double Ad_16, bool Ai_24, int Ai_28, int Ai_32 = 0) {
double Ld_36;
if (ArrayRange(Gda_224, 0) != Bars) ArrayResize(Gda_224, Bars);
if (ArrayRange(Gda_228, 0) < Ai_32 + 1) ArrayResize(Gda_228, Ai_32 + 1);
if (Gda_228[Ai_32][0] != Ad_8) {
Gda_228[Ai_32][0] = Ad_8;
Ld_36 = Ad_16;
Gda_228[Ai_32][1] = (-Ld_36) * Ld_36 * Ld_36;
Gda_228[Ai_32][2] = 3.0 * Ld_36 * Ld_36 + 3.0 * Ld_36 * Ld_36 * Ld_36;
Gda_228[Ai_32][3] = (-6.0 * Ld_36) * Ld_36 - 3.0 * Ld_36 - 3.0 * Ld_36 * Ld_36 * Ld_36;
Gda_228[Ai_32][4] = 3.0 * Ld_36 + 1.0 + Ld_36 * Ld_36 * Ld_36 + 3.0 * Ld_36 * Ld_36;
if (Ai_24) Gda_228[Ai_32][5] = 2.0 / (Ad_8 + 1.0);
else Gda_228[Ai_32][5] = 2.0 / ((Ad_8 - 1.0) / 2.0 + 2.0);
}
int Li_44 = 6 * Ai_32;
int Li_48 = Bars - Ai_28 - 1;
if (Li_48 == 0) {
Gda_224[Li_48][Li_44 + 0] = Ad_0;
Gda_224[Li_48][Li_44 + 1] = Ad_0;
Gda_224[Li_48][Li_44 + 2] = Ad_0;
Gda_224[Li_48][Li_44 + 3] = Ad_0;
Gda_224[Li_48][Li_44 + 4] = Ad_0;
Gda_224[Li_48][Li_44 + 5] = Ad_0;
} else {
Gda_224[Li_48][Li_44 + 0] = Gda_224[Li_48 - 1][Li_44 + 0] + Gda_228[Ai_32][5] * (Ad_0 - (Gda_224[Li_48 - 1][Li_44 + 0]));
Gda_224[Li_48][Li_44 + 1] = Gda_224[Li_48 - 1][Li_44 + 1] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 0] - (Gda_224[Li_48 - 1][Li_44 + 1]));
Gda_224[Li_48][Li_44 + 2] = Gda_224[Li_48 - 1][Li_44 + 2] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 1] - (Gda_224[Li_48 - 1][Li_44 + 2]));
Gda_224[Li_48][Li_44 + 3] = Gda_224[Li_48 - 1][Li_44 + 3] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 2] - (Gda_224[Li_48 - 1][Li_44 + 3]));
Gda_224[Li_48][Li_44 + 4] = Gda_224[Li_48 - 1][Li_44 + 4] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 3] - (Gda_224[Li_48 - 1][Li_44 + 4]));
Gda_224[Li_48][Li_44 + 5] = Gda_224[Li_48 - 1][Li_44 + 5] + Gda_228[Ai_32][5] * (Gda_224[Li_48][Li_44 + 4] - (Gda_224[Li_48 - 1][Li_44 + 5]));
}
return (Gda_228[Ai_32][1] * (Gda_224[Li_48][Li_44 + 5]) + Gda_228[Ai_32][2] * (Gda_224[Li_48][Li_44 + 4]) + Gda_228[Ai_32][3] * (Gda_224[Li_48][Li_44 + 3]) + Gda_228[Ai_32][4] * (Gda_224[Li_48][Li_44 +
2]));
}