Может кому то нужен Фибо.
# TS_AUTOFIBLINES
input Required_Reversal_Amount = 1.0;
input Reversal_Mode = {default price, percent};
input fib1 = 0.382;
input fib2 = 0.50;
input fib3 = 0.618;
input fib4 = 0.786;
input fib5 = -0.236;
input fib6 = -0.382;
input fib7 = -0.5;
def Required_Reversal;
switch (Reversal_Mode){
case price:
Required_Reversal = Required_Reversal_Amount;
case percent:
Required_Reversal = close * Required_Reversal_Amount / 100.0;
}
rec state = {default init, up, down};
rec tsl;
rec tsh;
rec psl;
rec psh;
switch (state[1]) {
case init:
state = state.up;
tsl = low;
tsh = high;
psl = low;
psh = high;
case down:
if (close[1] - tsl[1] > Required_Reversal)
then {
state = state.up;
tsl = tsl[1];
tsh = high;
psl = tsl[1];
psh = psh[1];
} else {
state = state.down;
tsl = CompoundValue(1, if low < tsl[1] then low else tsl[1], low);
tsh = high;
psl = psl[1];
psh = psh[1];
}
case up:
if (tsh[1] - close[1] > Required_Reversal)
then {
state = state.down;
tsl = low;
tsh = tsh[1];
psl = psl[1];
psh = tsh[1];
} else {
state = state.up;
tsl = low;
tsh = CompoundValue(1, if high > tsh[1] then high else tsh[1], high);
psl = psl[1];
psh = psh[1];
}
}
def prevHigh = psh;
;
def prevLow = psl;
def deltaHL = prevHigh - prevLow;
def ret1 = deltaHL * fib1;
def ret2 = deltaHL * fib2;
def ret3 = deltaHL * fib3;
def ret4 = deltaHL * fib4;
def ret5 = deltaHL * fib5;
def ret6 = deltaHL * fib6;
def ret7 = deltaHL * fib7;
def fA = If(state == state.up, prevLow, prevHigh);
plot pivotA = if IsNaN(close[0]) then fA else Double.NaN;
pivotA.SetDefaultColor(Color.WHITE);
pivotA.SetLineWeight(1);
pivotA.SetStyle(Curve.SHORT_DASH);
def fB = If(state == state.up, prevHigh, prevLow);
plot pivotB = if IsNaN(close[0]) then fB else Double.NaN;
pivotB.SetDefaultColor(Color.WHITE);
pivotB.SetLineWeight(1);
pivotB.SetStyle(Curve.SHORT_DASH);
def f1c = If(state == state.up , prevLow + ret1, prevHigh - ret1);
plot f1 = if IsNaN(close[0]) then f1c else Double.NaN;
f1.SetDefaultColor(Color.DARK_GRAY);
f1.SetLineWeight(1);
def f2c = If(state == state.up , prevLow + ret2, prevHigh - ret2);
plot f2 = if IsNaN(close[0]) then f2c else Double.NaN;
f2.SetDefaultColor(Color.YELLOW);
f2.SetLineWeight(1);
def f3c = If(state == state.up , prevLow + ret3, prevHigh - ret3);
plot f3 = if IsNaN(close[0]) then f3c else Double.NaN;
f3.SetDefaultColor(Color.RED);
f3.SetLineWeight(1);
def f4c = If(state == state.up , prevLow + ret4, prevHigh - ret4);
plot f4 = if IsNaN(close[0]) then f4c else Double.NaN;
f4.SetDefaultColor(Color.DARK_GRAY);
f4.SetLineWeight(1);
def f5c = If(state == state.up , prevLow + ret5, prevHigh - ret5);
plot f5 = if IsNaN(close[0]) then f5c else Double.NaN;
f5.SetDefaultColor(Color.WHITE);
f5.SetLineWeight(3);
f5.SetStyle(Curve.SHORT_DASH);
def f6c = If(state == state.up , prevLow + ret6, prevHigh - ret6);
plot f6 = if IsNaN(close[0]) then f6c else Double.NaN;
f6.SetDefaultColor(Color.DARK_GRAY);
f6.SetLineWeight(1);
f6.SetStyle(Curve.SHORT_DASH);
def f7c = If(state == state.up , prevLow + ret7, prevHigh - ret7);
plot f7 = if IsNaN(close[0]) then f7c else Double.NaN;
f7.SetDefaultColor(Color.DARK_GRAY);
f7.SetLineWeight(1);
f7.SetStyle(Curve.SHORT_DASH);
plot revPoint = if IsNaN(close[-1]) and !IsNaN(close) then if state == state.down then tsl + Required_Reversal else tsh - Required_Reversal else Double.NaN;
revPoint.SetStyle(Curve.POINTS);
revPoint.SetDefaultColor(Color.MAGENTA);
revPoint.SetLineWeight(3);
plot modeDown = if IsNaN(close[0]) and !IsNaN(close[1]) then if state == state.down then prevHigh else Double.NaN else Double.NaN;
modeDown.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
modeDown.SetDefaultColor(Color.RED);
modeDown.SetLineWeight(3);
plot modeUp = if IsNaN(close[0]) and !IsNaN(close[1]) then if state == state.up then prevLow else Double.NaN else Double.NaN;
modeUp.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
modeUp.SetDefaultColor(Color.GREEN);
modeUp.SetLineWeight(3);