0

How do i recode this? How to fix the error?


var float close_lock    = na
var float open_lock     = na
var float high_lock     = na
var float low_lock      = na

var bool normal_ticker_check    = na
normal_ticker_check := syminfo.type != 'spread'

if (normal_ticker_check)
    close_lock   := security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , close ,barmerge.gaps_off, barmerge.lookahead_on) 
    open_lock    := security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , open  ,barmerge.gaps_off, barmerge.lookahead_on) 
    high_lock    := security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , high  ,barmerge.gaps_off, barmerge.lookahead_on) 
    low_lock     := security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , low   ,barmerge.gaps_off, barmerge.lookahead_on) 
else
    close_lock   := close 
    open_lock    := open 
    high_lock    := high 
    low_lock     := low 



ERROR: Cannot call 'security' or 'financial' inside 'if' or 'for'

rohan sawant
  • 121
  • 1
  • 14

1 Answers1

0

How about rendering your security call in the global scope, then assigning as you have? I used a tuple here to reduce your occurrences of the security call to 1 as well (best practice to use as little as possible)

var float close_lock    = na
var float open_lock     = na
var float high_lock     = na
var float low_lock      = na

var bool normal_ticker_check    = na
normal_ticker_check := syminfo.type != 'spread'

[o, h, l, c] = security(syminfo.prefix+":"+syminfo.ticker , timeframe.period , [open, high, low, close] ,barmerge.gaps_off, barmerge.lookahead_on) 

if (normal_ticker_check)
    close_lock   := c
    open_lock    := o
    high_lock    := h
    low_lock     := l
else
    close_lock   := close 
    open_lock    := open 
    high_lock    := high 
    low_lock     := low 
Bjorgum
  • 2,054
  • 2
  • 4
  • 11