策略属性

每个 Pine 策略都有许多决定其行为的属性:

  1. 初始资金
  2. 基础货币
  3. 订单数量
  4. 金字塔式(递进落单)
  5. 手续费
  6. 对限价单核对价格
  7. 滑点
  8. 保证金
  9. 重新计算

它们在策略设置的“属性”标签中可用:

通过在相应的Pine脚本中编辑strategy()函数调用的参数,可以更改策略属性中指定的每个参数:

 

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)

让我们来看看“属性”菜单中的每个输入参数及其在 Pine 语言中的对应参数:  

1 - 初始资金(参数:initial_capital)表示最初可用于交易策略的资金量,以基础货币中定义的货币计。默认情况下,此值等于 100,000。您可能需要增加此值才能在某些商品上进行交易。

2 - 基础货币(参数:currency)指定用于计算的货币。出现在策略测试器标签中的结果(盈利、亏损、回撤等)以该货币表示。 可用的选择是:

默认、美元、欧元、澳元、英镑、新西兰元、加元、瑞士法郎、港元、日元、挪威克朗、瑞典克朗、新加坡元、土耳其里拉、南非兰特。如果选择默认选项,该策略将使用该商品的默认货币,并且没有货币转换。

3 - 订单数量(参数:default_qty_value、default_qty_type)。这需要一个值和一个计算模式。请注意,由于商品的最小可交易数量,计算值可能会受到限制:

  • 合约(参数:strategy.fixed) - 策略将以指定数量的合约/股票/手数进入。
  • 货币金额(参数:strategy.cash)- 策略将输入以基础货币指定的金额。
  • 权益百分比(参数:strategy.percent_of_equity)- 仓位规模将计算为交易开始时可用权益的百分比。您可以指定一个大于 100% 的值。

4 - 金字塔式(参数: pyramiding)指定在同一方向上允许的最大连续挂单数。当金字塔式被禁用时,即使满足入场条件,该策略也只能开设一个多头或空头仓位。金字塔只影响使用 strategy.entry() 函数创建的挂单。它对使用 strategy.order() 创建的订单没有影响。

5 - 手续费(参数:commission_type、commission_value)。它是为每笔交易支付的交易费用金额。必须提供值和计算模式。请注意,佣金适用于进场和出场,当使用百分比时,计算的佣金将随交易价值而变化:

  • 交易价值的百分比(参数:strategy.commission.percent) - 对每个订单征收等于指定百分比的手续费。
  • 货币 每份合约(参数:strategy.commission.cash_per_contract) - 对每份合约收取手续费。
  • 货币 每个订单(参数:strategy.commission.cash_per_order) - 对每个订单收取手续费。

6 - 对限价单核对价格(参数:backtest_fill_limits_assumption)让使用限价订单开仓的条件更加严格。默认情况下,此值为 0,即一旦达到订单中指示的价格,就会根据历史数据执行限价订单。如果该参数不为零,则限价订单只有在市场价格超过限价订单水平指定的tick数时才能在K线内建仓。

7 - 滑点(参数:slippage)指定要添加到市价单或止损单的成交价的tick值。它可以用来解释点差。

8 - 多头/空头仓位保证金(参数:margin_long、margin_short)指定每笔交易的保证金,即交易者必须注资的仓位百分比。 例如,如果多头仓位的保证金设置为 25%,则交易者必须有足够的资金来支付 25% 的未平仓交易,并且有可能在每笔交易中花费高达 400% 的股权。

如果交易已经开立并且开始亏损,以至于交易者的资金不足以支付他们的交易部分,则会发生追加保证金并强制平仓部分原始仓位。将被清算的确切单位数量是简单弥补损失所需金额的 4 倍。它通过以下算法计算:

1. 计算已花费金额,即交易者在开仓时花费的金额。

仓位大小 * 入场价

2. 计算证券市值(MVS)。

仓位大小 * 当前价格 

3. 计算未平仓利润。如果交易方向为空头且未平仓利润为正数,则结果仍应为负数,因此我们将计算的绝对值乘以 -1。 

ABS(MVS - 花费的钱) * -1

4. 计算净值,即交易者当前可用的资金。 

初始资本+净利润+开放利润  

5. 将保证金百分比转换为保证金比率。 

保证金百分比 / 100

6. 计算保证金,即支付他们未平仓位部分所需的确切金额。

MVS * 保证金比率

7. 计算可用资金,即交易者无法用其当前资产弥补的损失金额。 

净值 - 保证金

8. 计算交易者损失的总金额。 

可用资金/保证金比率 

9. 计算交易者需要卖出多少单位来弥补损失。该值被截断为与当前交易品种的最小合约规模相同的小数点。

TRUNCATE(步骤#8/ 当前价格)

10. 计算经纪商将出售多少单位来弥补损失。我们的模拟经纪商卖出了 4 倍于必要数量的单位,以确保在亏损持续时不会不断触发追加保证金通知。该值对于空头交易将是正值,因为经纪商购买单位是为了弥补损失而不是出售它们。

步骤#9 * 4

为了详细检查这个计算,让我们将内置的超级趋势策略添加到 NASDAQ:TSLA 图表的1D时间周期上。将订单大小设置为权益的 300%,将多头仓位的保证金设置为 25%。

我们的第一次进场发生在 2010 年 9 月 16 日开盘时。我们以 4.43 美元(进场价)买入 682438 单位(仓位大小)。 然后,在 2010 年 9 月 23 日,当价格为 3.9(当前价格)时,111052 个单位被强制平仓。

1. 花费的钱:682438 * 4.43 = 3023200.34

2. MVS:682438 * 3.9 = 2661508.2

3. 未平仓利润:-361692.14

4. 净值:1000000 + 0 - 361692.14 = 638307.86

5. 保证金比率:25 / 100 = 0.25

6. 保证金:2661508.2 * 0.25 = 665377.05

7. 可用资金:638307.86 - 665377.05 = -27069.19

8. 金钱损失:-27069.19 / 0.25 = -108276.76

9. 弥补损失的股份:TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763

10. 追加保证金大小:-27763 * 4 = - 111052

 

9 - 重新计算 选项指定应重新计算策略的频率。默认情况下,策略在每根K线收盘时重新计算,但使用以下选项也可以重新计算:

  • 订单成交之后(参数:calc_on_order_fills) - 允许策略在订单完成后立即执行额外的K线内订单计算。额外的计算发生在历史和实时K线上。
  • 在每个Tick上(参数:calc_on_every_tick)。默认情况下,策略仅在实时K线收盘时计算。此参数允许策略计算实时K线的每次更新,就像做研究一样。请注意,图表刷新时tick数据会丢失,因此使用此选项的策略将重新绘制。此参数不会影响策略在历史K线上的行为。另请注意,使用此功能的策略不会在历史K线上显示真实结果,因为它们不包含tick数据。

Translation results