如何使用杠杆模拟交易?

基础 

所有用 Pine Script™ v4 及更高版本编写的策略脚本本身都支持杠杆交易的模拟,即从经纪商那里借钱以较小的资金开立较大的仓位。

通过杠杆交易,只要交易者的账户维持维持贷款所需的保证金,交易者就可以下达比其账户余额允许的更大的订单。

Pine Script™ 策略通过脚本设置的“属性”标签页中的“多头仓位保证金”和“空头仓位保证金”输入来确定应用于模拟多头和空头交易的杠杆金额。这些输入定义了模拟开仓和维持仓位的策略所需的仓位价值在账户余额中的最小百分比。

例如,“多头仓位保证金”值为 20% 意味着模拟将要求策略的可用余额覆盖任何多头仓位的 20%,其余 80% 由模拟经纪商覆盖。由于任何多头仓位只需要其价值的五分之一由账户提供资金,因此该策略可以模拟最多可达其可用余额五倍的多头仓位。 换句话说,这一保证金水平 (1:5) 将该策略的杠杆率提高到 5:1。

如果具有此保证金水平的交易损失了足够的资金,使经纪商的资金面临风险,则模拟经纪商将触发追加保证金事件,并清算部分或全部未平仓仓位以释放资金。 请参阅以下部分了解更多信息。

注意:程序员可以通过“strategy()”函数的“margin_long”和“margin_short”参数在策略脚本中定义默认保证金值。

详细

当交易者向经纪商借款以增加购买力时,经纪商将要求他们的账户中有最低金额的资本用作抵押品,也称为保证金。换句话说,保证金是交易者必须用自己的资产来弥补仓位的一部分,以便经纪商能够弥补其余部分。

分配给交易的保证金是仓位的市场价值和保证金比率(即所需杠杆比率的倒数)的乘积。

假设 EURUSD 的当前汇率为 1.05,我们想要模拟购买一个标准手(100,000 单位),而无需从经纪商借入资金(即使用 1:1 杠杆)。在本例中,我们将“多头仓位保证金”设置为 100%,指示策略仅使用其可用资金下单。因此,该账户必须至少有 105,000 美元(1.05 * 100,000)可用以方便交易。

现在,假设我们希望用 20:1 的杠杆模拟相同的交易。在本例中,保证金比例为 1:20 (5%)。 将“多头仓位保证金”设置为 5% 指定账户余额必须至少为仓位价值的 5%,才能模拟从经纪商处接收其余 95%。 促进此项交易所需的最低账户余额(保证金)为 105,000(5,250 美元)的 5%。

与不依赖经纪商资金的示例不同,在现实环境中以 20:1 杠杆开仓会给账户持有人和经纪商带来损失风险。如果未平仓位的损失超过账户余额可以弥补的范围,经纪商将要求交易者提供更多资金或强制清算部分/全部未平仓位以弥补损失。策略测试器将强制清算场景表示为“追加保证金”事件。

我们的经纪商模拟器通过清算弥补模拟中损失所需金额的四倍来处理策略结果中的这些情况,从而防止后续图表K线上不断发生追加保证金事件。

注意:空头交易通常需要从经纪商借入股票、单位等,然后以另一个价格出售。仓位的价值代表购买同等数量的股票、单位等以回报它们的成本。因此,当价格上涨时,空头交易就会亏损。与多头仓位不同,空头仓位的潜在损失没有上限,因为工具的价格上涨幅度没有明确的限制。因此,即使保证金为100%,空头仓位也面临强制平仓的风险。

策略还可以模拟非常规的保证金要求。例如,可以使用 200% 的“多头仓位保证金”值,这意味着模拟账户必须至少具有仓位价值的两倍才能促进交易并维持仓位。此设置有效地将最大仓位规模限制为策略净值的 50%。

值得注意的是,策略脚本的保证金设置允许其验证头寸规模。 通过将保证金要求设置为 0% 来禁用保证金要求时,脚本可以模拟任何规模的头寸,无论模拟中的实际可用资本如何,这可能会产生误导性结果。因此,我们不建议将“多仓保证金”或“空仓保证金”值设置为0%。

资金用完

杠杆交易的主要警告是它会增加资金耗尽的风险。经纪商强行平仓的仓位大大降低了交易者从损失中恢复的能力,并可能加速其账户的耗尽。策略测试器将强制平仓表示为“追加保证金”事件。

控制追加保证金事件何时发生的公式为:

当前权益 <= 所需保证金

CurrentEquity 值是模拟策略在特定时刻拥有的资本金额,包括未平仓位的利润或损失。MarginRequired 是账户维持仓位所需的资本。一旦当前净值不足以为未平仓位提供资金,就会发生追加保证金事件。

CurrentEquity 的公式为 PriceChange * Direction * PointValue * AbsPositionSize + InitialCapital + NetProfit,其中:

  • PriceChange 是当前价格与未平仓位的开仓价格之间的差额。
  • 如果持仓多头,则方向为 1;如果持仓空头,则方向为 -1。
  • PointValue 是整数价格变动所代表的金额。 对于大多数商品,该值是 1,主要例外是期货,其中从 100 更改为 101 可能意味着值更改了 50 美元而不是 1 美元,在这种情况下,PointValue 将为 50。
  • AbsPositionSize 是当前位置的大小。 即使策略脚本代表图表上带有负数的空头交易,该值始终为正值。
  • 初始资本 + 净利润是该策略在开仓前的总股本金额。
  • MarginRequired 的公式为 LastPrice * PointValue * AbsPositionSize * (MarginPercent / 100),其中 LastPrice 是用于计算的图表价格,(Margin Percent / 100) 是我们乘以以获得账户持有人所需开仓部分的系数 位置。

为了演示这些计算,假设我们模拟一个策略,以 1,000 美元作为“初始资本”,“多头仓位保证金”值为 20%(5:1 杠杆),以 100 美元的价格购买 40 股 NASDAQ:GOOG。 

如果股票价格跌至 95 美元,则 CurrentEquity 为 PriceChange * Direction * PointValue * AbsPositionSize + InitialCapital + NetProfit = (95 - 100) * 1 * 1 * 40 + 1000 + 0 = 800,MarginRequired 为 LastPrice * PointValue * AbsPositionSize * (MarginPercent / 100) = 95 * 1 * 40 * 0.2 = 760。该策略仍然可以维持该价格的未平仓位,因此不会发生追加保证金事件。

然后,假设价格进一步下跌至 90 美元。新的 CurrentEquity 值为 (90 - 100) * 1 * 1 * 40 + 1000 + 0 = 600,MarginRequired 现在为 90 * 1 * 40 * 0.2 = 720。由于 CurrentEquity 不再足以覆盖 MarginRequired, 该策略创建追加保证金事件并强制平仓部分仓位。

保证金价格可视化

可视化追加保证金事件可能发生的价格的最简单方法是使用策略的 Pine Script™ 源代码中的“strategy.margin_liquidation_price”内置变量。将此行代码添加到任何 Pine Script™ v5 策略中都会将强平价格显示为图表上的蓝线:

plot(strategy.margin_liquidation_price)
Generic

如果需要手动计算价格,可以将上一节的等式转化为以下公式:

MarginLiquidationPriceRaw = ((InitialCapital + NetPofit) / (PointValue * AbsPositionSize) - Direction * EntryPrice) / (MarginPercent / 100 - Direction) 

然后将生成的 MarginLiquidationPriceRaw 值向上舍入(对于空头仓位)或向下舍入(对于多头仓位)至可除以商品最小tick值的最接近价格。

请注意整个表达式如何除以 (MarginPercent / 100 - Direction)。如果方向为多头且 MarginLong% 为 100,则除数将为 0,并且由于除以零而无法获得最终的 MarginLiquidationPriceRaw。这种行为与经纪商不能强行以 100% 保证金平仓多头仓位的理念是一致的。

使用上一节中描述的假设策略,此计算将得出:((1000 + 0) / (1 * 40) - 100) / (20 / 100 - 1) = 93.75,这是保证的第一个价格 追加保证金通知。由于 93.75 可以被 GOOG 的tick大小 0.01 整除,因此基于最小tick的舍入在这种情况下不起作用。

请注意,在模拟期间,不保证保证金追缴事件会在此计算价格处触发。

计算清算大小

追加保证金事件所清算仓位的精确金额取决于其发生时的价格。如上所述,经纪商模拟器清算的金额是弥补损失所需金额的四倍,从而提供缓冲以确保这些事件不会快速连续触发。 我们使用以下算法来计算强平金额:

1. 计算所花费的资金,即开仓所花费的资金。

仓位大小 * 入场价格

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

仓位大小  * 当前价格

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

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

4. 计算净值,即模拟中的可用资本。

初始资本 + 净利润 + 未平仓利润

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

保证金百分比 / 100

6. 计算保证金,即账户中支付交易者未平仓位部分所需的金额。

MVS * 保证金比率

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

股本 - 保证金

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

可用资金 / 保证金比率。

9. 计算该策略需要清算多少股票、单位等来弥补损失。 我们将该值截断为与当前商品的最小合约大小相同的小数点。

截断(步骤#8 / 当前价格)

10. 计算经纪商将清算多少股票、单位等以弥补损失。我们的模拟经纪商卖出所需金额的四倍,以确保在亏损持续的情况下不会不断触发追加保证金事件。该值对于空头交易来说是正数,因为经纪商购买单位来弥补损失而不是出售它们。

步骤#9 * 4

为了详细检查此计算,让我们将内置的超级趋势策略添加到“1D”时间范围内的 NASDAQ:TSLA 图表中,并将“订单大小”设置为权益的 300%,将“多头仓位保证金”设置为 25% :

第一次入场发生在2010年9月16日K线的开盘价。该策略以4.43美元(入场价)买入682,438股(仓位大小)。然后,在2010年9月23日,当价格跌至3.9(当前价格)时,模拟器通过追加保证金事件强制平仓111,052股。

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