那么,我们更换一个思维,把日线换为1小时周期K线看一下:
CTA 策略分享之三 -- 策略优化
老马programmer 于 2020-05-29 22:40:15 发布 909 收藏 4
上一个帖子介绍了一个趋势跟踪策略的优化思路,今天我们继续对策略进行分析,找到另外的优化方法。先看回测的权益曲线:
看到在2017 8月份到2018 2月份策略出现了较大的回撤。先定性分析一下,应该是在这段时间内日线级别的图形上震荡走势,造成策略不适应导致,看一下日线图是不是这样:
因为我们采用的日线的EMA过滤导致。
那么,我们更换一个思维,把日线换为1小时周期K线看一下:
总体分析:
下面为脚本源码(easy language,或者人家称之为 power language):
Inputs: AvgLen(30), ADXLen(12), EntryBar(2);
Vars: UpperMA(0), LowerMA(专注量化CTA策略 0), ADXValue(0), ChanSpread(0), BuySetup(False), SellSetup(False), BuyTarget(0), SellTarget(0), MROBS(0), MROSS(0);
var: va_data2(0,data2),var_adx_data2(0,data2);
va_data2 = XAverage(c,20) data2;
var_adx_data2 =adx(14) data2;
//text_new (d,t,l -10, text(var_adx_data2));
//text_new (d,t,l -20, text(var_adx_data2[1]));
UpperMA = XAverage(High, AvgLen)[1];
LowerMA = 专注量化CTA策略 XAverage(Low, AvgLen)[1];
ADXValue = ADX(ADXLen);
ChanSpread = (UpperMA - LowerMA) / 2;
BuySetup = Close > UpperMA AND ADXValue > ADXValue[1];
SellSetup = Close < LowerMA AND ADXValue >ADXValue[1];
IF BuySetup Then
BuyTarget = Close + ChanSpread;
IF SellSetup Then
SellTarget = Close - ChanSpread;
MROBS = MRO(BuySetup, EntryBar, 1);
MROSS = MRO(SellSetup, EntryBar, 1);
IF MROBS <> -1 AND MRO(MarketPosition=1, MROBS, 1) = -1 and c > va_data2 and var_adx_data2 > var_adx_data2[1] Then
Buy Next Bar at BuyTarget Stop;
IF MROSS <> -1 AND MRO(MarketPosition=-1, MROSS, 1) = -1 and c < va_data2 and var_adx_data2 >var_adx_data2[1] Then
SellSHORT Next Bar at SellTarget Stop;
SELL Next Bar at LowerMA Stop;
BUYTOCOVER Next Bar at UpperMA Stop;
华泰期货_20171124_华泰期货量化策略专题报告:CTA量化策略因子系列(四)策略因子组合与择时1
身份认证 购VIP最低享 7 折!
量化策略开发流程蒙特卡洛方法等五篇文章
天风证券-商品期货CTA专题报告(一):量化CTA策略概述-1702131
【量化交易】-民生金工_CTA策略巡礼:从趋势到套利_徐玉宁_20170224.zip
渤海证券_20161229_初识量化趋势交易体系-金融工程CTA策略专题报告之一.pdf
渤海证券_20161230_量化体系之黑色板块子策略-金融工程CTA策略专题报告之四.pdf
2022年金融工程年度策略系列之量化CTA模块.pdf
5星 · 资源好评率100%
天风证券_专题报告_量化CTA策略概述--专题报告___吴先兴1
20210513-国信证券-CTA系列专题之一:基于开盘动量效应的股指期货交易策略.pdf
5星 · 资源好评率100%
渤海证券_20161229_量化体系之农产品板块子策略-金融工程CTA策略专题报告之二.pdf
20210621-天风证券-商品期货CTA专题报告(十二):趋势策略在时间序列和横截面上的应用.pdf
5星 · 资源好评率100%
【量化交易】-民生金工_CTA程序化交易6:基于机器学习的订单簿高频交易策略_温尚清王红兵_20131212.zip
5星 · 资源好评率100%
基于情绪因子的CTA截面策略
Quant最爱
量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,连续2年被腾讯云+社区评选为“年度最佳作者”专注量化CTA策略 。
作者:John Hua FANa、Sebastian BINNEWIESb、Sanuri De SILVAa
前言
本文主要研究了情绪因子在商品期货截面策略的应用。文章发现,情绪变化较大的商品的表现比情绪变化较小的商品要好。虽然情绪乐观/悲观的程度也很重要,但与情绪的变化相比,它的预测能力明显较弱。从2010年到2020年,一个基于高与低情绪变化的加权和月度再平衡的多空投资组合每年产生7.2%且统计显著的平均回报。这种naïve策略的夏普比率为0.75,最大跌幅为12.2%,与传统因子相比该因子收益翻了一倍多,风险降低了一半。情绪因子与动量、对冲压力、偏度和基差动量无关,但与基差风险负相关。与时间序列跨越检验一致,截面定价检验进一步表明,情绪因素具有显著的定价能力,超越商品基本面。
我们发现,在紧缩的宏观环境和资金流动性恶化的时期,情绪导致的错误定价最明显,主要来自投资组合的空头。
怎么计算期货情绪?
我们使用Twitter 专注量化CTA策略 academic API获取了在2009年1月1日至2020年12月31日,所有匹配以下商品名称关键词的推文(如Table 1 Commodity Name),总共近4160,000,000条。
情绪因子策略测试
在每个月的最后一个交易日,我们将28种商品的横截面按∆ 分类,分为两个投资组合,即情绪变动高与情绪变动低。我们不应用任何平滑、缩放或优化来修改信号或资产权重。我们只是在大宗商品的TOP组中持有多头头寸,在BOTTOM组中持有空头头寸。多空组合的权重相等,按月进行再平衡。我们按照相同的逻辑来构造carry、动量、套期压力、偏度、动量和相对基差因子组合。下表给出了策略表现:
不同的tweet构建的情绪因子是否有区别?
如果情绪诱发的错误定价是有影响力的推文的结果,我们预计,当只使用非零转发和/或点赞的推文衡量商品情绪时,比使用所有推文衡量商品情绪时,会观察到更强(或类似)的表现。但是我们观察到,相反的是,有点赞的平均回报率有所下降。当同时考虑转发、点赞使用时,这些策略的回报大多不显著或弱显著。与表3中的主要结果相比,零tweet和非零tweet都不会产生更强的性能。此外,情绪是基于高关注还是低关注的推文来衡量,在统计上并没有差异。总的来说,这些发现表明情绪的预测能力取决于群体的集体智慧,而不是特定的用户群体。这一发现也暗示,至少在横向设置中,高关注用户/推文的定价影响是相当有限的。
不同的情绪计算方法是否有区别?
在上面的测试中使用了Loughran-McDonald sentiment lexicon。如果换一个词性词典结果会不一样吗?下面给出了结果,与其他替代方法相比,金融特定词典在股票定价方面表现良好,词典的选择在捕获大宗商品期货中情绪诱发的错误定价方面至关重要。
CTA 策略分享之三 -- 策略优化
老马programmer 于 2020-05-29 22:40:15 发布 910 收藏 4
上一个帖子介绍了一个趋势跟踪策略的优化思路,今天我们继续对策略进行分析,找到另外的优化方法。先看回测的权益曲线:
看到在2017 8月份到2018 2月份策略出现了较大的回撤。先定性分析一下,应该是在这段时间内日线级别的图形上震荡走势,造成策略不适应导致,看一下日线图是不是这样:
因为我们采用的日线的EMA过滤导致。
那么,我们更换一个思维,把日线换为1小时周期K线看一下:
总体分析:
下面为脚本源码(easy language,或者人家称之为 power language):
Inputs: AvgLen(30), ADXLen(12), EntryBar(2);
Vars: UpperMA(0), LowerMA(0), ADXValue(0), ChanSpread(0), BuySetup(False), SellSetup(False), BuyTarget(0), SellTarget(专注量化CTA策略 0), MROBS(0), MROSS(0);
var: va_data2(0,data2),var_adx_data2(0,data2);
va_data2 = 专注量化CTA策略 XAverage(c,20) data2;
var_adx_data2 =adx(14) data2;
//text_new (d,t,l -10, text(var_adx_data2));
//text_new (d,t,l -20, text(var_adx_data2[1]));
UpperMA = XAverage(High, AvgLen)[1];
LowerMA = XAverage(Low, AvgLen)[1];
ADXValue = ADX(ADXLen);
ChanSpread = (UpperMA - LowerMA) / 2;
BuySetup = Close > UpperMA AND ADXValue > ADXValue[1];
SellSetup = Close < LowerMA AND ADXValue >ADXValue[1];
IF BuySetup Then
BuyTarget = Close + ChanSpread;
IF SellSetup Then
SellTarget = Close - ChanSpread;
MROBS = MRO(BuySetup, EntryBar, 专注量化CTA策略 1);
MROSS = MRO(SellSetup, EntryBar, 1);
IF MROBS <> -1 AND MRO(MarketPosition=1, MROBS, 1) = -1 and c > va_data2 and var_adx_data2 > var_adx_data2[1] Then
Buy Next Bar at BuyTarget Stop;
IF MROSS <> -1 专注量化CTA策略 AND MRO(MarketPosition=-1, MROSS, 1) = -1 and c 专注量化CTA策略 < va_data2 and var_adx_data2 >var_adx_data2[1] Then
SellSHORT Next Bar at SellTarget Stop;
SELL Next Bar at LowerMA Stop;
BUYTOCOVER Next Bar at UpperMA Stop;