【点宽专栏】中国海龟——在实盘大赛中获奖的NEWS系统解密

本文探讨了海龟交易法则在中国期货市场的适用性,并介绍了动态风险管理在趋势跟踪策略中的重要性。作者通过动态参数调整的NEWS系统模型,在2007年的实盘交易大赛中取得了105%的收益率。该系统强调根据市场波动性自动调整交易参数,以降低资金回撤风险。文章还提供了策略代码,并展示了回测结果。
部署运行你感兴趣的模型镜像

在这里插入图片描述
作者:吴雨豪

北师大珠海校区 | 金融数学 | 本科

点宽量化俱乐部第一期会员
在这里插入图片描述

本节提要
提及趋势跟踪, 我们不得不涉及在该领域有至高地位的海龟交易法则。与原版的海龟交易法则不同, 这里更重视的是动态风险的管理。与其臆测市场未来的波动性水平,不如援引动态参数。

背景

提及趋势跟踪, 我们不得不涉及在该领域有至高地位的海龟交易法则, 在趋势跟踪领域, 它的地位可能不亚于《圣经》之于耶稣教。1971年,海龟交易法则创始人理查德·丹尼斯以600美金入市, 至1987年在剔除众多的该基金捐赠之后, 本金仍升逾2亿美金。简单地说, 海龟交易法则就是上涨突破20周期或55周期的最高价后做多, 下跌突破20周期或55周期的最低价做空。然后, 以2/N为单位进行三次加仓(N是该品种的平均周期波动性水平)。

曾经在美国期货市场上大获成功的海龟交易法则是否同样适用于中国期货市场呢?带着这样的疑问, 2007年, 将海龟交易法则略做修改后, 将其命名为NEWS交易系统模型, 并且以完全按照系统信号的机械化交易模式报名参加了第七届中期杯实盘交易大赛。在不到半年(2007年5~10月)的参赛时间里面,取得了百分之105的收益率回报。

中国版海龟思维

在常态市场的应用中, 贯穿过程中的 “ 停、 走 ” 概念, 可以有效地回避该系统可能带来的巨幅资金回撤, 换句话说, 该系统并非持续在市, 当然,如果将 “ 停、 走” 引申为一种头寸调整的方法, 也可以让它持续在市。何时获利了结中断系统的运行?何时增、 减仓?与原版的海龟交易法则不同, 我更重视的是动态风险的管理。所谓动态风险, 就是当前交易信号的反向位置可能带来的最大损失(没有考虑到隔夜直接以反向涨、 跌停板跳空的情形)。

每一笔交易,最多愿意承受多大的损失?所有的交易,假如集体失败,最多面临多大的损失合计?这就是动态风险管理的基础。值得提醒的是,这种考量在日线级别下, 是基于每天的收盘价, 而非该笔交易的初始建仓成本。以NEWS系统为例, 我们不难得到反向交易系统信号的位置, 以及对应头寸可 能带来的亏损金额, 与我们预设的风险水平核对, 我们就不难形成头寸增减的交易决策。这样操作的意义在于每一笔交易、 每一天的交易,我们始终承受着同样水平的风险。

传统的观点认为, 如果市场始终维持一个足够高水平的波动性, 那么,趋势系统永远都不会失效。对于这个观点, 我有一点补充:趋势系统的参数必须与市场的波动性水平相吻合。否则, 仍然有可能无法盈利。1987年, 海龟交易法则的惨败:1991年, 理查德·丹尼斯改用调大参数后的海龟交易法则 重出江湖, 都印证着这个道理。

“惶恐滩前说惶恐, 零丁洋里叹零丁“,与其臆测市场未来的波动性水平, 不如援引动态参数, 根据市场实际波动性的水平, 自动调整趋势系统的参数。

加入了动态调整系统参数的NEWS系统交易模型思路

EF=(HHV(C,N1)-LLV(C,N1))/SUM(ABS(C-REF(C,N1)),N1);

EF10=EMA(EF, N2);

CLOSE > REF (HHV (HIGH, INTPART (10-(EF10-0.5)×10)), 1), BPK;

CLOSE < REF (LLV (LOW, INTPART (10-(EF10-0.5)×10)), 1), SPK;

策略代码分享

4.1策略文件(滑动屏幕查看完整代码)
function chinatt(Int,Begin,cellPar)
%UNTITLED2 此处显示有关此函数的摘要
global idexK
global Tlen
global TimeDT
global TimeKT
N1=cellPar{1};
N2=cellPar{2};
if Int
traderSetParalMode(false);
idexK=traderRegKData(‘day’,1);
Tlen=length(idexK(:,1));
TimeDT=zeros(Tlen,1);
TimeKT=zeros(Tlen,1);
else
%提取数据
[mp,,] = traderGetAccountPositionV2(1,(1:Tlen));
[,HandListCap,,,]=traderGetAccountInfoV2(1);
iddexK = traderGetRegKData(idexK, 100, false);
[Multiple, ~, ~, ~, ~, ~, ~] = traderGetFutureInfoV2(1:Tlen);
for i=1:Tlen
idddexK=iddexK(1+8*(i-1):8i,:);
time=idddexK(1,:);
high=idddexK(3,:);
low=idddexK(4,:);
close=idddexK(5,:);
sharenum=floor(HandListCap
0.8/close(end)/Multiple(i)/Tlen);
%指标计算
diff=close(N1+1:end)-close(1:end-N1);
EF=(max(close(end-N1+1:end))-min(close(end-N2+1:end)))/sum(abs(diff(end-N1+1:end)));
EF10=EMA(EF,N2);
t=floor(10-(EF10-0.5)*10);
if isnan(t)
continue;
end
conbuy=close(end)>max(high(end-t:end-1));
consell=close(end)<min(low(end-t:end-1));
%开平仓动作
if mp(i)0
if conbuy
traderBuyV2(1,i,sharenum,0,‘market’,‘buy’);
elseif consell
traderSellShortV2(1,i,sharenum,0,‘market’,‘sell’);
end
elseif mp(i)>0
if consell
traderPositionToV2(1,i,0,0,‘market’,‘stop’);
end
elseif mp(i)<0
if conbuy
traderPositionToV2(1,i,0,0,‘market’,‘stop’);
end
end
end
end
end
function EMAValue=EMA(Price,Length)
EMAValue=zeros(length(Price),1);
K=2/(Length+1);
for i=1:length(Price)
if i
1
EMAValue(i)=Price(i);
else
EMAValue(i)=Price(i)K+EMAValue(i-1)(1-K);
end
end
end

4.2执行文件(滑动屏幕查看完整代码)
targetList1 = traderGetCodeList(‘dce000’);
targetList2 =traderGetCodeList(‘czce000’);
targetList3 = traderGetCodeList(‘shfe000’);
targetList=[targetList1,targetList2,targetList3];
targetList=targetList([ 5 7 8 12 14 16 33 40 43 44 ]);
traderSetBacktest(100000000,0.0025,0.02,0,1,0,0);
AccountList(1) = {‘FutureBackReplay’};
N1=9;
N2=11;
traderRunBacktestV2(‘chinatt’,@chinatt,{N1,N2},AccountList(1),targetList,‘day’,1,20110101,20170820,‘FWard’);

回测表现

随机挑选出10种不同类型同时成交量活跃的商品期货

自2010年至2017年进行回测
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值