Pine script 松树脚本为什么可以';我不能用barssince作为策略条件吗?

Pine script 松树脚本为什么可以';我不能用barssince作为策略条件吗?,pine-script,Pine Script,我的策略如下: //@version=4 strategy("Simple RSI Buy/Sell at a level", shorttitle="Simple RSI Strategy", default_qty_type=strategy.cash, default_qty_value=1000, currency=currency.USD, initial_capital=10000,commission_type=strategy.commis

我的策略如下:

//@version=4
strategy("Simple RSI Buy/Sell at a level", shorttitle="Simple RSI Strategy", default_qty_type=strategy.cash, default_qty_value=1000, currency=currency.USD, initial_capital=10000,commission_type=strategy.commission.percent, commission_value=0.075, pyramiding=20)


FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2022, title = "To Year", minval = 2017)

start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window

window() => time >= start and time <= finish ? true : false // create function "within window of time"

rsi1 = rsi(close, 14) > input(70)
rsi2 = rsi(close, 14) < input(28)

barcolor(rsi1 ? color.black : na)
barcolor(rsi2 ? color.blue : na)

stopPer = input(50.0, title='Stop Loss %', type=input.float) / 100
takePer = input(80.0, title='Take Profit %', type=input.float) / 100


buy_signal_cnt = 0
buy_signal = (window() and rsi2)
buy_signal_cnt := barssince(buy_signal)

plot(buy_signal_cnt)

if (buy_signal_cnt > 1)
    strategy.entry("Buy",strategy.long, stop=longStop, qty=500, when = buy_signal)

if ((strategy.position_avg_price - close) / close > 0.5)
    strategy.close_all(comment="Sell All", when=window())
    
//strategy.entry("Sell",strategy.short, stop=shortStop, qty=strategy.position_size * 0.5, when = window() and rsi1 and strategy.position_size > 0)
strategy.close("Buy", when = window() and rsi1 and strategy.position_size > 0, qty_percent = 60, comment = "close 60%")



/@version=4
策略(“简单RSI水平买入/卖出”,shorttitle=“简单RSI策略”,默认数量类型=策略。现金,默认数量价值=1000,货币=货币。美元,初始资本=10000,佣金类型=策略。佣金。百分比,佣金价值=0.075,聚合=20)
FromMonth=输入(defval=1,title=“From Month”,minval=1,maxval=12)
FromDay=输入(defval=1,title=“From Day”,minval=1,maxval=31)
FromYear=输入(defval=2017,title=“From Year”,minval=2017)
ToMonth=输入(defval=1,title=“To Month”,minval=1,maxval=12)
今天=输入(defval=1,title=“今天”,minval=1,maxval=31)
ToYear=输入(defval=2022,title=“To Year”,minval=2017)
开始=时间戳(FromYear、FromMonth、FromDay、00、00)//反向测试开始窗口
finish=时间戳(今年,明天,今天,23,59)//回溯测试完成窗口
窗口()=>时间>=开始和时间输入(70)
rsi2=rsi(关闭,14)<输入(28)
barcolor(rsi1?颜色。黑色:na)
barcolor(rsi2?颜色。蓝色:na)
stopPer=输入(50.0,title='Stop-Loss%',type=input.float)/100
takePer=input(80.0,title='Take Profit%',type=input.float)/100
购买信号=0
购买信号=(窗口()和rsi2)
购买信号:购物(购买信号)
绘图(购买信号)
如果(购买信号>1)
strategy.entry(“买入”,strategy.long,stop=longStop,qty=500,when=Buy\u信号)
如果((策略位置平均价格-收盘)/收盘>0.5)
策略。全部关闭(comment=“Sell all”,when=window())
//strategy.entry(“卖出”,strategy.short,stop=shortStop,qty=strategy.position_size*0.5,当=window()和rsi1以及strategy.position_size>0)
strategy.close(“购买”,当=window()和rsi1且strategy.position_size>0时,数量百分比=60,注释=“close 60%”)
问题是,如果(buy_signal_cnt>1),它根本不会触发任何条件为
的买入信号,如果没有这个条件,就可以了

购买信号\u cnt的曲线图看起来与预期一致,这是自满足上一个信号条件以来的条数,但为什么我不能使用它作为条件


每当您的
购买信号
变量变为真时,
barssince()
将返回零,因此现在我们使用上一个条形图中的条形图计数

我们为您的
longStop
变量添加了一些内容,因为它丢失了。请记住,这是停止购买级别,以及最后的调试图:

//@version=4
strategy("Simple RSI Buy/Sell at a level", shorttitle="Simple RSI Strategy", default_qty_type=strategy.cash, default_qty_value=1000, currency=currency.USD, initial_capital=10000,commission_type=strategy.commission.percent, commission_value=0.075, pyramiding=20)


FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2022, title = "To Year", minval = 2017)

start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window

window() => time >= start and time <= finish ? true : false // create function "within window of time"

rsi1 = rsi(close, 14) > input(70)
rsi2 = rsi(close, 14) < input(28)

barcolor(rsi1 ? color.black : na)
barcolor(rsi2 ? color.blue : na)

stopPer = input(50.0, title='Stop Loss %', type=input.float) / 100
takePer = input(80.0, title='Take Profit %', type=input.float) / 100


buy_signal_cnt = 0
buy_signal = (window() and rsi2)
// We are using the bar count from the preceding bar, because whenever `buy_signal` is true, `barssince()` will return 0.
buy_signal_cnt := barssince(buy_signal)[1]

plot(buy_signal_cnt)

// This is the stop-buy limit.
longStop = low
if (buy_signal_cnt > 1)
    strategy.entry("Buy",strategy.long, stop=longStop, qty=500, when = buy_signal)

if ((strategy.position_avg_price - close) / close > 0.5)
    strategy.close_all(comment="Sell All", when=window())
    
//strategy.entry("Sell",strategy.short, stop=shortStop, qty=strategy.position_size * 0.5, when = window() and rsi1 and strategy.position_size > 0)
strategy.close("Buy", when = window() and rsi1 and strategy.position_size > 0, qty_percent = 60, comment = "close 60%")

// Debugging.
plotchar(buy_signal, "buy_signal", "•", location.top, size = size.tiny)
bgcolor(buy_signal_cnt > 1 and buy_signal ? color.silver : na)
/@version=4
策略(“简单RSI水平买入/卖出”,shorttitle=“简单RSI策略”,默认数量类型=策略。现金,默认数量价值=1000,货币=货币。美元,初始资本=10000,佣金类型=策略。佣金。百分比,佣金价值=0.075,聚合=20)
FromMonth=输入(defval=1,title=“From Month”,minval=1,maxval=12)
FromDay=输入(defval=1,title=“From Day”,minval=1,maxval=31)
FromYear=输入(defval=2017,title=“From Year”,minval=2017)
ToMonth=输入(defval=1,title=“To Month”,minval=1,maxval=12)
今天=输入(defval=1,title=“今天”,minval=1,maxval=31)
ToYear=输入(defval=2022,title=“To Year”,minval=2017)
开始=时间戳(FromYear、FromMonth、FromDay、00、00)//反向测试开始窗口
finish=时间戳(今年,明天,今天,23,59)//回溯测试完成窗口
窗口()=>时间>=开始和时间输入(70)
rsi2=rsi(关闭,14)<输入(28)
barcolor(rsi1?颜色。黑色:na)
barcolor(rsi2?颜色。蓝色:na)
stopPer=输入(50.0,title='Stop-Loss%',type=input.float)/100
takePer=input(80.0,title='Take Profit%',type=input.float)/100
购买信号=0
购买信号=(窗口()和rsi2)
//我们使用的是前一条中的条数,因为每当'buy_signal'为true时,'barssince()'将返回0。
购买信号:购买信号[1]
绘图(购买信号)
//这是停买限制。
长顶=低
如果(购买信号>1)
strategy.entry(“买入”,strategy.long,stop=longStop,qty=500,when=Buy\u信号)
如果((策略位置平均价格-收盘)/收盘>0.5)
策略。全部关闭(comment=“Sell all”,when=window())
//strategy.entry(“卖出”,strategy.short,stop=shortStop,qty=strategy.position_size*0.5,当=window()和rsi1以及strategy.position_size>0)
strategy.close(“购买”,当=window()和rsi1且strategy.position_size>0时,数量百分比=60,注释=“close 60%”)
//调试。
plotchar(购买信号,“购买信号”,“•”,location.top,size=size.tiny)
bgcolor(购买信号>1和购买信号?颜色。银色:na)

谢谢你的回答。我在这里也找到了