CTA 策略分享之二----一个优化思路

时间:2024-03-22 14:15:37

趋势跟踪策略是常用的CTA策略,具有盈亏比较高(一般要大于2),而胜率较低(往往在40%以下)的特点。要实战应用,策略必须要超出常规的盈亏比和胜率。这就需要对策略进行优化。

策略优化是一个非常重要的过程,若简单地根据历史数据进行回测选择较优参数,往往会堕入参数拟合的窠臼,达不到用于实战的预期。

本文介绍了一个基于跨周期定多空方向的优化方法,在此分享给量化交易同仁。

原始的策略是一个EMA 通道突破的策略,策略思路和源码详见上篇CTA 策略分享之一的文章:

为了提高策略绩效,我们利用日线来决定做多或者做空方向。具体思路:价格大于日线收盘价的EMA20 均线之上,作为做多进场的一个过滤条件,做空则相反。

代码如下:
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);
va_data2 = XAverage(c,20) data2;
{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 Then
Buy Next Bar at BuyTarget Stop;
IF MROSS <> -1 AND MRO(MarketPosition=-1, MROSS, 1) = -1 and c < va_data2 Then
SellSHORT Next Bar at SellTarget Stop;

{Exits}
SELL Next Bar at LowerMA Stop;
BUYTOCOVER Next Bar at UpperMA Stop;

同样在螺纹钢指数三年的15分钟Bar 测试,绩效如下:

CTA 策略分享之二----一个优化思路

可以看出,盈亏比和胜率均有改善。说明这一优化思路有一定的作用。

当然,要实现一个能实战的策略,还需要继续的采用更多的优化方法,把胜率和盈亏比提到一个新的高度才可以。笔者将持续研究,并随后与大家分享,同时欢迎朋友们批评指正。