量化投资_EasyLanguage/PowerLanguage教学课程__【第一篇基础】__【第二十五章投资组合】

第二十五章:投资组合

第一节:投资组合策略绩效

  投资组合回测即 MultiCharts Portfolio Backtester,可将多个信号 组合在一个策略中或将多个商品的策略组合,而无需打开图表窗口即 可回测绩效。

   投资组合的策略绩效可从绩效报告中看到,当然如果需要根据策 略的盈亏状况进一步调整策略逻辑,可使用本章提供的绩效关键字。 包括毛利、毛损、净利、最大策略回测、总亏损次数、总盈利次数、 获利百分比、总交易次数等。

1.1 Portfolio_GrossLoss

# 语法:

语法 Portfolio_GrossLoss
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

若投资组合中共有四笔亏损交易,值分别为 1052015,
则 Portfolio_GrossLoss 会返回-50。
若投资组合并无亏损交易,则 Portfolio_GrossLoss 会返回 0

# 说明

  返回目前投资组合亏损总金额(毛损)

1.2 Portfolio_GrossProfit

# 语法:

语法 Portfolio_InvestedCapital
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

如果在投资组合中当前策略计算所投资的现金资产数为
100000,则 Portfolio_InvestedCapital 返回 100000。
(例如:如果有三个持仓头寸:50000 多,20000 多,30000空。)

# 说明

  返回在投资组合中当前策略计算所投资的现金资产数

1.3 Portfolio_MaxIDDrawdown

# 语法:

语法 Portfolio_MaxIDDrawdown
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

在整个交易期间,投资组合权益资金最大亏损为 500,则
Portfolio_MaxIDDrawdown 会返回-500

# 说明

  返回投资组合在交易期间内所出现的最大权益资金亏损金额

1.4 Portfolio_NetProfit

# 语法:

语法 Portfolio_NetProfit
注意 此功能仅能在信号公式,并且搭配 Portfolio Backtester 使用。

# 示例:

若投资组合中有获利交易 2510,亏损交易 510,则
Portfolio_NetProfit 将返回 20。
若投资组合中有获利交易 105,亏损交易 2010,则
Portfolio_NetProfit 将返回-15。
若投资组合中没有已经完成的交易,则 Portfolio_NetProfit 将
返回 0

# 说明

  返回目前投资组合完成交易的获利总额(净利)

1.5 Portfolio_NumLossTrades

# 语法:

语法 Portfolio_NumLossTrades
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

在投资组合有 5 笔亏损交易,则 Portfolio_NumLossTrades 会
返回 5。
若投资组合没有已经完成的交易,则 Portfolio_NumLossTrades
会返回 0 

# 说明

  返回目前投资组合亏损交易总笔数

1.6 Portfolio_NumWinTrades

# 语法:

语法 Portfolio_NumWinTrades
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

在投资组合有 5 笔获利交易,则 Portfolio_NumWinTrades 会
返回 5。
若投资组合没有已经完成的交易,则 Portfolio_NumWinTrades
会返回 0

# 说明

  返回目前投资组合获利交易总笔数

  

1.7 Portfolio_PercentProfit

# 语法:

语法 Portfolio_PercentProfit
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

在投资组合总交易笔数有 10 笔,其中获利 7 笔交易,则
Portfolio_PercentProfit 会返回 70(即 70%)。

# 说明

  返回目前投资组合获利交易次数占总交易次数的比例

1.8 Portfolio_StrategyDrawdown

# 语法:

语法 Portfolio_StrategyDrawdown
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

若目前投资组合从最近的权益资金高点亏损的金额为 100,
则 Portfolio_StrategyDrawdown 会返回-100

# 说明

  返回投资组合从最近权益资金高点的亏损金额

1.9 Portfolio_TotalTrade

# 语法:

语法 Portfolio_TotalTrade
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。 

# 示例:

若投资组合总共交易 5 笔,则 Portfolio_TotalTrade 会返回 5。
若投资组合总共交易 0 笔,则 Portfolio_TotalTrade 会返回 0

# 说明

  返回目前投资组合完成交易总笔数

第二节:投资组合策略部位

  投资组合策略指定部位的最大潜在亏损、当前的持仓笔 数、当前未平仓的净利以及潜在亏损的设定。

2.1 Portfolio_CalcMaxPotentialLossForEntry

# 语法:

语法
Portfolio_CalcMaxPotentialLossForEntry(持仓方向,<手数>,<价
格>);
<>括号内的参数为选用参数。
参数
持仓方向——数值表达式,代表持仓多空状态(如:1 代表多
头,-1 代表为空头)。
手数——选用参数,数值表达式,代表持仓的手数。若未指
定手数,则会以策略属性》属性页面内设定的数量为预设值。
价格——选用参数,数值表达式,代表持仓的成交价格。若
未指定价格,预设会以当根 K 棒的收盘价为成交价。如果有
一个空头进场,此参数可以向下调整;如果有一个多头进场,
此参数可以向上调整。
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

Portfolio_CalcMaxPotentialLossForEntry(0,25,High)
将会返回 0,若持仓方向=0。
Portfolio_CalcMaxPotentialLossForEntry(1,100,Close)
将会返回最大潜在亏损(不含保证金、手续费或滑价),如果
使用者在收盘价买进 100 手多头。
Portfolio_CalcMaxPotentialLossForEntry(-1,5,Open)
将会返回最大潜在亏损(不含保证金、手续费或滑价),如果
使用者在开盘价卖出 5 手空头。
Portfolio_CalcMaxPotentialLossForEntry(1)
将会返回最大潜在亏损(不含保证金、手续费或滑价),如果 使用者以策略属性》属性页面设定的手数并在收盘价买入多 头。

# 说明

  计算并返回使用者在一定数量的手数和某个价位的进场部位 的最大潜在亏损(不含保证金、手续费或滑价)。

2.2 Portfolio_CurrentEntries

# 语法:

语法 Portfolio_CurrentEntries
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

将目前投资组合未平仓交易的笔数存入变量 Value1:
Value1= Portfolio_CurrentEntries;

# 说明

  返回投资组合目前未平仓的交易笔数。

2.3 Portfolio_MaxOpenPositionPotentialLoss

# 语法:

语法 SetStopPosition;
SetStopLoss(Portfolio_MaxOpenPositionPotentialLoss);
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

Value1=Portfolio_MaxOpenPositionPotentiaLoss;
If Value1<>0 then begin
SetStopPosition;
SetStopLoss(Value1);
End;
当投资组合没有未平仓部位时,则
Portfolio_MaxOpenPositionPotentiaLoss 返回值是 0
当投资组合从建立部位开始,曾出现过的最大亏损金额为
$100,则 Portfolio_MaxOpenPositionPotentiaLoss 返回值是 100

# 说明

  返回投资组合中,计算并返回目前商品未平仓部位最大可能 亏损金额(不含保证金、手续费或滑价)。

2.4 Portfolio_OpenPositionProfit

# 语法:

语法 Portfolio_OpenPositionProfit
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

若投资组合目前没有未平仓的部位,则
Portfolio_OpenPositionProfit 的返回值是 0。
若投资组合所有未平仓部位从进场到现在已获利$100,则
Portfolio_OpenPositionProfit 的返回值是 100。
若投资组合所有未部位从进场到现在已经亏损$50,则
Portfolio_OpenPositionProfit 返回值是-50

# 说明

  返回目前投资组合所有未平仓部位的净利总金额(即未平仓 盈利/亏损)。

2.5 Portfolio_SetMaxPotentialLossPerContract

# 语法:

语法 Portfolio_SetMaxPotentialLossPerContract(NewValue)
参数
NewValue——数值表达式,代表意义如下:
*介于[-100,-0.001]之间的数值;设定投资组合每手部位最大
可能损失比率(最大潜在损失比率:%)。
*介于[0.001,1e+29]之间的数值;设定投资组合每手部位最
大可能损失金额(最大潜在损失金额:$)。
*等于 0;使用在投资组合设置》潜在损失设置中的预设值。

返回 True——代表新值设定成功 False——代表新值可能超出上述的数值范围,设定失败,并 不会变更原有的最大潜在损失设定。
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

当投资组合部位中存在商品”MSFT”时,则将最大潜在损失比
率设为 10%:
If “MSFT” = SymbolName then
Portfolio_SetMaxPotentialLossPerContract(-10);
设定最大潜在损失比率为 5%:
Portfolio_SetMaxPotentialLossPerContract(-5);
设定最大的潜在损失金额是$200:
Portfolio_SetMaxPotentialLossPerContract(200);

# 说明

  重新设定测试商品的潜在损失。如果选择的是最大潜在损失 金额,则设定的是绝对数值;如果选择的是最大潜在损失比 率,则设定的是百分比值。 设定后的值在之后的策略计算中持续有效,直到再次调用 Portfolio_SetMaxPotentialLossPerContract 来重新设定新值。

第三节:投资组合属性

  在投资组合中,保证金、潜在亏损等属性值,可由本章关键字取 得。 注:QM——QuoteManager,即报价管理器。

3.1 Portfolio_GetMarginPerContract

# 语法:

语法 Portfolio_GetMarginPerContract
返回
负值,代表使用者选择保证金占%N 的合约价值,返回值是
设定值 N 乘以-1。
正值,代表使用者选择固定保证金值,返回值和 QM 中设定
的保证金相同(可用关键字 Margin 取到)。
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

若使用者选用固定保证金值,但 QM 中的商品属性并未设定
保证金,则 Portfolio_GetMarginPerContract 返回值是 0。
若使用者选用固定保证金值,并与 QM 中的编辑商品》期货
设定保证金为$25,则 Portfolio_GetMarginPerContract 返回值
是 25。
若使用者选用保证金占%N 的合约价值,并设定保证金为 10%
的合约价值,则 Portfolio_GetMarginPerContract 返回值是-10

# 说明

  取得使用者在 Portfolio Backtester 的投资组合设置页面的保 证金设置。

3.2 Portfolio_GetMaxPotentialLossPerContract

# 语法:

语法 Portfolio_GetMaxPotentialLossPerContract
返回
*介于[-100,-0.001]之间(设定值乘以-1),代表投资组合设置
中设定为最大潜在损失比率(%)。
*介于[0.001,1e+29]之间,代表投资组合设置中设定为最大潜
在损失金额($)。

注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

若使用者设定使用最大潜在损失比率(%)为 5,
则 Portfolio_GetMaxPotentialLossPerContract 的返回值是-5。
若使用者设定使用最大潜在损失金额($)为 0.001,
则 Portfolio_GetMaxPotentialLossPerContract 返回值是 0.001

# 说明

  取得使用者在 Portfolio Backtester 的投资组合设置页面设定 的潜在损失。

3.3 Portfolio_MaxRiskEquityPerPosPercent

# 语法:

语法 Portfolio_MaxRiskEquityPerPosPercent
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

Portfolio_MaxRiskEquityPerPosPercent 将会返回使用者设定的
单个部位最大曝险率:%。

# 说明

  取得使用者在 Portfolio Backtester 的投资组合设置页面设定 的单个部位最大曝险率:%。

3.4 Portfolio_TotalMaxRiskEquityPercent

# 语法:

语法 Portfolio_TotalMaxRiskEquityPercent
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

Portfolio_TotalMaxRiskEquityPercent将会返回使用者设定的总
部位曝险率:%。

# 说明

  取得使用者在 Portfolio Backtester 的投资组合设置页面设定 的总部位曝险率:%。

3.5 PortfolioEntriesPriority

# 语法:

语法 PortfolioEntriesPriority=Priority
参数 Priority——数值表达式,指定进场委托单执行的优先权;数值越大,优先权越高。
注意 此功能仅能在信号中,并且搭配 Portfolio Backtester 使用。

# 示例:

将低价股设定较高的优先级:
PortfolioEntriesPriority=(-Close);

# 说明

  对投资组合内的进场委托单执行的优先权。 若投资组合资金无法满足所有委托,则有较高优先权的委托 会先被执行,优先权最低的委托会被舍弃。 若没有特别设定优先权,则委托执行的优先顺序是依 Portfolio Backtester 内商品表的先后顺序。

=================================================

之前的文章感谢大家的转载,希望转载时请注明出处,本人转自其它网站的图表一并感谢,谢谢~!

https://www.cnblogs.com/noah0532/

原文地址:https://www.cnblogs.com/noah0532/p/13703192.html