Pine script 为什么我的策略没有显示任何数据?

Pine script 为什么我的策略没有显示任何数据?,pine-script,back-testing,Pine Script,Back Testing,我正在用pine脚本为TradingView中的回溯测试编写一个简单的策略。逻辑很简单。如果今天的收盘价低于52周低点,则购买价值10000卢比的股票。我的代码如下所示: //@version=4 strategy("Darshan 52 week low", overlay=true) // Get 52 week low value weekly_lc = security(syminfo.tickerid,"W", lowest(close,52), lookahead=barmerge

我正在用pine脚本为TradingView中的回溯测试编写一个简单的策略。逻辑很简单。如果今天的收盘价低于52周低点,则购买价值10000卢比的股票。我的代码如下所示:

//@version=4
strategy("Darshan 52 week low", overlay=true)

// Get 52 week low value
weekly_lc = security(syminfo.tickerid,"W", lowest(close,52), lookahead=barmerge.lookahead_on)

// is close/open/high/low is less than 52 week low
if (close < weekly_lc)
    // if yes buy INR 10000 worth of stocks
    quantityToBuy = 10000/close
    strategy.entry("long", strategy.long, quantityToBuy)
/@version=4
策略(“Darshan 52周低点”,叠加=真)
//获得52周的最低值
每周\u lc=安全性(syminfo.tickerid,“W”,最低(关闭,52),前瞻=barmerge.lookahead\u开启)
//收盘/开盘/高位/低位低于52周低位
如果(关闭<每周\u lc)
//如果是,购买价值10000卢比的股票
quantityToBuy=10000/关闭
strategy.entry(“long”、strategy.long、quantityToBuy)
当运行NSE:ITC股票时,这不会产生任何数据。我不知道为什么,也没有可以查看逐行行为的调试器。我试着设计周线图,效果很好

更新1:我把我的整个脚本和退出条件放在这里

    //@version=4
strategy("Darshan 52 week low", overlay=true)

// Get 52 week low value
weekly_lc = security(syminfo.tickerid,"W", lowest(close,52), lookahead=barmerge.lookahead_on)

highAfterPurchase=0

// is close/open/high/low is less than 52 week low
if (close <= weekly_lc)
    // if yes buy INR 10000 worth of stocks
    quantityToBuy = 10000/close
    strategy.entry("darshan-long", strategy.long, quantityToBuy)

    // Set the purchase price as high
    highAfterPurchase = close

if (close > highAfterPurchase)
    highAfterPurchase = close

// is close price 15% lesser than high then exit 
closeHighDelta = highAfterPurchase - highAfterPurchase * 0.15
if (close < closeHighDelta)
    strategy.exit("exit", "darshan-long")
/@version=4
策略(“Darshan 52周低点”,叠加=真)
//获得52周的最低值
每周\u lc=安全性(syminfo.tickerid,“W”,最低(关闭,52),前瞻=barmerge.lookahead\u开启)
highAfterPurchase=0
//收盘/开盘/高位/低位低于52周低位
if(购买后关闭)
highAfterPurchase=关闭
//收盘价是否比高点低15%,然后退出
closeHighDelta=highAfterPurchase-highAfterPurchase*0.15
if(关闭<关闭高增量)
策略。退出(“退出”,“达山龙”)
Strategy Tester屏幕如下所示:

//@version=4
strategy("Darshan 52 week low", overlay=true)

// Get 52 week low value
weekly_lc = security(syminfo.tickerid,"W", lowest(close,52), lookahead=barmerge.lookahead_on)

// is close/open/high/low is less than 52 week low
if (close < weekly_lc)
    // if yes buy INR 10000 worth of stocks
    quantityToBuy = 10000/close
    strategy.entry("long", strategy.long, quantityToBuy)

如果你仔细观察,你确实有一项交易。在2000年4月24日,已满足进入条件,价格为12.80美元。退出条件仍然开放,这意味着您的退出条件尚未满足,您仍处于多头状态

我将通过向您展示如何调试来尝试向您展示您的策略发生了什么

首先,让我们将您的策略转换为指标。我总是从一个指标开始,当我对它感到满意时,再把它转换成一个策略

为了显示是否有买入信号或卖出信号,我们将使用
plotshape()
函数和一些附加变量

//@version=4
study("Darshan 52 week low", overlay=true)

var isLong = false      // Flag to see if we are currently long
var isShort = false     // Flag to see if we are currently short

var highAfterPurchase = 0.0

// Get 52 week low value
weekly_lc = security(syminfo.tickerid,"W", lowest(close,52), lookahead=barmerge.lookahead_on)

buySignal = not isLong and (close < weekly_lc)  // Buy only if not already long

highAfterPurchase := iff(buySignal, close, nz(highAfterPurchase[1]))    // If we are already long, update highAfterPurchase with the current close
                                                                        // else, keep the old value
// is close price 15% lesser than high then exit 
closeHighDelta = highAfterPurchase - (highAfterPurchase * 0.15)

sellSignal = not isShort and (close < closeHighDelta)   // Sell only if not alread short

if (buySignal)  // Reset signals
    isLong := true
    isShort := false

if (sellSignal) // Reset signals
    isLong := false
    isShort := true

plotshape(series=buySignal, text="BUY", style=shape.triangleup, color=color.green, location=location.belowbar, size=size.small)
plotshape(series=sellSignal, text="SELL", style=shape.triangledown, color=color.red, location=location.abovebar, size=size.small)
现在,你的买入条件是,当绿线(收盘)低于蓝线(周线)时,你的卖出条件是绿线(收盘)低于红线(收盘)

如果您查看绘图(如果看不清楚,可以在设置中使其中一些绘图不可见),则您的买入条件只发生一次,而您的卖出条件永远不会变为
。所以,你总是

以下是修改后的策略:

//@version=4
strategy("Darshan 52 week low", overlay=true)

// Time inputs that the strategy is going to apply on
FromMonth = input(defval = 01, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 01, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 08, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2019, title = "To Year", minval = 2017)

// Time frame calculations
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"

var isLong = false      // Flag to see if we are currently long
var isShort = false     // Flag to see if we are currently short

var highAfterPurchase = 0.0

// Get 52 week low value
weekly_lc = security(syminfo.tickerid,"W", lowest(close,52), lookahead=barmerge.lookahead_on)

buySignal = not isLong and (close < weekly_lc)  // Buy only if not already long

highAfterPurchase := iff(buySignal, close, nz(highAfterPurchase[1]))    // If we are already long, update highAfterPurchase with the current close
                                                                        // else, keep the old value
// is close price 15% lesser than high then exit 
closeHighDelta = highAfterPurchase - (highAfterPurchase * 0.15)

sellSignal = not isShort and (close < closeHighDelta)   // Sell only if not alread short

if (buySignal)  // Reset signals
    isLong := true
    isShort := false

if (sellSignal) // Reset signals
    isLong := false
    isShort := true

strategy.entry(id="darshan-long", long=strategy.long, when=buySignal and window())
strategy.close(id="darshan-long", when=sellSignal and window())
/@version=4
策略(“Darshan 52周低点”,叠加=真)
//策略将应用于的时间输入
FromMonth=输入(defval=01,title=“From Month”,minval=1,maxval=12)
FromDay=输入(defval=01,title=“From Day”,minval=1,maxval=31)
FromYear=输入(defval=2018,title=“From Year”,minval=2017)
ToMonth=输入(defval=08,title=“To Month”,minval=1,maxval=12)
今天=输入(defval=31,title=“今天”,minval=1,maxval=31)
ToYear=输入(defval=2019,title=“To Year”,minval=2017)
//时间框架计算
开始=时间戳(FromYear、FromMonth、FromDay、00、00)//反向测试开始窗口
finish=时间戳(今年,明天,今天,23,59)//回溯测试完成窗口

window()=>time>=开始和时间可能是因为没有退出条件而没有得到任何结果?您是否在“交易列表”选项卡中看到零个条目?@BarisYakut交易列表为零。我也提出了退出条件,但没有效果。不是真的,我已经为你准备了一个答案。我尝试了你修改后的策略,但我没有得到一笔交易。我将销售标准从15%更改为1%。您使用的时间范围是什么?我没有指定任何时间范围。老实说,我不知道如何指定时间范围。我删除了我的代码并粘贴了你的代码。作为我研究的一部分,我发现一只股票应该立即产生卖出信号。股票名称为IRB Infrastructure。但我们的两种策略都没有给出退出信号。请看我的第一个屏幕截图。在左上角的符号(ITC)旁边有一个M。这表明图表的时间框架是每月一次。或者,您可以查看图表左上角的线条,在那里可以看到条形图的打开、关闭、低值和高值。ITC-1M-NSE。你看到了什么?我有W。我把它改成了M,我得到了一笔长期交易。我对IRB使用了相同的配置和策略代码,应该立即生成exit。我不确定我们的逻辑哪里都错了。