资源加载中... loading...

基于商品期货基本面的研究框架(一):“蜘蛛网策略”:从期货成交持仓数据中洞察投资机会

Author: ianzeng123, Created: 2024-01-30 15:27:54, Updated: 2024-02-28 21:45:10

img

在期货市场这个大舞台上,每天都有无数的交易者在参与,他们有的经验丰富,有的初出茅庐。怎样对这两种不同种类的投资者进行划分呢,我们可以使用这个市场中一种经常被投资者密切关注的数据,那就是期货的成交和持仓数据。其实这个数据对于期货老手并不陌生,每天收盘过后,期货软件都会公布不同品种的成交数据的龙虎榜,从这些数据中,我们能大致推算专业机构的趋势动向。但如何从这些数据中,从量化的角度真正获取有价值的信息呢?

image

让我们通过一个有趣的策略——“蜘蛛网策略”来一探究竟。

“蜘蛛网策略”的前世今生

“蜘蛛网策略”这个名字听起来很神秘,其实它来源于对市场的一种深刻观察。这个策略的核心在于区分两类投资者:知情投资者和非知情投资者。

  • 知情投资者:他们通常是那些专业、经验丰富的投资者,能够更有效地获取信息,从而在交易中更加果断。
  • 非知情投资者:他们可能相对缺乏经验,或者获取信息的能力较弱,交易行为可能更随机。

通过观察成交和持仓数据,我们可以捕捉到这两类投资者的行为特征,进而制定出投资策略。

如何利用“蜘蛛网策略”进行投资?

这个策略的关键在于利用持仓量与成交量之间的关系,通过一系列的数学和逻辑运算,来识别市场中的知情投资者和非知情投资者。

以往来说,获取不同目标品种的持仓量与成交量数据确实是一件难事。但是在DATADATA平台上我们快速的获取到,并且通过平台功能,我们还可以进行“蜘蛛网策略”指标的计算,作为我们日常进行交易决策的参考。

  1. 筛选合并会员:首先,从期货的成交和持仓数据中筛选出关键信息。这涉及到对多个会员单位的成交量、持买单量、持卖单量的统计。这里需要注意的是,因为一个目标品种每日公布的交易会员可能具有30个之多,而其实大部分头部期货公司掌握着多数的成交量和持仓数据,所以我们根据成交量和持仓数据排名,筛选出来头部期货公司,对其他的公司进行合并,命名为“合并其他会员”。具体合并的规则是这样的,首先对成交量,多头持仓,空头持仓进行排名,分别取三个数据的排名前二十的会员,然后提取并集,就是三项数据都是排名靠前的会员;然后在并集中取排名前N的会员(N可以自己设置,这里设置为6)作为头部会员,其他的会员数据我们进行合并。

  1. 计算统计量:接着,我们通过特定的公式计算出一个名为Stat的统计量,这个统计量可以作为知情投资者的判断标准:
Stat(知情投资者判断阈值)=OI(未平仓量)/Vol(成交量)

接下来我们可以统计每个会员的知情统计量,使用每个会员的多头持仓,空头持仓和成交量,使用下面的公式进行计算:

Stat(知情统计量)=(long + short)/v

然后我们就可以根据总体的知情投资者判断阈值和每个会员的知情统计量,将不同会员判定为知情投资者和非知情投资者;

  1. 情绪指标:根据两种不同类型的投资者,我们可以进一步计算出知情投资者情绪(ITS)和非知情投资者情绪(UTS)两个重要指标。这两个指标将帮助我们判断不同类型投资者市场的情绪倾向。其中,ITS指标分数较高代表多头趋势强烈;相反,UTS指标分数较高代表空头趋势强烈。
ITS(知情投资者)=(long-short)/(long+short)
UTS(非知情投资者)=(long-short)/(long+short)

依据这两个指标,我们可以计算出来市场情绪差异(MSD)指标,这个指标可以用来代表知情投资者与非知情投资者看多市场的力度差异。这个指标分数较高也代表多头趋势强烈。

MSD = ITS - UTS

从图表中指标可得,ITS和MSD指标为负,而UTS指标为正,代表知情投资者的空头趋势是比较强烈的,而非知情投资者多头趋势比较强烈,因此相对来说,交易趋势在一定程度上可以判断为空。

回测与实际应用

虽然这个策略听起来很复杂,但其实背后的逻辑非常简单:就是通过数据分析来捕捉市场的情绪变化,从而做出理性的投资决策。而且,通过优宽平台的回测系统,我们可以看到这个策略在实际操作中的表现如何。

所以第一步我们需要在策略里面导入这份数据,这里我们应用DATADATA平台的API,在策略里面获取实时的蜘蛛网策略的三个指标,这里需要注意的是,我们需要对数据格式进行一下整理,数据源必须要有time,data两个字段在schema里描述。这里我们示范一下一个股票宏观数据的整理代码。这里我们需要对time设置为bigint的格式,另有包含的列数据使用设置为json的格式。

select EXTRACT(EPOCH FROM time)::bigint * 1000 as time, date, json_build_object('add_investor', add_investor,'close_price', close_price) as data from futures_data.gpzhsj

另外,我们还需要在DATADATA平台设置自动更新,这样呢,我们的策略就可以根据期货的实时更新数据,导入到策略里面。

image

下面我们来看怎样在策略当中进行DATADATA平台数据的导入,当我们在DATADATA平台创建好数据表以后,可以点击这里的API复制。然后在我们的策略里面就可以通过exchange.GetData获取实时更新的数据,这样在策略当中就完成了蜘蛛网指标数据的导入工作。

image

var obj = exchange.GetData("https://www.datadata.cn/api/v1/query/**********/data")

下面我们就可以使用统计出来的蜘蛛网指标进行策略的构建。这里我们策略的思路比较简单,当指标ITS,UTS和MSD达到固定阈值的时候,我们进行开仓和平仓的操作。这三个指标的阈值大家可以根据不同的品种进行调参设置,但是总体来说,ITS和MSD需要为正数,而UTS需要为负数,这样也符合指标构建的思想。


/*backtest
start: 2021-02-01 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/


function main() {
    var preData = null
    var p = $.NewPositionManager() 
    while (true) {
        // 数据源必须要有time,data两个字段在schema里描述
        var obj = exchange.GetData("https://www.datadata.cn/api/v1/query/9e6123d1-8d9a-4c64-8a8a-fb5e5cb3be67/data")
        if (obj.Data != preData) {
            var info = JSON.parse(obj.Data)
            var valueITS = info.ITS
            var valueUTS = info.UTS
            var valueMSD = info.MSD

            var posInfo = exchange.GetPosition()

            if(posInfo && posInfo.length == 0){
                if(valueITS > itsThre || valueUTS < utsThre || valueMSD > msdThre){ 
                    p.OpenLong('FG888', 1)
                }

                if(valueITS < -itsThre || valueUTS > -utsThre || valueMSD < -msdThre){ 
                    p.OpenShort('FG888', 1)
                }
            }

            if(posInfo && posInfo.length > 0){
                if(posInfo[0].Type %2 == 0 && (valueITS < -itsThre || valueUTS > -utsThre || valueMSD < -msdThre)){ 
                    p.Cover('FG888', 1)
                }

                if(posInfo[0].Type %1 == 0 && (valueITS > itsThre || valueUTS < utsThre || valueMSD > msdThre)){ 
                    p.Cover('FG888', 1)
                }
            }

            preData = obj.Data
        }
        Sleep(5000)
    }
}

以玻璃期货为例,通过应用“蜘蛛网策略”,我们发现当设置ITS为0.3,UTS为-0.2,MSD为0.2的时候,该策略在某些时间段内确实能够带来稳定的收益。

image

当然,投资指标并非万无一失的预测工具,它们的胜率都不能保证达到100%。因此,我们在使用这些指标时必须保持审慎和理智。蜘蛛网策略指标虽然具有其独特的价值,但不能单独依赖它来进行决策。通过DATADATA平台,我们可以将蜘蛛网策略指标与其他宏观指标相结合,构建一个多维度的宏观因子模型。这样的模型能够更全面地反映市场的动态和趋势,提高预测价格的变动趋势的准确性。

本系列课程旨在为大家介绍基本面分析在商品期货量化交易中的应用,其他相关文章请点击下面链接:


更多内容