从本章起,我们来用前面学过的框架实现一些常见的策略。

海龟策略(Turtle Strategy)是一种经典的投资和交易策略。

它的内容是这样的:在股价超过过去 N 个交易日的股价最高点时买入,在股价低于过去 N 个交易日的股价最低点时卖出(N 通常设为 20)。上述的若干个最高点和最低点会组成一个通道,称为“唐奇安通道 (Donchian Channel)”。原始的唐奇安通道有两条线,过去 N 天最高价的最大值形成的线叫做上阻力线,过去 N 天最低价的最小值形成线叫做下支撑线。

..

唐奇安通道的主要作用是帮助交易者确定买入和卖出时机。因为唐奇安通道是根据最高价和最低价计算出来的,通道的宽窄又随着价格的变化自动调整,所以大多数时候价格是在通道之内运行,很少突破其上下轨道的。

也就是说,价格并不会随意突破阻力线和支撑线,但如果有效突破,那就预示着大行情可能将会出现。此时交易者可以根据支撑和阻力线,确定买进或卖出的具体时机。比如:当价格向上突破阻力线就买入,当价格跌破支撑线就卖出。

我们把突破“唐奇安通道”上阻力线时设为买入信号(1),低于下支撑线时设为卖出信号(-1),其他时间为不操作(0)。

根据这个原理我们首先来编写唐奇安指标。

定义指标参数:

A 序表,K线数据
y 指标返回列。1买入信号,-1卖出信号
n 周期

在indicator.splx中编写指标函数:

A B
…… ……
43 func Donchian(A, $y, n) =A.run(${y} = if( 收盘>最高[-n:-1].max():1, 收盘<最低[-n:-1].min():-1; 0) )

当有买入信号且空仓时,下买入订单;有卖出信号且有持仓股票时,下卖出订单。

编写回测代码:

A B
1 >call("init.splx")
2 2024 =date(A2,1,1)
3 =workday(B2,-110,HOLIDAY) =date(A2,12,31)
4 600690 =Load@C(A4, A3,B3)
5
6 =B4.derive(:DC)
7 =Donchian(A6, DC, 20)
8
9 =Begin(A6)
10 =A9.select( 日期>=B2)
11 for A10 =H=昨日.持仓
12 =卖出=if(昨日.DC==-1,SellOff( ~, H,收盘 ) )
13 =if(昨日.DC==1 && H.len()<=0, 买入|=Buy( ~,100,收盘))
14 =Loop()
15 =Summary(A10) =Display(A15)

A6:A7 调用函数计算唐奇安指标。

B12 当指标值为 -1 时,以当日收盘价格全部卖出

B13 当指标值为 1 并且空仓时,以当日收盘价格买入 1 手。

回测结果:

..

Logo

专业量化交易与投资者大本营

更多推荐