首页 > 解决方案 > strategy.entry() 没有在应该开仓的时候开仓

问题描述

我对 Pine Script 很陌生,我正在尝试我的第一个策略。我以为我让它工作了,但后来我注意到一个历史柱,在一个股票代码上,在一个时间框架上,调用strategy.entry(...)没有打开头寸,而在我仔细检查的所有其他情况下都正常工作。我希望能得到一些帮助来弄清楚发生了什么,因为我没有想法。

这是负责打开和关闭我的头寸的代码:

//@version=4
strategy('My Strategy', 
     overlay = false, 
     max_labels_count=500, 
     calc_on_every_tick=true, 
     initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100,
     commission_type=strategy.commission.percent, commission_value=0.1)

var debugLong = array.new_int(1) // Using an array to enable setting of global variable from function
bgcolor(array.get(debugLong, 0) ? color.yellow : na)

go_long() =>
    if ( strategy.position_size <= 0 )
        array.set(debugLong, 0, 1) // Make background yellow
        strategy.entry("long", strategy.long)

close_long() =>
    array.set(debugLong, 0, 0) // Turn off background highlight
    strategy.close("long")

所以上面的代码设置为在我们开仓时开始将我的背景绘制为黄色,然后在我们退出时停止绘制。通过这种方式,我可以查看我的策略窗格并轻松地将黄色段与位置标记相关联。

这就是我所看到的: 在此处输入图像描述

所以,最后一个黄色段缺少相应的开仓...我知道strategy.entry(...)已经执行,b/c黄色背景段在那里,但是为什么没有位置标记,就像所有其他黄色段一样? 当我查看交易列表时,我的头寸也不在该列表中。

这是一个错误,还是我做错了什么?

标签: pine-script

解决方案


我有一个修复。

strategy.entry(...)我观察到的行为似乎是在同一轮计算中多次调用时发生的情况。

我有一个针对各种进入条件的 if 语句,每个条件都go_long()在满足时调用我的函数。有问题的酒吧碰巧满足了我的一个以上的进入条件,所以go_long()被调用了两次。不知何故,调用我的函数两次导致没有位置,即使我if ( strategy.position_size <= 0 )在那里有线......我原以为第一次调用会打开仓位,第二次调用会触发 if 语句,但这显然不是实际发生了什么。那么可能是语言中的错误?

无论如何,我的问题是通过将我的 if 语句更改为 if-else 语句来解决的,以确保只能调用一次go_long()。现在一切都按预期工作。


推荐阅读