上一个帖子介绍了一个趋势跟踪策略的优化思路,今天我们继续对策略进行分析,找到另外的优化方法。先看回测的权益曲线:
看到在2017 8月份到2018 2月份策略出现了较大的回撤。先定性分析一下,应该是在这段时间内日线级别的图形上震荡走势,造成策略不适应导致,看一下日线图是不是这样:
可以看出这一段日线的无趋势走势造成了策略的亏损。
因为我们采用的日线的EMA过滤导致。
那么,我们更换一个思维,把日线换为1小时周期K线看一下:
胜率和盈亏比还是不尽如人意。继续想方法:加上1小时的趋势指标ADX试一下:
胜率提高较为明显,单笔交易的净利润有了较大提高。但是,还达不到实盘标准。随后我们还需要继续合理优化。
下面为脚本源码(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(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]));
{Variable Declarations}
UpperMA = XAverage(High, AvgLen)[1];
LowerMA = XAverage(Low, AvgLen)[1];
ADXValue = ADX(ADXLen);
ChanSpread = (UpperMA - LowerMA) / 2;
{Setup}
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);
{Entries}
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;
{Exits}
SELL Next Bar at LowerMA Stop;
BUYTOCOVER Next Bar at UpperMA Stop;