海龟交易系统的实现

本文详细介绍了海龟交易系统的实现,重点讨论了趋势捕捉中的唐奇安通道和资金管理策略,包括N值计算、加仓、动态止损和止盈规则。通过代码实现展示了如何使用ATR代替N值,并分析了策略的收益和风险,指出ATR异常可能是由于处理停牌数据的方式导致。最后,探讨了海龟交易系统在不同市场条件下的表现以及其在多因子策略上的应用潜力。
摘要由CSDN通过智能技术生成

海龟交易系统的实现

前言

海龟交易系统本质上是一个趋势跟随的系统,但是最值得我们学习的,是资金管理尤其是分批建仓及动态止损的部分

一、趋势捕捉

** 唐奇安通道**

该指标是有Richard Donchian发明的,是有3条不同颜色的曲线组成的,该指标用周期(一般都是20)内的最高价和最低价来显示市场价格的波动性,当其通道窄时表示市场波动较小,反之通道宽则表示市场波动比较大。 如图所示:

    该具体分析为:
    当价格冲冲破上轨是就是可能的买的信号;反之,冲破下轨时就是可能的卖的信号。
    该指标的计算方法为:
           
	上线=Max(最高低,n)
    下线=Min(最低价,n)
    中线=(上线+下线)/2

海龟交易就是利用唐奇安通道的价格突破来捕捉趋势。

不过我们在向下突破10日唐奇安下沿卖出。

二、资金管理

2.1、N值计算

N值是仓位管理的核心,涉及加仓及止损。另外,N值与技术指标平均真实波幅 ATR很相似

首先介绍真实波幅: 真实波幅是以下三个值中的最大值

	1、当前交易日最高价和最低价的波幅
    2、前一交易日的收盘价与当前交易日最高价的波幅
	3、前一交易日的收盘价与当前交易日最低价的波幅

用公式写就是:

TrueRange=Max(HighLow,abs(HighPreClose),abs(PreCloseLow))

 

接下来,N值计算公式为:

 

N=PreN[19]+TrueRange20

 

    其中 preN为前面N值,TrueRange为当前的真实波幅,此公式的真是含义为计算之前20天(包括今天在内)的N的平均值

另外,有些海龟交易系统用的是ATR来代替N值,ATR为真实波幅的20日平均。

2.2 买卖单位及首次建仓

先给出公式:

Unit=1N

 

首次建仓的时候,当捕捉到趋势,即价格突破唐奇安上轨时,买入1个unit。

其意义就是,让一个N值的波动与你总资金1%的波动对应,如果买入1unit单位的资产,当天震幅使得总资产的变化不超过1%。例如:

		现在你有10万元资金,1%波动就是1000元。假如标X的N值为0.2元,1000元÷0.2元=5000股。也就是说,你的第一笔仓位应该是在其突破上轨(假设为5元)时立刻买入5000股,耗资25000元。

2.3 加仓

若股价在上一次买入(或加仓)的基础上上涨了0.5N,则加仓一个Unit。

	接上面的例子:假如N值仍为0.2。
    价格来到 5 + 0.2*0.5 = 5.1时,加仓1个Unit,买入5000股,耗资25500元,剩余资金 49500元
    价格来到 5.1 + 0.2*0.5 = 5.2 时再加仓1个unit。买入5000股,耗资26000元,剩余资金 23500元

2.4 动态止损

当价格比最后一次买入价格下跌2N时,则卖出全部头寸止损。

        接上面的例子,最后一次加仓价格为5.2。假如此时N值0.2元。 当价格下跌到 5.2 - 2*0.2 = 4.8元时,清仓。
        持仓成本为 (5+5.1+5.2)*5000/15000 = 5.1元。 此时亏损 (5.1-4.8)*15000 = 4500元 对于10万来说 这波亏损4.5%

2.5 止盈

当股价跌破10日唐奇安通道下沿,清空头寸结束本次交易

三、代码实现

本代码用ATR代替N值进行计算,其他逻辑不变:

ATR=MA(TrueRange,20)
我们以单只股票为标,建立海龟交易系统,当然,可以将总资产均分为n份,同时交易n个标。

计算ATR值用日线数据,监控价格突破采用分钟线

0 初始化参数,在initialize(account)写入

 
 
 
 
 
1
def initialize(account): 
2
    account.last_buy_prcie = 0  #上一次买入价
3
    account.hold_flag = False   # 是否持有头寸标志
4
    account.limit_unit = 4     # 限制最多买入的单元数
5
    account.unit = 0       # 现在买入1单元的股数
6
    
 
 
查看全部
 

1 唐奇安通道计算及判断入场离场:

我们设计个函数,传入值为回测中 account.get_history()取得的某单个股票的历史数据、股票现价、T为计算唐奇安通道的数据长度,转化为dataframe格式

 
 
 
 
 
1
def IN_OR_OUT(data,price,T):
2
    up = max(data['highPrice'].iloc[-T:])
3
    down = min(data['lowPrice'].iloc[-int(T/2):])  # 这里是10日唐奇安下沿
4
    if price>up:
5
        return 1
6
    elif price<down:
7
        return -1
8
    else:
9
        return 0 
 
 
查看全部
 

2. ATR值计算:

 
 
 
 
 
1
def CalcATR(data):
2
    TR_List = []
3
    for i in range(1,21):
4
        TR = max(data['highPrice'].iloc[i]-data['lowPrice'].iloc[i],abs(data['highPrice'].iloc[i]-data['closePrice'].iloc[i-1]),abs(data['closePrice'].iloc[i-1]-data['lowPrice'].iloc[i]))
5
        TR_List.append(TR)
6
    ATR = np.array(TR_List).mean()
7
    return ATR
 
 
查看全部
 

3. 计算unit,注意股数为100的整数倍

 
 
 
 
 
1
def CalcUnit(perValue,ATR):
2
    return int((perValue/ATR)/100)*100
 
 
查看全部
 

4.判断是否加仓或止损:

    当价格相对上个买入价上涨 0.5ATR时,再买入一个unit
    当价格相对上个买入价下跌 2ATR时,清仓
 
 
 
 
 
1
def Add_OR_Stop(price,lastprice,ATR):
2
    if price >= lastprice + 0.5*ATR:
3
        return 1
4
    elif price <= lastprice - 2*ATR:
5
        return -1
6
    else:
7
        return 0
海龟交易法则是一种基于趋势跟踪的交易策略,它源于20世纪80年代,是由美国投资人Richard Dennis提出的。该交易法则的实现使用技术指标和计算机程序,能够有效地减少情绪对交易行为的影响,提高交易决策的稳定性和可靠性。 Python是一种强大的编程语言,被广泛用于数据分析、科学计算、人工智能等领域。其生态系统中有丰富的开源库和工具,例如numpy、pandas、matplotlib、scikit-learn等,可以辅助实现海龟交易法则。 基于Python实现海龟交易法则的步骤如下: 1.获取历史数据:从交易市场获取历史K线数据,包括开盘价、收盘价、最高价、最低价和成交量等信息。 2.计算指标:对获取的历史数据进行计算,如计算移动平均线(MA)、相对强弱指标(RSI)、布林带等常用指标。 3.确定入市点位和出市点位:根据海龟交易法则的规则,首先确定进场点位,即突破指定周期内的最高价或最低价时,建仓买入或卖出。其次,确定离场点位,即当价格跌破10日或20日的移动平均线时,止损出局,或者当价格上涨到10日或20日的移动平均线时,退出持仓。 4.执行交易策略:根据进场和离场点位的设置,执行交易策略。当价格突破进场点位时,按照固定比例建仓买入或卖出,例如入场时买入50%的资金,待价格继续上涨时继续加仓,直至满仓为止。当价格跌破离场点位时,按照固定比例平仓,例如离场时卖出全部持仓。 总之,基于Python实现海龟交易法则需要掌握数据获取和处理、技术指标计算、交易策略设计等知识和技能。同时还需要注意风险控制和资金管理,合理设置止损和仓位大小,以保证交易的稳定性和盈利能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值