: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

MultiCharts投资组合交易者策略范例(MultiCharts Portfolio Trader Strategy Examples,PT范例):对冲策略(Spread Trading Strategy)

MultiCharts投资组合交易者策略范例(MultiCharts Portfolio Trader Strategy Examples,PT范例):对冲策略(Spread Trading Strategy)

MultiCharts投资组合交易者策略范例(MultiCharts Portfolio Trader Strategy Examples,PT范例):对冲策略(Spread Trading Strategy)

策略描述

价差交易是一种将交易工具分成对,以相反方向进行交易的交易类型。这种类型的交易是指为一种工具开立多头头寸,同时开立另一种相反方向的头寸(空头)。这两个头寸同步开仓和平仓。

下面是一个例子。一个投资组合有两对工具: QQQ 对 SPY,KO 对 PEP。

当最近 20 个交易日的点差超过标准偏差值时,该策略将开立头寸。第二对工具同步进入与主要工具(第一对)相反的持仓。

策略开发

Portfolio_SpreadTradingSystem.Master 信号

该信号根据品种的数据序列计算得出。它包含开仓和平仓逻辑持仓:
  1. inputs: Ratio(c / c data2), Length(10), PercentOfEquity(10);
  2. var: AvgRatio(0), StdDevRatio(0);
  3. var: intrabarpersist cur_pos(0);
  4. var: Contracts_(0);
  5. Contracts_ = Portfolio_Equity * PercentOfEquity / 100;
  6. if 1 < currentbar then begin
  7. if AvgRatio + StdDevRatio < Ratio then begin// short data1, long data2
  8. if -1 <> cur_pos then begin
  9. sellshort Contracts_ contracts this bar at c;
  10. cur_pos = -1;
  11. end;
  12. end else if AvgRatio - StdDevRatio > Ratio then begin// buy data1, short data2
  13. if 1 <> cur_pos then begin
  14. buy Contracts_ contracts this bar at c;
  15. cur_pos = 1;
  16. end;
  17. end else begin
  18. cur_pos = 0;
  19. sell this bar c;
  20. buytocover this bar c;
  21. end;
  22. end;
  23. AvgRatio = XAverage(Ratio, Length);
  24. StdDevRatio = StdDev(Ratio, Length);
复制代码
其他计算要求将该策略应用于符号组合,因此我们需要检查一下情况是否如此:
  1. if 1 = getappinfo(aiisportfoliomode) then begin
  2. // code
  3. end;
复制代码
对于基本策略,我们需要返回第二个工具的策略索引,并检查是否已应用:
  1. var: slave_idx(pmms_strategies_get_by_symbol_name(symbolname data2));
  2. once if 0 > slave_idx then
  3. raiseruntimeerror(text("specified slave trader on instrument", doublequote, symbolname data2, doublequote, "not found"));
复制代码
为了使两种工具的仓位投资资本同步,我们需要将主要工具当前仓位的价格发送到配对策略中:
  1. value22 = absvalue(cur_pos*Contracts_) * c * bigpointvalue;
  2. if 0 < value22 then
  3. value22 = pmms_to_portfolio_currency(value22);
  4. pmms_set_strategy_named_num(slave_idx, "MPMoney", -cur_pos * value22);
复制代码
Portfolio_SpreadTradingSystem.Slave 信号

该信号Portfolio_SpreadTradingSystem.Slave Signal是为交易对中的第二个工具计算的。它监控前一个信号 Portfolio_SpreadTradingSystem.Master Signal 为交易对主工具生成的所有进入和退出,并以相反方向进行交易。首先,当主策略返回的 MPMoney 变量发生变化时,所有同步工作都会完成。
  1. value1 = pmms_from_portfolio_currency(pmm_get_my_named_num("MPMoney") );
复制代码
我们提取这一变量,并将其从投资组合货币转换为工具货币。然后,根据其值,我们计算潜在入市头寸的合约数:
  1. value33 = c;
  2. if marketposition <> 0 then
  3. value33 = entryprice;
  4. master_mp = IntPortion( value1 / ( value33 * bigpointvalue) );
复制代码
品种当前的持仓:
  1. my_mp = currentcontracts*marketposition;
复制代码
现在,我们将检查其位置是否不同步。如果是,我们就将其与主策略同步:
  1. if sign(my_mp) <> sign(master_mp) then begin
  2. ...
  3. end;
复制代码
我们将检查品种的主持仓是否已结束:
  1. if 0 = value1 then begin // need to close position
  2. if my_mp > 0 then
  3. sell all contracts this bar c
  4. else
  5. buytocover all contracts this bar c;
  6. #return;
  7. end;
复制代码
如果已经平仓,我们也将关闭第二个工具的仓位。如果主交易品种未平仓,我们将确定第二个交易品种的仓位方向:
  1. if 0 < value1 then begin // buy
复制代码
Value1 > 0 表示我们应该同步买入头寸。可能有两种情况:

1.当前平仓或空头头寸应该变为多头头寸,即主策略反转了头寸或从平仓状态进入了多头头寸。
2.当前仓位已经是多头,这意味着第一个交易品种部分关闭了空头仓位,这意味着我们需要部分关闭第二个交易品种的仓位。
  1. if Sign(master_mp) <> Sign(my_mp) then
  2. buy absvalue(master_mp) contracts this bar c
  3. else
  4. buytocover value1 contracts this bar c;
复制代码
反之亦然:
  1. end else begin
  2. if Sign(master_mp) <> Sign(my_mp) then
  3. sell short absvalue(master_mp) contracts this bar c
  4. else
  5. sell absvalue(value1) contracts this bar c;
  6. end;
复制代码
Value1 < 0 表示我们需要卖出以同步仓位;也有两种情况:

1.当前平仓或多头头寸应变为空头头寸,即主策略已反转头寸或已从平仓状态进入空头头寸。
2.当前仓位已经是空头,这意味着第一个交易品种部分关闭了多头仓位,这意味着我们需要部分关闭第二个交易品种的仓位。

附录

默认情况下,投资组合信号脚本会添加到 MultiCharts 和 MultiCharts64 中。

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

信号:Portfolio_SpreadTradingSystem.Master
  1. inputs: Ratio(c / c data2), Length(10), PercentOfEquity(10);

  2. var: AvgRatio(0), StdDevRatio(0);
  3. var: intrabarpersist cur_pos(0);
  4. var: Contracts_(0);

  5. if (currentbar < Length) then #return;

  6. Contracts_ = Portfolio_Equity * PercentOfEquity / 100;

  7. if 1 < currentbar then begin
  8.         if AvgRatio + StdDevRatio < Ratio then begin// short data1, long data2
  9.                 if -1 <> cur_pos then begin
  10.                         sellshort Contracts_ contracts this bar at c;
  11.                         cur_pos = -1;
  12.                 end;
  13.         end else if AvgRatio - StdDevRatio > Ratio then begin// buy data1, short data2
  14.                 if 1 <> cur_pos then begin
  15.                         buy Contracts_ contracts this bar at c;
  16.                         cur_pos = 1;
  17.                 end;
  18.         end else begin
  19.                 cur_pos = 0;
  20.                 sell this bar c;
  21.                 buytocover this bar c;
  22.         end;
  23. end;

  24. AvgRatio = XAverage(Ratio, Length);
  25. StdDevRatio = StdDev(Ratio, Length);

  26. if 1 = getappinfo(aiisportfoliomode) then begin

  27.         var: slave_idx(pmms_strategies_get_by_symbol_name(symbolname data2));
  28.         once if 0 > slave_idx then
  29.                 raiseruntimeerror(text("specified slave trader on instrument ", doublequote, symbolname data2, doublequote, "not found"));

  30.         value22 = absvalue(cur_pos*Contracts_) * c * bigpointvalue;
  31.         if 0 < value22 then
  32.                 value22 = pmms_to_portfolio_currency(value22);

  33.         pmms_set_strategy_named_num(slave_idx, "MPMoney", -cur_pos * value22);
  34. end;
复制代码
信号:Portfolio_SpreadTradingSystem.Slave
  1. var: master_mp(0), my_mp(0);

  2. value1 = pmms_from_portfolio_currency( pmm_get_my_named_num("MPMoney") ); // master's position cost. convert it to my contracts

  3. value33 = c;
  4. if marketposition <> 0 then
  5.         value33 = entryprice;

  6. master_mp = IntPortion( value1 / ( value33 * bigpointvalue) );
  7. my_mp = currentcontracts*marketposition;

  8. if sign(my_mp) <> sign(master_mp) then begin

  9.         if 0 = value1 then begin // need close position
  10.                 if my_mp > 0 then
  11.                         sell all contracts this bar c
  12.                 else
  13.                         buytocover all contracts this bar c;
  14.                 #return;
  15.         end;

  16.         value2 = master_mp - my_mp;
  17.        
  18.         if 0 < value2 then begin // we must to buy
  19.                 if Sign(master_mp) <> Sign(my_mp) then // master in long, we are in short/flat
  20.                         buy absvalue(master_mp) contracts this bar c
  21.                 else
  22.                         buytocover value1 contracts this bar c;
  23.         end else begin // we must sell
  24.                 if Sign(master_mp) <> Sign(my_mp) then // master in short, we are in long/flat
  25.                         sell short absvalue(master_mp) contracts this bar c
  26.                 else
  27.                         sell absvalue(value2) contracts this bar c;
  28.         end;
  29. end;
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

为了防止中文表达不到位,下面附上英文原文
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

本帖隐藏的内容需要回复才可以浏览
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表