1

Now convert to python from tradingview pine script. But have some problem. under function.

reso(exp, use, res) => use ? security(tickerid, res, exp) : exp

I don't understand to pine script security function. and don't convert to python.

original url: https://www.tradingview.com/script/X227SKSM-Open-Close-Cross-Strategy-R6-1-revised-by-yourmattie/

pine script source code:

//@version=2
strategy(title = "Open Close Cross Strategy", shorttitle = "OCC Strategy", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
// === INPUTS ===
useRes = input(defval = true, title = "Use Alternate Resolution? ( 
recommended )")
stratRes = input(defval = "120", title = "Set Resolution ( should not be lower than chart )", type = resolution)
useMA = input(defval = true, title = "Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval = "DEMA", title = "MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type = string)
basisLen = input(defval = 14, title = "MA Period", minval = 1)
offsetSigma = input(defval = 6, title = "Offset for LSMA / Sigma for ALMA", minval = 0)
offsetALMA = input(defval = 0.85, title = "Offset for ALMA", minval = 0, step = 0.01)
useStop = input(defval = true, title = "Use Trailing Stop?")
slPoints = input(defval = 200, title = "Stop Loss Trail Points", minval = 1)
slOffset = input(defval = 400, title = "Stop Loss Trail Offset", minval = 1)
// === /INPUTS ===
// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
 v1 = sma(src, len) // Simple
 v2 = ema(src, len) // Exponential
 v3 = 2 * v2 - ema(v2, len) // Double Exponential
 v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential
 v5 = wma(src, len) // Weighted
 v6 = vwma(src, len) // Volume Weighted
 v7 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len // Smoothed
 v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull
 v9 = linreg(src, len, offSig) // Least Squares
 v10 = alma(src, len, offALMA, offSig) // Arnaud Legoux
 type=="EMA"?v2 : type=="DEMA"?v3 : type=="TEMA"?v4 : type=="WMA"?v5 : type=="VWMA"?v6 : type=="SMMA"?v7 : type=="HullMA"?v8 : type=="LSMA"?v9 : type=="ALMA"?v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) => use ? security(tickerid, res, exp) : exp
// === /BASE FUNCTIONS ===
// === SERIES SETUP ===
// open/close
closeSeries = useMA ? reso(variant(basisType, close, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(close, useRes, stratRes)
openSeries = useMA ? reso(variant(basisType, open, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(open, useRes, stratRes)
trendState = closeSeries > openSeries ? true : closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===
// === PLOTTING ===
barcolor(color = closeSeries > openSeries ? #006600 : #990000, title = "Bar Colours")
// channel outline
closePlot = plot(closeSeries, title = "Close Line", color = #009900, linewidth = 2, style = line, transp = 90)
openPlot = plot(openSeries, title = "Open Line", color = #CC0000, linewidth = 2, style = line, transp = 90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp = 100, editable = false)
openPlotU = plot(trendState ? openSeries : na, transp = 100, editable = false)
closePlotD = plot(trendState ? na : closeSeries, transp = 100, editable = false)
openPlotD = plot(trendState ? na : openSeries, transp = 100, editable = false)
fill(openPlotU, closePlotU, title = "Up Trend Fill", color = #009900, transp = 40)
fill(openPlotD, closePlotD, title = "Down Trend Fill", color = #CC0000, transp = 40)
// === /PLOTTING ===
// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when = longCond)
strategy.entry("short", strategy.short, when = shortCond)
// if we're using the trailing stop
if (useStop)
 strategy.exit("XL", from_entry = "long", trail_points = slPoints, trail_offset = slOffset)
 strategy.exit("XS", from_entry = "short", trail_points = slPoints, trail_offset = slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry = "long", when = shortCond)
strategy.exit("XS", from_entry = "short", when = longCond)
// === /STRATEGY ===
alper
3,52513 gold badges64 silver badges127 bronze badges
asked Dec 4, 2018 at 1:12

2 Answers 2

3

Don't use security() at all. It contains future leak.

Therefore Open Close Cross strategy will never work. Don't be fooled by these exceptional backtest results.

answered Mar 23, 2019 at 0:12
Sign up to request clarification or add additional context in comments.

2 Comments

Perhaps it sounds like a comment, but unfortunately it is the best answer to this issue. Definitely should stay here.
I can use security() for what I want, with no issues. It is just reading from a different data source. Its quirks can be learned and avoided or worked around, especially if your aim is to use more than one time frame.
2

Please read about security function here https://www.tradingview.com/wiki/Context_Switching,The%E2%80%98security%E2%80%99_Function

The security function security(tickerid, timeframe, exp) would calculate the exp on a data, different from main chart symbol.

answered Dec 12, 2018 at 14:18

1 Comment

Please consider the @PeterO's answer below.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.