投资组合优化例子

以下序列突出显示特征投资组合Financial Toolbox™中的对象。具体地,实施例使用投资组合旨在显示如何设置的平均方差组合优化问题,专注于双基本定理,交易成本的影响和营业额限制,如何获取最大化夏普比的投资组合,以及如何设置两个流行的对冲 -基金策略 - 美元中性和130-30个投资组合。

设置数据

每一个例子都适用于每月30“蓝筹股”股票的宇宙的每月总回报。虽然来自真实数据,但这些数据是为了说明目的,并不意味着代表特定资产或市场绩效。数据包含在文件中BlueChipStockMoments.mat使用变量中的资产标识符列表assetlist.,资产的平均值和协方差在变量中返回AssetMeanAssetcovar.,以及变量中现金和市场收益的均值和方差羊飞料Cashvar.MarketMean, 和Marketvar..由于大多数分析需要使用资产回报的标准偏差作为风险的代理,现金和市场方差被转换为标准偏差。

负载bluechipstockmomentsMRET = Marketmean;MRSK = SQRT(MarketVar);CRET = CASMMEAN;CRSK = SQRT(Cashvar);

创建投资组合对象

首先创建一个“标准”投资组合对象投资组合纳入资产列表,无风险率以及资产的时刻返回对象。

p =组合('assetlist'AssetList,'风险愉快',羊食物品;p = setAssetMoments(P,Assetmean,Assetcovar);

提供比较的基础,建立一个平衡的投资组合,并使其成为初始投资组合投资组合对象。请记住,稍后要构建的对冲投资组合将需要一个不同的初始投资组合。一旦初始投资组合创建,estimatePortMoments函数估计等权重投资组合收益的均值和标准差。

p = setinitport(p,1 / p.numassets);[ERER,ERET] = estIbalPortmoments(P,P.Initport);

一个专门的“助手”功能portfoloexamples_plot.(见实用功能Section)使得绘制在这里开发的所有结果成为可能。第一个图显示了个人资产的分布根据他们的均值和标准偏差的回报。此外,等权重投资组合、市场投资组合和现金投资组合在同一个图上。请注意,portfoloexamples_plot.函数将月度总回报转换为年化总回报。

clf;portfolioexamples_plot ('资产风险和退货'......“散射”,MRSK,MRET,{'市场'}},......“散射”,crsk,cret,{'现金'}},......“散射”,ersk,eret,{'平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

设置投资组合优化问题

设置“标准”或默认的平均值 - 方差产品组合优化问题setDefaultConstraints.需要完全投入的长期投资组合的功能(必须总结的非负权重1)。鉴于此初始问题,估计具有功能的高效边界estismsfrontier.estimatePortMoments, 在哪里estismsfrontier.估计有效的投资组合和estimatePortMoments估计投资组合的风险和返回。下图覆盖了先前绘图上的有效前沿。

p = setDefaultConstraints(p);PWGT = estmateFrontier(P,20);[PrSK,Pret] = estIbalPortmoments(P,PWGT);%绘制有效边界clf;portfolioexamples_plot ('高效的边境'......'线',prsk,pret},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

说明了高效前沿的切线线

托宾的共同基金定理(托宾1958)表示,可以将投资组合分配问题视为在无风险资产和风险组合之间分配的决定。在平均方差框架中,现金可以作为无风险资产的代理,高效前沿的有效投资组合用作风险投资组合,使现金和此产品组合之间的任何分配都主导了高效边境的所有其他投资组合。这个投资组合被称为a交流组合因为它位于高效前沿的点,所以在无风险资产起源的切线线触及高效的前沿。

鉴于这一点投资组合对象已经具有无风险利率,通过创建其副本获得切线投资组合具有预算约束的对象,可允许以现金分配0%和100%。自从此以来投资组合对象是一个值对象,它可以通过分配一个输出来轻松创建副本投资组合类的新实例的“set”函数投资组合对象。图中显示了有效边界与托宾分配的关系形成了到有效边界的切线。

q = setBudget(p, 0, 1);qwgt = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);%绘制切线(0到1现金)的有效边界clf;portfolioexamples_plot (“切线的有效边界”......'线',prsk,pret},......'线',qrsk,qret,[],[],1},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

请注意,现金实际上具有较小的风险,以便切线线不会通过现金资产。

获得风险范围和回报

为了获得以风险或收益为目标值的有效投资组合,需要获得所有投资组合在有效边界上的风险和收益范围。这是通过estismsfrontierlimits函数。

[RSK,RET] = estIbalportmoments(p,estmatefrontierlimits(p));显示(RSK);
RSK =2×10.0348 0.0903
显示(RET);
RET =2×10.0094 - 0.0179

每月投资组合返回的范围在0.9%和1.8%之间,投资组合风险的范围介于3.5%和9.0%之间。在年度化条件下,投资组合返回的范围为11.2%至21.5%,投资组合风险范围为12.1%至31.3%。

找到具有目标退货和有针对性的风险的投资组合

鉴于风险范围和返回范围,可以在有效的前沿找到特定的投资组合,该功能是使用该功能的返回和风险的目标值estismsfrontierbyreturn.estismsFrontierByRisk.

TargetReturn = 0.20;此处输入目标年化回报率和风险targetrik = 0.15;%获得有针对性的回报和风险的投资组合Awgt = estismsFrontierByReturn(P,TargetReturn / 12);[Arsk,Aret] = estIbalportmoments(P,AWGT);bwgt = estismsfrontierbyRisk(p,targetrik / sqrt(12));[BRSK,BRET] = estIbalPortmoments(P,BWGT);%绘制有针对性投资组合的高效边界clf;portfolioexamples_plot (“目标投资组合的有效边界”......'线',prsk,pret},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, arsk, aret, {sprintf('%g %% return'100 * TargetReturn)}},......“散射”,Brsk,Bret,{Sprintf('%g %%风险'100 * TargetRisk)}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

看看这些有针对性的投资组合看起来像什么,使用数据集对象设置包含投资组合权重和资产名称(从投资组合目的)。

aBlotter = dataset({100*awgt(awgt > 0),'重量'},“obsnames”,p.assetlist(awgt> 0));DisplayPortfolio(Sprintf(“目标回报率%g%%的投资组合”,100 * targetroTurn),ablotter,false);
投资组合20%目标返回重量CAT 1.1445 INTC 0.17452 MO 9.6521 MSFT 0.85862 UTX 56.918 WMT 31.253
BBLOTTER = DataSet({100 * BWGT(BWGT> 0),'重量'},“obsnames”, p.AssetList(bwgt > 0));DisplayPortfolio(Sprintf('投资组合%%%目标风险', 100*TargetRisk), bBlotter, false);
15%目标风险的投资组合重量BA 3.1996E-22 C 1.8304E-22 DIS 1.6394E-20 GE 4.2564E-21 HD 3.9772E-21 INTC 2.2585 JNJ 9.2162 JPM 2.2817E-21 KO 1.6585E-21 MMM 16.603 MO 15.388MSFT 4.4467 PG 4.086 UTX 10.281 WMT 25.031 XOM 12.69

交易成本

投资组合对象使将交易成本作为优化问题的一部分来计算成为可能。尽管可以为每个资产设置单独的成本,但使用投资组合Object的功能是在所有资产中建立统一的交易成本,并将有效前沿与总和净投资组合回报进行比较。

BuyCost = 0.0020;SellCost = 0.0020;q = setcost (p BuyCost SellCost);qwgt = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);%绘制有毛额和净回报的高效边界clf;portfolioexamples_plot ('有效的边界,没有交易成本'......'线'如:{“毛”},“b”},......'线',qrsk,qret,{“净”}},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

营业额限制

除交易成本外投资组合对象可以处理周转约束。下面的例子演示了一个周转约束在一个可能限制交易的初始投资组合附近产生一个有效边界。此外,周转率限制的引入往往意味着多重交易可能需要从最初的投资组合转向无约束的有效边界。因此,周转约束引入了一种时间多样化的形式,可以将交易分散到多个时间段。在本例中,请注意购买和销售的总和estismsfrontier.功能确认已满足周转约束。

BuyCost = 0.0020;SellCost = 0.0020;营业额= 0.2;q = setCosts(p, BuyCost,SellCost);q = setTurnover (q,营业额);[qwgt, qbuy qsell] = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);%绘图高效边疆,周转约束clf;portfolioexamples_plot (“具有营业额约束的有效边界”......'线'如:{'不受约束'},“b”},......'线',qrsk,qret,{sprintf('%g %%营业额',100 * fornover)}},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

displaySumOfTransactions(营业额、qbuy qsell)
沿着有效前沿(最大营业额的20%)的投资组合购买的金额20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000沿着组合销售总额有效前沿(最大营业额的20%)20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000 20.0000

跟踪误差的约束

投资组合对象可以处理跟踪误差约束,其中跟踪误差是一个投资组合相对于跟踪投资组合的相对风险。在本例中,9个资产的子集合形成了一个同等权重的跟踪投资组合。我们的目标是找到跟踪误差在5%以内的有效投资组合。

II = [15,16,20,21,23,25,27,29,30];在跟踪组合中包含资产的%索引TrackingError = 0.05 /√(12);TrackingPort = 0 (30, 1);TrackingPort (ii) = 1;TrackingPort =(1 /笔(TrackingPort)) * TrackingPort;q = setTrackingError (p TrackingError TrackingPort);qwgt = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);[TRSK,TRET] = estIbalPortmoments(Q,TrackingPort);%绘图高效前沿,跟踪误差约束clf;portfolioexamples_plot ('高效的前沿,5%跟踪误差约束'......'线'如:{'不受约束'},“b”},......'线',qrsk,qret,{'追踪'}},......“散射”,[MRSK,CRSK],[MRET,CRET],{'市场''现金'}},......“散射”,trsk,tret,{'追踪'},“r”});

组合营业额和跟踪误差约束

这个例子说明了在组合约束下可能发生的交互。在这种情况下,必须同时满足相对于初始等权投资组合的周转约束和相对于跟踪投资组合的跟踪误差约束。翻转约束最大为30%翻转,跟踪误差约束最大为5%跟踪误差。注意,从初始投资组合到跟踪投资组合的周转率为70%,因此周转率的上限为30%意味着有效边界将位于初始投资组合和跟踪投资组合之间的某个位置。

营业额= 0.3;initport =(1 / q.numassets)*那些(q.numassets,1);II = [15,16,20,21,23,25,27,29,30];在跟踪组合中包含资产的%索引TrackingError = 0.05 /√(12);TrackingPort = 0 (30, 1);TrackingPort (ii) = 1;TrackingPort =(1 /笔(TrackingPort)) * TrackingPort;q = Setturnover(Q,营业额,initport);qwgt = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);[TRSK,TRET] = estIbalPortmoments(Q,TrackingPort);[ERER,ERET] = estIbalPortmoments(Q,initport);%绘制高效边疆,具有组合的转换和跟踪误差约束clf;portfolioexamples_plot (“具有周转率和跟踪误差约束的有效前沿”......'线'如:{'不受约束'},“b”},......'线',qrsk,qret,{“营业额和跟踪”}},......“散射”,[MRSK,CRSK],[MRET,CRET],{'市场''现金'}},......“散射”,trsk,tret,{'追踪'},“r”},......“散射”,ersk,eret,{'最初的'},'B'});

最大化锐利比率

Sharpe比率(Sharpe 1966)是在投资组合分析中发挥重要作用的衡量标准的衡量标准。具体而言,最大化夏普比的投资组合也是来自互联网定理的有效边界的交流组合。最大锐利比例组合位于具有功能的高效前沿估计估计数据集对象用于列出此产品组合中的资产。

p = setInitPort(p, 0);swgt = estimateMaxSharpeRatio (p);[srsk,爆炸回流]= estimatePortMoments (p, swgt);%绘制高效边疆,具有达到最大锐利比率的产品组合clf;portfolioexamples_plot (“具有最高夏普比率的高效边界”......'线',prsk,pret},......“散射”,srsk,sret,{“夏普”}},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

%设置包含最大化夏普比率的投资组合的数据集对象Blotter = DataSet({100 * SWGT(SWGT> 0),'重量'},“obsnames”,assetlist(swgt> 0));DisplayPortfolio('具有最大夏普比率的投资组合',墨水,假);
具有最大夏普比率的产品组合AA 1.9766E-15 AIG 1.9146E-15 AXP 1.0611E-15 BA 5.6229E-16 C 2.01429E-15 CAT 2.9838E-15 DD 3.1459E-16 DIS 5.9796E-16 GE 5.6384E-15 GM 7.3545E-16 HD 2.0404E-11 HON 3.322E-16 HPQ 2.0397E-15 IBM 8.9075E-15 INTC 2.6638 JNJ 9.0044 JPM 5.4252E-16 KO 2.4688E-16 MCD 8.782E-16 MCM 15.502 MO 13.996 MRK3.235E-16 MSFT 4.4777 PFE 7.3698E-16 PG 7.4588 SBC 3.8468E-16 UTX 6.0056 VZ 3.9213E-16 WMT 22.051 XOM 18.841

确认最大锐利比率最大

以下绘图表明,该产品组合(位于图上的点)确实最大化了高效前沿的所有投资组合中的锐利比率。

psratio = (pret - p.RiskFreeRate) ./ prsk;ssratio = (sret - p.RiskFreeRate) / srsk;clf;次要情节(2,1,1);情节(prsk,现成的,'行宽',2);抓住散射(srsk爆炸回流,'G'“填充”);标题(“\ bfEfficient前沿”);包含('投资组合风险');ylabel('投资组合返回');抓住离开子图(2,1,2);情节(Prsk,Psratio,'行宽',2);抓住散射(srsk ssratio,'G'“填充”);标题('\ bfsharpe比率');包含('投资组合风险');ylabel('sharpe比率');抓住离开

说明夏普是切线投资组合

下一个曲线表明,最大化锐利比率的投资组合也是交流组合(在这种情况下,预算约束被打开,以允许现金的0%和100%之间。

q = setBudget(p, 0, 1);qwgt = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);%图显示夏普比率组合是切线组合clf;portfolioexamples_plot (“具有最高夏普比率的高效边界”......'线',prsk,pret},......'线',qrsk,qret,[],[],1},......“散射”,srsk,sret,{“夏普”}},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

美元中性对冲基金结构

为了说明如何在对冲基金管理中使用投资组合优化工具,检查了两种具有美元中性和130-30个投资组合的流行策略。美元中性战略在长期和短的位置同样投入,以便净投资组合位置是0.这样的投资组合被称为“美元中性”。

要设置美元中立的组合,请从“标准”组合问题开始,并在变量中的长号和短位置设置最大曝光曝光.各个资产重量的界限是加号或减去曝光.由于净职位必须是美元中立的,因此预算约束是0并且初始投资组合必须是0.最后,单向转换限制提供了必要的长短限制,以防止长短姿势的“双计数”。墨滴显示了最大化锐利比率的美元中性组合的组合重量。漫长而短的职位是从销售和销售交易相对于初始投资组合获得的。

曝光= 1;q = setBounds(p, - 曝光,曝光);q = setBudget(q,0,0);q = setOnewayturnover(q,曝光,曝光,0);[qwgt,qlong,qshort] = estmatefrontier(q,20);[qrsk, qret] = estimatePortMoments (q, qwgt);[qswgt,qslong,qsshort] = viettatemaxsharperatio(q);[qsrsk,qsret] = estibalportmoments(q,qswgt);具有交流组合的美元中性基金结构的%绘图高效边疆clf;portfolioexamples_plot ('高效的边疆,带有美元中立的产品组合'......'线'如:{“标准”},'B:'},......'线',qrsk,qret,{'美元中性'},'B'},......“散射”, qsrsk, qsret“夏普”}},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

%设置包含最大化夏普比率的投资组合的数据集对象Blotter = DataSet({100 * QSWGT(ABS(QSWGT)> 1.0E-4),'重量'},......{100 * qslong(abs(qswgt)> 1.0e-4),“长”},......{100 * QSSHORT(ABS(QSWGT)> 1.0E-4),“短”},......“obsnames”, setlist (abs(qswgt) > 1.0e-4));DisplayPortfolio('美元 - 中性投资组合,最大夏普比率'吸墨纸,真的,'美元中性');
Dollar-Neutral组合以最大的夏普比率体重长短AA AIG 3.0394 - 3.0394 0.5088 - 0.5088 0 0 AXP 0.92797 - 0.92797 0英航-3.4952 0 3.4952 C 14.003 - 14.003 0猫3.7261 - 3.7261 0 DD -18.063 0 18.063说-4.8236 0 4.8236通用电气-3.6178 0 3.6178通用-3.7211 0 3.7211高清1.101 - 1.101 0鸿-1.4349 0 1.4349 hp IBM -8.0585 0 8.0585 0.09909 - 0.09909 0intel 1.7693 - 1.7693 0 JNJ 1.3696 - 1.3696 0摩根大通-2.5271 0 2.5271 KO -14.205 0 14.205价格上调3.91 - 3.91 0嗯7.5995 - 7.5995 0莫4.0856 - 4.0856 0 merck 3.747 - 3.747 0 microsoft 4.0769 - 4.0769 0 PFE -9.096 0 9.096 PG 1.6493 - 1.6493 0 SBC -5.2547 0 5.2547属下5.7454 - 5.7454 0 VZ -2.438 0 2.438京东商城0.84844 - 0.84844 0 XOM 18.529 - 18.529 0确认Dollar-Neutral组合(净,多,空)0.0000 76.7350 76.7350

130/30基金结构

最后,换手约束可以用来建立一个130-30的投资组合结构,这是一个有净多头头寸,但允许杠杆的多头和空头头寸的最大数量的杠杆结构。在130-30的投资组合中,杠杆率是30%。

要设置130-30个投资组合,请从“标准”组合问题开始,并在变量中设置杠杆的最大值杠杆作用.各个资产权重的界限范围利用1 +杠杆.由于净位置必须长,预算约束是1并且,再一次,初始投资组合是0.最后,单向转换限制提供了必要的长短限制,以防止长短姿势的“双计数”。墨水器显示了最大化夏普比的130-30个产品组合的产品组合重量。漫长而短的职位是从销售和销售交易相对于初始投资组合获得的。

杠杆= 0.3;q = setBounds(p,-leverage,1 +杠杆);q = setBudget(Q,1,1);q = setonewayturnover(q,1 +杠杆,杠杆);[qwgt, qbuy qsell] = estimateFrontier (q, 20);[qrsk, qret] = estimatePortMoments (q, qwgt);[qswgt,qslong,qsshort] = viettatemaxsharperatio(q);[qsrsk,qsret] = estibalportmoments(q,qswgt);130-30基金结构的%绘图高效前沿,与交流组合clf;portfoloexamples_plot(Sprintf(“%g-%g组合的有效边界”......100 *(1 +杠杆),100 *杠杆),......'线'如:{“标准”},'B:'},......'线',qrsk,qret,{'130-30'},'B'},......“散射”, qsrsk, qsret“夏普”}},......“散射”, [mrsk, crsk, ersk], [mret, cret, eret], {'市场''现金''平等的'}},......“散射”, sqrt(diag(p.AssetCovar)), p.AssetMean, p.AssetList,'.r'});

%设置包含最大化夏普比率的投资组合的数据集对象Blotter = DataSet({100 * QSWGT(ABS(QSWGT)> 1.0E-4),'重量'},......{100 * qslong(abs(qswgt)> 1.0e-4),“长”},......{100 * QSSHORT(ABS(QSWGT)> 1.0E-4),“短”},......“obsnames”, setlist (abs(qswgt) > 1.0e-4));DisplayPortfolio(Sprintf('%g-%g portfolio,最大锐利比例', 100*(1 +杠杆),100*杠杆),Blotter, true, sprintf('%g-%g',100 *(1 +杠杆),100 *杠杆));
130-30投资组合,最大夏普比力量长短DD -9.5565 0 9.5565 HON -6.0244 0 6.0244 INTC 4.0335 4.0335 0 JNJ 7.1234 7.1234 0 JPM -0.44583 0 0.44583 KO -13.646 0 13.646 MMM 20.908 20.908 0 MO 14.433 1433 0 MSFT 4.5592 4.5592 MSFT 4.5592 4.55920 pg 17.243 17.243 0 SBC -0.32712 0 0.32712 UTX 5.3584 5.3584 5.3584 0 WMT 21.018 21.018 0 XOM 35.323 35.323 0确认130-30产品组合(网络,长,短)100.0000 130.0000 30.0000

参考文献

  1. R. C. Grinold和R. N.Kahn。积极的投资组合管理。第二次。,2000。

  2. H. M. Markowitz。“投资组合选择。”金融杂志。卷。1,第1页,第1页,第77-91页,1952。

  3. J. Lintner。“风险资产的估值以及在股票组合和资本预算中选择风险投资。”《经济学与统计学评论》。第47卷,第1期,13-37页,1965。

  4. H. M. Markowitz。投资组合选择:投资有效多样化。John Wiley&Sons,Inc。,1959年。

  5. W. F. Sharpe。“共同基金表现。”商务杂志。第39卷,第1期,第2部分,119-138页,1966。

  6. J. Tobin。“流动性偏好作为风险的行为。”《经济研究综述》。卷。25,No.1,PP。65-86,1958。

  7. J.L.Treynor和F. Black。“如何使用安全分析来改善投资组合选择。”商务杂志。卷。46,1,PP。68-86,1973。

实用功能

功能displaySumOfTransactions(Turnover, qbuy, qsell)“沿着高效前沿的投资组合的购买总​​和(最大转换%g %%)\ n'......100 *营业额);fprintf('%.4f',100 * sum(qbuy)),sprintf('\ n \ n');fprintf('\ n')流('投资组合的销售总和沿着高效的前沿(最大营业额为g %%)\ n'......100 *营业额);fprintf('%.4f', 100 *总和(qsell));结束功能displayPortfolio(Description, Blotter, LongShortFlag, portfolioType)“% s \ n”、描述);disp(流水帐);如果(LongShortFlag)流(“确认% s组合\ n”,portfoliotype);fprintf('(网,长,短)\ n');fprintf('%.4f', [sum(Blotter.Weight), sum(Blotter.Long), sum(Blotter.Short)]);结束结束

另请参阅

|||||||||

相关的例子

更多关于

外部网站