// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jpeach
//@version=3
strategy("MTF STOCH STRATEGY 2020", overlay=true)
//MULTI-TIMEFRAME STOCHASTIC BUILD.20200303
// STOCH 1 MAIN
resCustom = input(title="Stochastic 1 Resolution", type=resolution, defval="60")
len = input(14, minval=1, title="Stoch 1 Lenth")
smoothK = input(3, minval=1, title="SmoothK for Stoch 1")
smoothD = input(3, minval=1, title="SmoothD for Stoch 1")
// STOCH 2
ssStoch = input(true, title="Stochastic 2")
resCustom2 = input(title="Stochastic 2 Resolution", type=resolution, defval="15")
len2 = input(14, minval=1, title="Stoch 2 Length")
smoothK2 = input(3, minval=1, title="SmoothK for Stoch 2")
smoothD2 = input(3, minval=1, title="SmoothD for Stoch 2")
// STOCH 3
stStoch = input(true, title="Stochastic 3")
resCustom3 = input(title="Stochastic 3 Resolution", type=resolution, defval="180")
len3 = input(14, minval=1, title="Stoch 3 Length")
smoothK3 = input(3, minval=1, title="SmoothK for Stoch 3")
smoothD3 = input(3, minval=1, title="SmoothD for Stoch 3")
//STOCH 4
sfStoch = input(true, title="Stochastic 4")
resCustom4 = input(title="Stochastic 4 Resolution", type=resolution, defval="D")
len4 = input(14, minval=1, title="Stoch 4 Length")
smoothK4 = input(3, minval=1, title="SmoothK for Stoch 4")
smoothD4 = input(3, minval=1, title="SmoothD for Stoch 4")
upLine = input(80, minval=50, maxval=90, title="Upper Line Value?")
lowLine = input(20, minval=10, maxval=50, title="Lower Line Value?")
sml = input(true, title="Show Mid Line?")
sal = input(true, title="Show BG Highlight When All Oversold/Overbought")
// 1ST STOCH FORMULA
k = sma(stoch(close, high, low, len), smoothK)
d = sma(k, smoothD)
outK = security(tickerid, resCustom, k[1], lookahead=barmerge.lookahead_on)
outD = security(tickerid, resCustom, d[1], lookahead=barmerge.lookahead_on)
// 2ND STOCH FORMULA [CHART RES]
k2 = sma(stoch(close, high, low, len2), smoothK2)
d2 = sma(k2, smoothD2)
outK2 = security(tickerid, resCustom2, k2, lookahead=barmerge.lookahead_off)
outD2 = security(tickerid, resCustom2, d2, lookahead=barmerge.lookahead_off)
// 3RD STOCH FORMULA
k3 = sma(stoch(close, high, low, len3), smoothK3)
d3 = sma(k3, smoothD3)
outK3 = security(tickerid, resCustom3, k3[1], lookahead=barmerge.lookahead_on)
outD3 = security(tickerid, resCustom3, d3[1], lookahead=barmerge.lookahead_on)
// 4TH STOCH FORMULA
k4 = sma(stoch(close, high, low, len4), smoothK4)
d4 = sma(k4, smoothD4)
outK4 = security(tickerid, resCustom4, k4[1], lookahead=barmerge.lookahead_on)
outD4 = security(tickerid, resCustom4, d4[1], lookahead=barmerge.lookahead_on)
// DEFINITIONS FOR CROSS
aboveLine = outK > upLine ? 1 : 0
belowLine = outK < lowLine ? 1 : 0
crossUp = (outK[1] < outD[1] and outK[1] < lowLine[1]) and (outK > outD) ? 1 : 0
crossDn = (outK[1] > outD[1] and outK[1] > upLine[1]) and (outK < outD) ? 1 : 0
// NON-STRICT CROSS DEFINITIONS
crossUpAll = (outK[1] < outD[1] and outK > outD) ? 1 : 0
crossDownAll = (outK[1] > outD[1] and outK < outD) ? 1 : 0
// BG HIGHLIGHTS
bgcolor(sal and (outK>upLine) and (outK2>upLine) and (outK3>upLine) and (outK4>upLine) ? purple : na, transp=70)
bgcolor(sal and (outK<lowLine) and (outK2<lowLine) and (outK3<lowLine) and (outK4<lowLine) ? purple : na, transp=70)
// PLOT 1ST STOCH
plot(outK, title="Stoch K 1", style=line, linewidth=1, color=white, transp=0)
plot(outD, title="Stoch D 1", style=line, linewidth=1, color=red, transp=0)
// PLOT 2ND STOCH
plot(ssStoch and outK2 ? outK2 : na, title="Stoch K 2", style=line, linewidth=1, color=white, transp=60)
plot(ssStoch and outD2 ? outD2 : na, title="Stoch D 2", style=line, linewidth=1, color=red, transp=100)
// PLOT 3RD STOCH
plot(stStoch and outK3 ? outK3 : na, title="Stoch K 3", style=line, linewidth=2, color=white, transp=60)
plot(stStoch and outD3 ? outD3 : na, title="Stoch D 3", style=line, linewidth=2, color=red, transp=100)
// PLOT 4TH STOCH
plot(sfStoch and outK4 ? outK4 : na, title="Stoch K 4", style=line, linewidth=4, color=white, transp=90)
plot(sfStoch and outD4 ? outD4 : na, title="Stoch D 4", style=line, linewidth=4, color=red, transp=100)
p1 = plot(upLine, title= "Upper Line", style=solid, linewidth=1, color=gray)
p2 = plot(lowLine, title= "Lower Line", style=solid, linewidth=1, color=gray)
plot(sml and 50 ? 50 : na, title="Mid Line", style=linebr, linewidth=1, color=gray)
fill(p1, p2, color=silver, transp=90)
// *ALERTS SCRIPT*
// SHORT TIME FRAME STOCH CHECK [STOCH 2] DEFINITIONS
rev = input(20, minval=1, title="Review Bars (Chart Resolution)")
stfcheckS = highest(outK2,rev)
stfcheckB = lowest(outK2,rev)
// ALERTS
buy_alert = crossUpAll and (outK3>upLine) and (stfcheckB<20) ? 1 : 0
sell_alert = crossDownAll and (outK3<lowLine) and (stfcheckS>80) ? 1 : 0
// ALERT PLOTS AND HIGHLIGHTS
plot((buy_alert)or (sell_alert) ? 1 : 0, title="Alert", style=line, linewidth=1, color=black, transp=100)
bgcolor(buy_alert ? lime : na, transp=50)
bgcolor(sell_alert ? red : na, transp=50)
// STF HIGHLIGHTS
plotchar((outK>outD) and (outK2[1]>outD2[1] or crossover(outK2[1],outD2[1])) and outK2[1]<upLine, char='•', location=location.bottom, color=lime, transp=0, offset=0)
plotchar(outK2[1]>upLine and outK>upLine and outK>outD , char='•', location=location.bottom, color=lime, transp=0, offset=0)
plotchar((outK<outD) and (outK2[1]<outD2[1] or crossunder(outK2[1],outD2[1])) and outK2[1]>lowLine, char='•', location=location.bottom, color=red, transp=0, offset=0)
plotchar(outK2[1]<lowLine and outK<lowLine and outK<outD , char='•', location=location.bottom, color=red, transp=0, offset=0)
// ATR SL/TP CODE
length = input(14, minval=1)
atrres = input(title="Custom Resolution", type=resolution, defval="15")
useatrres = input(false, title="Use Current Resolution")
res = useatrres ? period : atrres
atrout = security(tickerid, atrres, atr(length)[1], lookahead=barmerge.lookahead_on)
stopMult = input(title="ATR S/L Multiplier", defval="3")
profitMult = input(title="ATR T/P Multiplier", defval="3")
// ENTRY/EXIT FUNCTIONS
longCondition = buy_alert
if (longCondition)
strategy.entry("Long", strategy.long)
// strategy.close("Long", when=longClose)
// strategy.exit("XL","Long", limit=tp, when=buy_trend, stop=sl)
shortCondition = sell_alert
if (shortCondition)
strategy.entry("Short", strategy.short)
// strategy.close("Short", when=shortClose)
// strategy.exit("XS","Short", when=sell_trend, limit=tp, stop=sl)
// S/L Line Plots
longStop = na
longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atrout * stopMult) : longStop[1]
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atrout * stopMult) : shortStop[1]
strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)
s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop')
строка 153: Невозможно вызвать operator *
с аргументами (серия, строка); доступные перегрузки: * (целое число, целое число) => целое число; * (плавать, плавать) => плавать; * (const integer, const integer) => const integer; * (const float, const float) => const float; * (целое число, серия [целое число]) => серия [целое число]; * (серия [целое число], целое число) => серия [целое число]; * (серия [целое число], серия [целое число]) => серия [целое число]; * (float, series) => серия; * (серия, число с плавающей запятой) => серия; * (серия, серия) => серия; строка 155: Невозможно вызвать operator *
с аргументами (серия, строка); доступные перегрузки: * (целое число, целое число) => целое число; * (плавать, плавать) => плавать; * (const integer, const integer) => const integer; * (const float, const float) => const float; * (целое число, серия [целое число]) => серия [целое число]; * (серия [целое число], целое число) => серия [целое число]; * (серия [целое число], серия [целое число]) => серия [целое число]; * (float, series) => серия; * (серия, число с плавающей запятой) => серия; * (серия, серия) => серия
Привет, кто-нибудь может просмотреть приведенный выше код и объяснить проблему выше? Спасибо, JP PS. Проблема конкретно относится к двум строкам ниже
longStop = na
longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atrout * stopMult) : longStop[1]
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atrout * stopMult) : shortStop[1]