Pine Script跨双标的套利策略实现问题求助(附v4测试代码)
解决方案:Pine Script 双标的切换套利策略实现
核心问题说明
- Pine Script v4 中
strategy.entry的symbol参数本身有效,但需满足策略设置允许多资产交易,且标的格式需符合平台要求(如美股直接用代码"MSFT",部分市场需带交易所前缀)。 - Pine Script v5 移除了
strategy.entry的symbol参数,需改用strategy.order配合跨标的数据获取来实现。
Pine Script v4 修正实现
关键修正点
- 在策略编辑界面的「设置→交易选项」中开启「允许多符号交易」。
- 直接使用平台标准标的代码,避免自定义拼接字符串导致格式错误。
- 优化信号逻辑,确保触发唯一性。
完整代码
//@version=4 strategy(title="AAPL-MSFT 切换套利策略", shorttitle="AAPL-MSFT Arb", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, margin_long=100, margin_short=100) // 基于主图标的AAPL计算SAR指标 sar_val = sar(0.02, 0.03, 0.2) plot(sar_val, color=color.blue, title="Parabolic SAR") // 定义切换信号 buy_aapl_signal = crossunder(close, sar_val) and sar_val > close // 切换至AAPL buy_msft_signal = crossover(close, sar_val) and sar_val < close // 切换至MSFT // 执行仓位切换 if buy_aapl_signal strategy.close_all(comment="平所有仓位") strategy.entry("持有AAPL", strategy.long, qty=100, comment="买入AAPL") // 主图标的无需指定symbol if buy_msft_signal strategy.close_all(comment="平所有仓位") strategy.entry("持有MSFT", strategy.long, symbol="MSFT", qty=100, comment="买入MSFT") // 指定目标标的
Pine Script v5 实现方案
核心思路
v5中通过request.security跨标的获取主标的(AAPL)的指标数据生成信号,再用strategy.order直接指定标的代码执行交易,同时需开启策略的多资产权限。
完整代码
//@version=5 strategy(title="AAPL-MSFT 切换套利策略", shorttitle="AAPL-MSFT Arb", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, margin_long=100, margin_short=100) // 定义主标的(AAPL),用于计算SAR指标 main_ticker = "AAPL" // 跨标的获取AAPL的收盘价和SAR指标 [main_close, main_sar] = request.security(main_ticker, timeframe.period, [close, ta.sar(0.02, 0.03, 0.2)]) // 绘制SAR指标(基于AAPL) plot(main_sar, color=color.blue, title="Parabolic SAR (AAPL)") // 定义切换信号 buy_aapl_signal = ta.crossunder(main_close, main_sar) and main_sar > main_close buy_msft_signal = ta.crossover(main_close, main_sar) and main_sar < main_close // 执行仓位切换 if buy_aapl_signal strategy.close_all(comment="平所有仓位") strategy.order("持有AAPL", strategy.long, qty=100, comment="买入AAPL") // 交易主标的 if buy_msft_signal strategy.close_all(comment="平所有仓位") strategy.order("持有MSFT", strategy.long, qty=100, comment="买入MSFT", symbol="MSFT") // 交易目标标的
通用注意事项
- 必须开启策略的「允许多符号交易」权限,否则跨标的交易指令会被系统忽略。
- 标的代码需严格匹配TradingView平台的标准格式(可通过搜索标的获取正确代码)。
- 若需按资金比例下单,可将
qty参数替换为qty=strategy.equity / target_close(需提前获取对应标的收盘价)。
内容的提问来源于stack exchange,提问作者Papa Stanley
相关产品推荐
相关产品推荐

