Как поместить оператор заговора внутрь оператора if - PullRequest
1 голос
/ 26 сентября 2019

Я хочу построить кривую эквити на цене, чтобы сравнить стратегию с простой покупкой и удержанием.Чтобы сделать график полезным, кривая собственного капитала может либо начаться с начального капитала, либо соответствовать первой цене на графике, либо вообще не иметь кривой собственного капитала в зависимости от ручного ввода.

Используя приведенный ниже код, я получаю следующее:

  • line xx: Невозможно использовать 'plot' в локальной области видимости.

  • line xx: невозможно использовать 'plot' в локальной области видимости.

equitycurvetype = input(defval="No", title='Equity Curve Type', options=["No","Yes","Yes same start"])
if equitycurvetype == "Yes" 
    plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)  
if equitycurvetype == "Yes same start" 
    plot(strategy.equity * close[bar_index]/strategy.initial_capital, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

1 Ответ

1 голос
/ 26 сентября 2019

Невозможно построить из if блоков.Кроме того, хотя использование close[bar_index] является синтаксически правильным, оно вызовет ошибку времени выполнения из-за удаленных ссылок в прошлом, поэтому этот код сохраняет закрытие первого бара в переменной firstClose:

//@version=4
strategy("")
equitycurvetype = input(defval="No", title='Equity Curve Type', options=["No","Yes","Yes same start"])
// Save close of 1st bar in dataset using "var" to initialize only once.
var firstClose = close
float equity = na
if equitycurvetype == "Yes"
    equity := strategy.equity
else
    if equitycurvetype == "Yes same start"
        equity := strategy.equity * firstClose / strategy.initial_capital

plot(equity, title="Equity", color=color.red, linewidth=2, style=plot.style_areabr)
...