第 11 章 海龟策略
从本章起,我们来用前面学过的框架实现一些常见的策略。
海龟策略(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 手。
回测结果: