在PineScript的世界里,我们主要开发两种程序:“分析师”(指标)和“交易员”(策略)。
分析师的工作是观察市场、进行计算,并在图表上画出各种线条和信号来给你提供建议。它通过indicator()
函数进行声明。交易员更进一步,不仅会分析,还会根据分析结果直接进行模拟的买卖,并给出一份详细的回测结果。它通过strategy()
函数进行声明。
虽然它们的最终目标不同,但都需要进行一些基础的函数设置。今天我们就来详细梳理一下它们的设置项,看看哪些是通用的基本信息,又有哪些是各自专属的特殊能力。
一、 通用设置:指标与策略的“基本信息”
以下这些参数,无论是在indicator()
还是strategy()
函数中,用法和效果都完全一样。掌握了一套,就等于两套都掌握了。
1. 身份标识
title
(脚本标题):脚本的完整全名,会显示在图表、数据窗口、警报窗口等所有地方。这是每个脚本都应该有的“姓名”。shorttitle
(脚本短标题):脚本的简称或缩写,主要显示在图表左上角,用于节省空间。
2. 图表布局
overlay
(叠加在主图):一个布尔值(true
或false
)。设为true
,脚本会直接画在主图的K线上(如MA均线);设为false
,脚本会在下方开一个新的独立窗口(如MACD, RSI)。scale
(价格坐标轴):指定脚本使用哪个价格轴。scale.right
用右轴(默认),scale.left
用左轴,scale.none
则表示脚本不依赖价格轴,自成一派。linktoseries
(绑定到主序列):一个布尔值。设为true
后,会把脚本“锁死”在主图上,用户无法再把它拖到其他窗口。
3. 数值显示
format
(绘图数值格式):决定脚本画出的数值在价格轴上如何显示。format.price
:按价格格式显示,自动匹配小数位数。format.volume
:按成交量格式显示,自动带上K, M, B等单位。format.percent
:按百分比格式显示。
precision
(绘图数值精度):直接用数字指定绘图数值保留几位小数。这只影响显示,不影响内部计算的精度。
4. 绘图与性能
max_labels_count
(最大标签数量):图表上允许画出的label
的最大数量,最多可设为500。max_lines_count
(最大线条数量):图表上允许画出的line
的最大数量,最多可设为500。max_boxes_count
(最大方框数量):图表上允许画出的box
的最大数量,最多可设为500。explicit_plot_zorder
(显式绘图Z轴顺序):设为true
时,各种绘图(plot, fill等)的叠放顺序会严格按照它们在代码里出现的顺序来,后写的会盖住先写的。max_bars_back
(最大回溯K线数):告诉脚本在计算时最多需要回看多少根历史K线。大部分情况程序会自动计算,少数复杂情况下需要手动指定。
二、 指标专属的能力
指标虽然不能模拟交易,但它有两个策略望尘莫及的能力,都和处理多时间周期有关:
timeframe
(计算周期):允许指标在不同于当前图表的时间周期上进行计算。这是实现“大周期判断,小周期入场”分析的利器,比如在1小时图上看日线级别的均线。timeframe_gaps
(不同周期数据合并方式):在使用timeframe
时,如何处理高周期数据在低周期图表上的“空隙”,是连成一条线还是保留缺口。
三、 策略专属的“交易与回测工具箱”
策略配备了一整套完善的工具箱,用于精细化地控制交易行为和回测参数。
1. 核心回测设置
initial_capital
(初始资金):设定回测开始时账户里有多少钱。currency
(账户货币):设定账户的货币,如currency.USD
,currency.EUR
。
2. 仓位与订单管理
pyramiding
(金字塔加仓):允许在同方向上最多加仓几次。默认为0,即不允许加仓。default_qty_type
(默认数量类型):下单时,默认按什么方式计算手数,比如固定手数(strategy.fixed
)、按资金百分比(strategy.percent_of_equity
)或按固定现金价值(strategy.cash
)。default_qty_value
(默认数量值):配合上一条,填入具体的数值,比如100股,或者资金的2%。close_entries_rule
(平仓规则顺序):如果有多笔同向持仓,平仓时是“先进先出”("FIFO"
)还是“后进先出”("LIFO"
)。
3. 交易成本模拟
slippage
(滑点):为市价单和止损单在回测中模拟几个tick的滑点。commission_type
(佣金类型):设置佣金的计算方式,是按固定金额、成交额百分比,还是按每股/每手计算。commission_value
(佣金值):配合上一条,填入具体的佣金数值。
4. 计算与执行精细控制
calc_on_order_fills
(订单成交时重新计算):设为true
后,每次订单成交,策略都会立刻重新计算一次,而不是等到K线走完。calc_on_every_tick
(每个Tick都计算):设为true
后,在实时行情中,价格每跳动一次,策略就计算一次,以追求最快的信号,但会极大增加计算量。process_orders_on_close
(K线收盘时处理订单):允许策略在K线结束的那个瞬间,就用收盘价去尝试撮合订单。backtest_fill_limits_assumption
(限价单成交假设):在回测中,价格需要穿过限价单多少个tick,才认为该订单成交。
总结
无论是指标)还是策略,它们都需要进行一系列的基础设置。但指标拥有跨时间周期计算的能力,而策略则配备了从资金、仓位到成本、执行等一整套完善的交易与回测工具箱,搞清楚这些设置,是你写出专业脚本的第一步。