保持敬畏之心
交易是一场持久战

Pine Script(251):基于现金与权益百分比的订单规模

#Pine Script入门教学

了解TradingView Pine Script中基于现金的默认订单规模

一个TradingView策略可以使用多种默认的订单规模计算方式。其中一种,就是基于一个固定的现金金额来确定下单量。

要启用这种方式,我们可以在Pine Script代码中将 default_qty_type 参数设为 strategy.cash,或者在策略的设置窗口中,从订单大小下拉菜单里选择基于现金的选项。

但是,Pine Script内部究竟是如何计算这个基于现金的订单规模的呢?让我们来一探究竟。

订单规模的计算公式

当策略的默认订单规模是一个现金金额时,TradingView会通过以下公式来计算最终的下单量:

公式中各变量的含义如下。

订单规模:这是最终计算出的下单数量,结果会向下取整到该品种允许的最小交易单位。对于股票、期货、CFD和外汇,最小单位通常是1。但对于比特币可能是0.000001,以太坊则可能是0.0001。如果计算出的规模小于最小订单单位(例如0.83股),TradingView会直接跳过这笔交易。这种情况通常发生在设定的现金金额过低,或交易品种价格过高时。

现金金额:你希望为这笔订单投入的现金总额。这个值对应代码中的 default_qty_value 参数,或策略设置面板中的订单大小输入框。

汇率:当需要进行货币换算时,所使用的货币对价格。这分为两种情况:如果你的策略本位币与交易品种的计价货币相同,则无需换算,此项为1;如果两者不同(例如,用欧元账户交易美元计价的原油),TradingView会自动使用相应的货币对(如EUR/USD)进行换算。

品种价格:产生交易信号的那一根K线的最后可用价格。在代码中,这通常对应 close 变量。请注意,这通常是信号K线的收盘价,除非你启用了在每个Tick上重新计算或订单成交后重新计算的选项,那样价格就可能是K线内的某个即时价格。另外,信号产生的价格,往往与订单最终成交的价格不同。例如,如果策略在K线收盘后产生一个市价单信号,该订单将在下一根K线的开盘价成交。

点值(point value):交易品种价格每波动一个完整点位所代表的货币价值。对股票而言,通常是1。对于E-mini S&P 500期货,则是50。

在看具体示例前,我们先来明确一下哪些因素不会影响这个计算过程。

什么因素不影响订单规模?

从上面的公式可以看出,有几个常见的因素并未被纳入默认订单规模的计算中。

首先是策略权益。当订单规模基于现金(strategy.cash)时,TradingView只关心你指定的那个现金数额,而不会考虑策略当前的权益大小。

这意味着,即便你的策略权益只有10,000,你仍然可以设定一个50,000的现金订单规模,TradingView会照常生成这个规模的交易指令。如果你不希望出现这种情况,需要自行在策略设置中配置多头保证金和空头保证金的比例。

其次是保证金。保证金的一个重要作用是决定交易能否被执行,但它不会改变默认订单规模的计算结果。

具体流程是:在TradingView根据公式计算出订单规模之后,它会检查策略的权益是否足以满足该笔订单的保证金要求。如果权益不足,这笔交易将被跳过。

所以,如果你设定了保证金比例,那么在产生订单时,以下规则必须成立:

如果此规则不成立,交易将被取消。重要的是,TradingView不会为了满足保证金要求而自动调小订单规模。例如,你设定了50,000的现金订单,但保证金只够支持25,000的规模,那么TradingView会直接跳过这笔交易,而不是以一个较小的规模执行。(如果你希望根据保证金动态调整规模,则需要编写自定义的订单规模计算逻辑。)

计算示例

现在,让我们通过几个具体的例子来看看基于现金的订单规模是如何运作的。

先看股票示例。假设我们的策略遇到以下情况:交易品种为特斯拉(NASDAQ:TSLA),买入信号产生时价格为$880.40;点值为1(股票通常为1);策略本位币与品种计价货币相同(均为USD);默认订单类型为 strategy.cash;默认订单数量为$45,000。根据公式,策略的默认订单规模为51股:

再看期货示例。当品种的点值大于1时,我们需要考虑其代表的标的资产价值。看这个例子:交易品种为微型WTI原油期货(NYMEX:MCL1!),空头信号产生时价格为70.86;点值为100(一份合约代表100桶原油);策略本位币与品种计价货币相同(均为USD);默认订单类型为 strategy.cash;默认订单数量为$30,000。在这种情况下,默认的订单规模是4份期货合约:

最后是一个涉及货币换算的期货示例。当策略本位币与品种计价货币不同时,就需要进行汇率换算。看这个例子:交易品种为微型E-mini S&P 500期货(CME:MES1!),买入信号产生时价格为4,640.50;点值为5(一份合约代表5倍的S&P 500指数价值);策略本位币为欧元(EUR),品种计价货币为美元(USD);EUR/USD的昨日收盘价为$1.12750;默认订单类型为 strategy.cash;默认订单数量为€50,000。在这种情况下,标准的订单规模是2份合约:

总结

基于现金的订单规模(strategy.cash)使用一个固定的现金金额来确定默认的下单量。影响订单规模的变量包括:现金金额、汇率(当货币不同时)、品种价格和点值。而策略权益和保证金设置则不会影响订单规模的计算结果,它们只在后续环节决定该笔交易是否被允许执行。

了解TradingView Pine Script中的权益百分比订单规模

TradingView策略提供了几种默认的订单数量计算方法。其中一种方法是,基于账户权益的某个百分比来确定订单大小。

要启用此方法,我们需要将Pine Script的 default_qty_type 参数设置为 strategy.percent_of_equity。或者,在策略的属性窗口中,从订单大小下拉菜单中选择基于权益的选项。

但是,TradingView究竟是如何通过权益百分比这种方法来计算订单大小的呢?让我们来一探究竟。

订单大小的计算公式

当一个策略的默认订单大小是基于权益的百分比时,TradingView会按照以下公式来计算该订单大小:

公式中各变量的含义如下。

order size(订单大小):这是最终计算出的订单数量,结果会被向下取整到该品种的最小可交易单位。对于股票、期货、CFD和外汇,最小单位是1。对于比特币(BTCUSD)是0.000001,以太坊(ETHUSD)则是0.0001。当计算出的大小低于最小交易单位时,TradingView会跳过这笔交易。例如,一个0.87手期货合约的订单将不会被建立。当策略的权益过低和/或交易品种价格过高时,就可能出现这种订单大小过小的情况。

equity %(权益百分比):这是你希望每个订单投入的当前策略权益的百分比。这个百分比可以来自代码中的 default_qty_value 参数,也可以来自策略属性窗口中手动设置的订单大小选项。

strategy equity(策略权益):这是策略的当前权益,它是初始资金、已平仓交易的累计净利润以及当前持仓的浮动盈亏三者的总和。由于TradingView将浮动盈亏也包含在权益计算中,这意味着我们计算出的订单大小,有一部分是基于一个尚未兑现的持仓结果。如果该持仓最终以比预期差得多的结果平仓,那么这笔订单的实际投入占权益的百分比就会比我们设定的要高。反之,如果该持仓最终的盈利远超预期,那么计算出的订单大小就显得过于保守了。

exchange rate(汇率):如果需要进行货币转换,这是TradingView用来执行转换的货币对价格。这里有两种可能性:如果策略的货币与交易品种的货币相同,则不进行货币转换,此项的值为1;如果两者不同,TradingView会使用相应的货币对来进行换算。

instrument price(品种价格):这是在生成订单的那根K线上,最后一个可用的价格。在代码中,这通常对应于 close 变量。这个价格是订单生成时的K线收盘价,除非你启用了订单成交后重新计算或每个Tick都重新计算的选项。在这些情况下,品种价格也可能是K线内的某个价格。请注意,订单生成的K线,通常与订单成交的K线不同。例如,当策略在一根已收盘的K线上生成一个市价单时,该订单通常会在下一根K线的开盘价成交。

point value(点值):这是交易品种价格每变动一个完整点所对应的货币金额。对于股票,这个值是1。对于E-mini纳斯达克100指数期货,这个值是20。

请注意,当我们基于策略权益的百分比来确定订单大小时,我们投入的是一定金额的权益。这与风险控制中常提的、为每个订单设定一定风险额度的概念是不同的。

保证金不影响订单大小的计算

在上述公式中,你会发现缺少了保证金这一项:基于权益百分比的默认订单大小,其计算过程并不受策略保证金设置的影响。因此,long marginshort margin 这两个参数不会改变最终计算出的订单大小。

然而,保证金确实会通过以下方式影响策略:当计算出的订单大小所需的保证金超过了当前可用的保证金时,TradingView会跳过这笔交易。

如果策略使用了保证金,那么基于权益百分比计算出的订单大小必须满足以下规则:

如果这个规则不成立,TradingView将不会建立这笔交易。

这也意味着,TradingView并不会为了满足保证金要求而自动调整它计算出的订单大小。它只会简单地、完全地跳过这笔交易。即使我们只差了很少一部分资金:比如我们设定用20%的权益来下单,但资金只够覆盖19.85%的保证金,TradingView也会放弃这笔交易。(如果我们不希望这样,我们就需要根据可用的保证金来自己编写订单大小的计算逻辑。)

示例

让我们通过一些例子,来看看TradingView是如何基于权益百分比来计算默认订单大小的。

我们先从股票开始。假设我们的策略遇到以下情境:苹果公司(NASDAQ:AAPL)在产生买入信号时的报价为$175.64;AAPL的点值为1;策略的货币与品种的货币相同(均为美元USD);默认订单类型为权益百分比(strategy.percent_of_equity);默认订单数量(default_qty_value)为45%;策略的当前权益为$85,320。在这些参数下,默认的订单大小为218股:

再看期货示例。当交易品种的点值大于1时,TradingView在计算订单大小时,还会考虑其标的资产的价值。假设我们交易以下场景:Micro E-mini Nasdaq-100指数期货(CME:MNQ1!)在产生卖出信号时的交易价格为16,078.25;MNQ的点值为2,即一张期货合约代表两倍的Nasdaq-100指数价值;策略的货币与品种的货币相同(均为美元USD);默认订单类型为权益百分比(strategy.percent_of_equity);默认订单数量为32.5%;策略的当前权益为$142,539。在这种情况下,策略的默认订单大小为1张合约:

最后是涉及货币转换的期货示例。当策略使用的货币与交易品种的计价货币不同时,货币转换也会参与计算。假设我们遇到以下情境:Micro-EURO STOXX 50指数期货(EUREX:FSXE1!)在产生买入信号时的交易价格为4,167;FSXE的点值为1;策略的货币为美元(USD),而品种的货币为欧元(EUR);EUR/USD货币对昨天的收盘价为$1.13262;默认订单类型为权益百分比(strategy.percent_of_equity);默认订单数量(default_qty_value)为70%;策略的当前权益为$89,612。在这种情况下,默认的订单大小为13张合约:

总结

基于权益百分比的默认订单大小(strategy.percent_of_equity),会使用策略权益的一部分来确定订单规模,并在必要时将其转换为交易品种的计价货币。影响订单大小的变量包括:权益百分比、策略权益、汇率(当策略与品种货币不同时)、品种价格和点值。对订单大小的计算没有影响的是策略的保证金设置。

赞(0)
未经允许不得转载:图道交易 » Pine Script(251):基于现金与权益百分比的订单规模
分享到

评论 抢沙发

登录

找回密码

注册