pine-script - Pinescript,追踪止损重绘
问题描述
为什么pinescript中的一个简单的追踪止损会大幅重绘这个?
我正在使用pinescript 版本 4在Tradingview上对ETH/USD 和 1H进行一些回测。完整的脚本如下所示:
//@version=4
strategy(title="Simple SL script", shorttitle="Simple SL script", overlay = true, initial_capital=1000, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1, slippage = 5, pyramiding=1, calc_on_every_tick=false)
risk = input(title='Risk %', defval=100.0, step=1.0)/100
//secScaler = secType == "Forex" ? 100000 : secType == "Metal Spot" ? 100 : secType == "Cryptocurrency" ? 10000 : secType == "Custom" ? contracts : 0
fixedSL = input(title="SL Points", defval=1000)*10000
fixedTP = input(title="TP Points", defval=10)*10000
//##############################################################################
//Trade Logic
//##############################################################################
balance = strategy.initial_capital + strategy.netprofit
if (balance > 0)
lots = (risk * balance)/close
strategy.entry("BUY", strategy.long, qty=lots)
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=20, trail_points=fixedTP)
使用正常的回测或重放,我得到以下结果:
这导致加$20。
在回测之前,我让它运行实时数据,得到以下结果:
这导致负$6。
所以相差26 美元。
对于追踪止损,我没有使用任何证券或其他有问题的解决方案- 结果如何在 6 个柱(6 小时)的短时间范围内变化如此之大?
我确实尝试将其设置calc_on_every_tick
为 true,但正如预期的那样,我在同一支蜡烛中获得了大量的买卖订单。
解决方案
我在有关各种 Tradingview 想法和脚本的几篇文章中找到了答案。问题是回测 (BT) 时的每个条形仅包含Open
、Close
和High
的值Low
。此外,当仅具有上述数据字段以及在柱内执行交易时,Tradingview 支持您的订单方向。
这意味着如果我正在创建一个Long
定位订单并且脚本说要在同一个柱内卖出 - 它总是会关闭High
- 问题中的第一张图片也清楚地显示了这一点。
在实时数据测试期间,Tradingview 知道如何收集和临时存储它一直在进行实时测试的柱的所有数据。Open
这意味着它现在保存仅包含、Close
和High
的每个刻度的数据Low
。
注意:数据仅存储在您的浏览器会话中 - 如果您刷新页面或离开脚本,您的数据就会消失。您还需要在开始实时测试之前Recalulate on every tick
设置为。true
那该怎么办?
验证脚本的最佳方法是手动进行一些如上所述的实时数据测试。只需让您的计算机在您的窗口中运行 Tradingview 并打开您的脚本,您将获得实时数据结果。这在测试长期脚本时真的很烦人,比如摇摆策略。
编辑
Tradingview 似乎不提供intra-bar data
。我确信他们Premium
订阅了这个,但它似乎不可用。他们提供了一种叫做的东西,intraday data
但这只是时间范围低于daily
. 我也对其进行了测试,Bar Replay
但似乎也没有intrabar data
。确保您的脚本按预期工作的最佳方法是执行我上面提到的操作"What to do then?"
,并将结果与正常的回测进行比较。
推荐阅读
- android - 如何从 config.xml 为 phonegap 定位 android 的 API 级别?
- angular - 组件中未定义的角度服务对象
- web-services - 如何使用上下文路径来访问肥皂网络服务?
- apache-spark - Rdd 和 Dataset 的不同默认持久化
- java - Java - 你想继续吗?(Y/N)
- android - 如何在 2 个不同的班级之间等待接收结果:
- spring - 替换 Spring Bean 的私有方法
- node.js - 连接到 SMTP 服务器
- php - 如何在 ubuntu 18.04 和 PHP 7.2 上将 Libzip 更新到 1.2
- javascript - 如何在Javascript中的多维数组中获取每个标题的最小数字