找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 11|回复: 0

CTA的一个优化思路

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-22 14:28:00 | 显示全部楼层 |阅读模式
趋势跟踪策略是常用的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 测试,绩效如下:


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


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

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-12 05:46 , Processed in 0.098526 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表