Untitled
unknown
plain_text
5 years ago
9.8 kB
21
Indexable
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © konidtaly88
// la versione precedente senza funzioni e senza moltiplicatore e' la 93
//@version=4
study("The predictive power of price patterns", overlay=true)
_is_downtrend(_sma3) =>
bool downtrend = true
bool one_violation = false
for i=0 to 5
if _sma3[i] >= _sma3[i+1]
if one_violation
downtrend := false
break
one_violation := true
downtrend
_is_uptrend(_sma3) =>
bool uptrend = true
bool one_violation = false
for i=0 to 5
if _sma3[i] <= _sma3[i+1]
if one_violation
uptrend := false
break
one_violation := true
uptrend
_TWS(_is_downtrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_downtrend[i2]
a = (_open < _close) and (_open[i1] < _close[i1]) and (_open[i2] < _close[i2])
b = (_close > _close[i1]) and (_close[i1] > _close[i2])
c = (_close[i2] > _open[i1]) and (_open[i1] > _open[i2]) and (_close[i1] > _open) and (_open > _open[i1])
a and b and c
else
false
_TBC(_is_uptrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_uptrend[i2]
a = (_open > _close) and (_open[i1] > _close[i1]) and (_open[i2] > _close[i2])
b = (_close < _close[i1]) and (_close[i1] < _close[i2])
c = (_open[i2] > _open[i1]) and (_open[i1] > _close[i2]) and (_open[i1] > _open) and (_open > _close[i1])
a and b and c
else
false
_TIU(_is_downtrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_downtrend[i2]
a = _open[i2] > _close[i2]
b = (_open[i2] >= _open[i1]) and (_open[i1] > _close[i2])
c = (_open[i2] > _close[i1]) and (_close[i1] >= _close[i2])
d = if (_open[i2] == _open[i1])
(_close[i1] != _close[i2])
else if (_close[i1] == _close[i2])
(_open[i2] != _open[i1])
else
true
e = (_close > _open) and (_close > _open[i2])
a and b and c and d and e
else
false
_TID(_is_uptrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_uptrend[i2]
a = _close[i2] > _open[i2]
b = (_close[i2] > _open[i1]) and (_open[i1] >= _open[i2])
c = (_close[i2] >= _close[i1]) and (_close[i1] > _open[i2])
d = if (_open[i2] == _open[i1])
(_close[i1] != _close[i2])
else if (_close[i1] == _close[i2])
(_open[i2] != _open[i1])
else
true
e = (_close < _open) and (_close < _open[i2])
a and b and c and d and e
else
false
_TOU(_is_downtrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_downtrend[i2]
a = (_open[i2] > _close[i2])
b = (_close[i1] >= _open[i2]) and (_open[i2] > _close[i2]) and (_close[i2] >= _open[i1])
c = abs(_close[i1]-_open[i1]) > abs(_close[i2]-_open[i2])
d = (_close > _open) and (_close > _close[i1])
a and b and c and d
else
false
_TOD(_is_uptrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_uptrend[i2]
a = _close[i2] > _open[i2]
b = (_open[i1] >= _close[i2]) and (_close[i2] > _open[i2]) and (_open[i2] >= _close[i1])
c = abs(_close[i1]-_open[i1]) > abs(_close[i2]-_open[i2])
d = (_close < _open) and (_close < _close[i1])
a and b and c and d
else
false
_MS(_is_downtrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_downtrend[i2]
a = _open[i2] > _close[i2]
b = abs(_open[i1]-_close[i1]) > 0
c = (_close[i2] > _close[i1]) and (_close[i2] > _open[i1])
d = (_close > _open) and (2*_close > _open[i2]+_close[i2])
a and b and c and d
else
false
_ES(_is_uptrend, _open, _close, _mul) =>
i1 =_mul
i2 = 2*_mul
if _is_uptrend[i2]
a = _open[i2] < _close[i2]
b = abs(_open[i1]-_close[i1]) > 0
c = (_close[i1] > _close[i2]) and (_open[i1] > _close[i2])
d = (_close < _open) and (2*_close < _open[i2]+_close[i2])
a and b and c and d
else
false
risk_perc = input(title="Risk %", type=input.float, defval=1, minval=0.25, maxval=100, step=0.25, group="Account")
compound = input(title="Compound", type=input.bool, defval=false, group="Account")
show_trends = input(title="Show trends", type=input.bool, defval=false, group="Strategy")
check_chop = input(title="Check chop", type=input.bool, defval=true, group="Strategy")
show_all = input(title="Show all", type=input.bool, defval=true, group="Strategy")
multiplier = input(title="Multiplier", type=input.integer, defval=3, minval=1, maxval=60, group="Strategy")
long = input(title="Long (not Short)", type=input.bool, defval=true, group="Strategy")
stop_channel_size = input(title="Stop size", type=input.integer, defval=20, minval=1, maxval=1000)
filter_date_range = input(title="Enable range filter", type=input.bool, defval=false, group="Date Range")
date_from = input(title="From", type=input.time, defval=timestamp("20 Feb 2020 00:00 -0400"), group="Date Range")
date_to = input(title="To", type=input.time, defval=timestamp("20 Feb 2020 00:00 -0400"), group="Date Range")
window() => iff(filter_date_range, (time >= date_from) and (time <= date_to), true)
sma3 = sma(close,3*multiplier)
is_downtrend = _is_downtrend(sma3)
is_uptrend = _is_uptrend(sma3)
last=show_all? na:2*stop_channel_size
plot(is_downtrend and show_trends? sma3:na, style=plot.style_linebr, color=color.red, linewidth=1, show_last=last)
plot(is_uptrend and show_trends? sma3:na, style=plot.style_linebr, color=color.green, linewidth=1, show_last=last)
// long_channel_low = lowest(low,stop_channel_size)
// short_channel_high = highest(high,stop_channel_size)
// color_long_channel_low = color.red
// color_short_channel_high = color.red
// plot(long?long_channel_low:na, color=color_long_channel_low, show_last=last)
// plot(long?na:short_channel_high, color=color_short_channel_high, show_last=last)
o = open[multiplier-1]
c = close
l = low
h = high
for i=0 to multiplier-1
l := min(l,low[i])
h := max(h,high[i])
bool chop_ok = true
if check_chop
source = close
avg = sma3
pi = atan(1) * 4
periods = 30
highestHigh = highest(periods)
lowestLow = lowest(periods)
range = 25 / (highestHigh - lowestLow) * lowestLow
ema34 = ema(source, 34)
x1_ema34 = 0
x2_ema34 = 1
y1_ema34 = 0
y2_ema34 = (ema34[1] - ema34) / avg * range
c_ema34 = sqrt((x2_ema34 - x1_ema34)*(x2_ema34 - x1_ema34) + (y2_ema34 - y1_ema34)*(y2_ema34 - y1_ema34))
emaAngle_1 = round(180 * acos((x2_ema34 - x1_ema34)/c_ema34) / pi)
emaAngle = iff(y2_ema34 > 0, - emaAngle_1, emaAngle_1)
chop_ok := emaAngle >= 5
is_three_white_soldiers = chop_ok and _TWS(is_downtrend, o, c, multiplier)
is_three_inside_up = chop_ok and _TIU(is_downtrend, o, c, multiplier)
is_three_outside_up = chop_ok and _TOU(is_downtrend, o, c, multiplier)
is_morning_star = chop_ok and _MS(is_downtrend, o, c, multiplier)
bull = is_three_white_soldiers or is_three_inside_up or is_three_outside_up or is_morning_star
plotchar(is_three_white_soldiers, "three_white_soldiers", 'W', location.belowbar, #26A69A, size=size.tiny, show_last=last)
plotchar(is_three_inside_up, "three_inside_up", 'I', location.belowbar, #26A69A, size=size.tiny, show_last=last)
plotchar(is_three_outside_up, "three_outside_up", 'O', location.belowbar, #26A69A, size=size.tiny, show_last=last)
plotchar(is_morning_star, "morning_star", 'M', location.belowbar, #26A69A, size=size.tiny, show_last=last)
is_three_black_crows = chop_ok and _TBC(is_uptrend, o, c, multiplier)
is_three_inside_down = chop_ok and _TID(is_uptrend, o, c, multiplier)
is_three_outside_down = chop_ok and _TOD(is_uptrend, o, c, multiplier)
is_evening_star = chop_ok and _ES(is_uptrend, o, c, multiplier)
bear = is_three_black_crows or is_three_inside_down or is_three_outside_down or is_evening_star
plotchar(is_three_black_crows, "three_black_crows", 'B', location.abovebar, #EF5350, size=size.tiny, show_last=last)
plotchar(is_three_inside_down, "three_inside_down", 'I', location.abovebar, #EF5350, size=size.tiny, show_last=last)
plotchar(is_three_outside_down, "three_outside_down", 'O', location.abovebar, #EF5350, size=size.tiny, show_last=last)
plotchar(is_evening_star, "evening_star", 'E', location.abovebar, #EF5350, size=size.tiny, show_last=last)
// account_value = compound? (strategy.initial_capital + strategy.netprofit) : min(strategy.initial_capital,strategy.equity)
// risk_usx = account_value*risk_perc/100
// var float long_stop_price = na
// long_stop = crossunder(low, long_stop_price[1])
// plotshape(long_stop, style=shape.xcross, location=location.belowbar, color=color.red, editable=false)
// if long
// if strategy.position_size == 0
// if bull
// one_contract_usx = close*syminfo.pointvalue
// delta_usx = (close-long_channel_low)*syminfo.pointvalue
// contracts = risk_usx / delta_usx
// value = contracts * one_contract_usx
// if value > account_value
// contracts := account_value / one_contract_usx
// if contracts > 0
// long_stop_price := long_channel_low
// strategy.entry("long", strategy.long, contracts, when = window())
// else
// if long_stop or (bear and (close > strategy.position_avg_price))
// strategy.close("long", when = strategy.position_size > 0, qty_percent = 100)
Editor is loading...