在期货市场这个大舞台上,每天都有无数的交易者在参与,他们有的经验丰富,有的初出茅庐。怎样对这两种不同种类的投资者进行划分呢,我们可以使用这个市场中一种经常被投资者密切关注的数据,那就是期货的成交和持仓数据。其实这个数据对于期货老手并不陌生,每天收盘过后,期货软件都会公布不同品种的成交数据的龙虎榜,从这些数据中,我们能大致推算专业机构的趋势动向。但如何从这些数据中,从量化的角度真正获取有价值的信息呢?
让我们通过一个有趣的策略——“蜘蛛网策略”来一探究竟。
“蜘蛛网策略”这个名字听起来很神秘,其实它来源于对市场的一种深刻观察。这个策略的核心在于区分两类投资者:知情投资者和非知情投资者。
通过观察成交和持仓数据,我们可以捕捉到这两类投资者的行为特征,进而制定出投资策略。
这个策略的关键在于利用持仓量与成交量之间的关系,通过一系列的数学和逻辑运算,来识别市场中的知情投资者和非知情投资者。
以往来说,获取不同目标品种的持仓量与成交量数据确实是一件难事。但是在DATADATA平台上我们快速的获取到,并且通过平台功能,我们还可以进行“蜘蛛网策略”指标的计算,作为我们日常进行交易决策的参考。
Stat(知情投资者判断阈值)=OI(未平仓量)/Vol(成交量)
接下来我们可以统计每个会员的知情统计量,使用每个会员的多头持仓,空头持仓和成交量,使用下面的公式进行计算:
Stat(知情统计量)=(long + short)/v
然后我们就可以根据总体的知情投资者判断阈值和每个会员的知情统计量,将不同会员判定为知情投资者和非知情投资者;
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平台设置自动更新,这样呢,我们的策略就可以根据期货的实时更新数据,导入到策略里面。
下面我们来看怎样在策略当中进行DATADATA平台数据的导入,当我们在DATADATA平台创建好数据表以后,可以点击这里的API复制。然后在我们的策略里面就可以通过exchange.GetData获取实时更新的数据,这样在策略当中就完成了蜘蛛网指标数据的导入工作。
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的时候,该策略在某些时间段内确实能够带来稳定的收益。
当然,投资指标并非万无一失的预测工具,它们的胜率都不能保证达到100%。因此,我们在使用这些指标时必须保持审慎和理智。蜘蛛网策略指标虽然具有其独特的价值,但不能单独依赖它来进行决策。通过DATADATA平台,我们可以将蜘蛛网策略指标与其他宏观指标相结合,构建一个多维度的宏观因子模型。这样的模型能够更全面地反映市场的动态和趋势,提高预测价格的变动趋势的准确性。
本系列课程旨在为大家介绍基本面分析在商品期货量化交易中的应用,其他相关文章请点击下面链接: