pine-script - 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黄色背景段在那里,但是为什么没有位置标记,就像所有其他黄色段一样? 当我查看交易列表时,我的头寸也不在该列表中。
这是一个错误,还是我做错了什么?
解决方案
我有一个修复。
strategy.entry(...)
我观察到的行为似乎是在同一轮计算中多次调用时发生的情况。
我有一个针对各种进入条件的 if 语句,每个条件都go_long()
在满足时调用我的函数。有问题的酒吧碰巧满足了我的一个以上的进入条件,所以go_long()
被调用了两次。不知何故,调用我的函数两次导致没有位置,即使我if ( strategy.position_size <= 0 )
在那里有线......我原以为第一次调用会打开仓位,第二次调用会触发 if 语句,但这显然不是实际发生了什么。那么可能是语言中的错误?
无论如何,我的问题是通过将我的 if 语句更改为 if-else 语句来解决的,以确保只能调用一次go_long()
。现在一切都按预期工作。
推荐阅读
- azure - Elk Logstash 无法连接到事件中心 Azure
- c# - 按钮“后退”始终禁用
- php - 问题解决 在 PHP 7.2 上移动上传的文件错误 8 - UPLOAD_ERR_EXTENSION
- javascript - 可观察管道中的异常被抑制
- asp.net-core - 扩展 ResourceManagerStringLocalizer 功能
- php - 元查询 - 在一个查询中比较两个元值
- angular - 如果一次失败,为什么角度 ngx 效果不起作用?
- python - 从以特定字符开头的目录中获取文件
- react-native - 在 react native 中使用 Branch.io 进行分析
- regex - notepad++ 中的正则表达式(搜索和替换)