回测时TradingView策略测试器未生成我的策略交易记录是什么原因?
问题排查原因
- 核心逻辑错误:止损止盈计算时机错误
你在尚未执行开仓指令的if分支头部,就调用strategy.position_avg_price计算止损止盈。此时你还处于空仓状态(if判断条件包含OutTrade = strategy.position_size <= 0),strategy.position_avg_price返回值为na,导致后续strategy.exit的stop和limit参数均为无效值,直接造成整条开平仓指令组失效。 - 时间过滤条件未生效
你定义了仅交易2010年之后的TimePeriod变量,但没有将该条件加入入场的if判断中,若你的回测时间范围小于2010年,也会触发无交易的问题。 - 额外冗余参数问题
你在strategy.entry中重复添加了when=OutTrade参数,虽然不是直接原因,但和外层if判断逻辑重复,会增加逻辑出错概率。 - 其他可排查配置项
检查TradingView策略测试器的基础配置:初始资金是否足够买入至少1手对应交易品种、手续费/滑点设置是否极端、回测时间范围是否覆盖了符合均线多头排列的行情区间。
修复后的参考代码
//@version=4 strategy("Simple Long", overlay=true) Long1 = sma(close,150) > sma(close,200) Long2 = sma(close,50) > sma(close,150) Long3 = ema(close,21) > sma(close,50) Long4 = close > ema(close,21) OutTrade = strategy.position_size <= 0 TimePeriod = time > timestamp(syminfo.timezone, 2010, 01, 01, 0, 0) if(Long1 and Long2 and Long3 and Long4 and OutTrade and TimePeriod) strategy.entry("Long", strategy.long) // 开仓后再计算止损止盈,此时position_avg_price已更新为开仓价 StopLoss = strategy.position_avg_price * 0.95 TakeProfit = strategy.position_avg_price * 1.2 strategy.exit("Exit", "Long", stop=StopLoss, limit=TakeProfit)
你提供的回测结果截图如下:
内容的提问来源于stack exchange,提问作者DogDogMe
相关产品推荐
相关产品推荐

