海龟交易法策略(Python版)_第1页
海龟交易法策略(Python版)_第2页
海龟交易法策略(Python版)_第3页
海龟交易法策略(Python版)_第4页
海龟交易法策略(Python版)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

海龟交易法策略(Python版)海龟交易策略,作为一套经典的趋势跟随型自动化交易策略,其设计之全面、逻辑之严谨,在交易领域享有盛誉。该策略不仅涵盖了入场条件、仓位控制、资金管理等关键环节,更提供了详细的实现模板,为交易者提供了宝贵的参考。交易逻辑思路海龟交易策略的核心在于利用技术指标来判断市场趋势,并据此进行交易决策。具体来说,该策略主要依据以下几个关键要素:1.**ATR(平均真实波幅)**:用于衡量市场波动性,进而确定开仓和平仓的时机及仓位大小。2.**唐奇安通道**:结合ATR计算出的上轨和下轨,形成开仓和平仓的触发条件。3.**移动平均线(MA)**:通过比较短期和长期MA线的位置关系,判断市场趋势的方向。基于以上要素,策略的交易逻辑如下:***开仓条件**:+当价格上穿唐奇安通道的上轨,且短期MA线位于长期MA线上方时,视为上涨趋势确立,此时开多仓。+当价格下穿唐奇安通道的下轨,且短期MA线位于长期MA线下方时,视为下跌趋势确立,此时开空仓。***平仓条件**:+对于多头仓位,若价格跌破唐奇安平仓通道的下轨,则进行全平仓操作;否则,根据价格与持仓均价的相对位置,以及ATR的倍数关系,逐步减仓。+对于空头仓位,若价格涨破唐奇安平仓通道的上轨,则进行全平仓操作;否则,同样根据价格与持仓均价的相对位置,以及ATR的倍数关系,逐步减仓。策略特点海龟交易策略具有以下显著特点:1.**趋势跟随**:该策略专注于捕捉市场的主要趋势,通过明确的开仓和平仓条件,确保在趋势行情中能够获得较好的收益。2.**自动化交易**:策略以Python代码的形式实现,可以自动执行交易决策,降低了人为干预的风险和成本。3.**资金管理**:通过设定交易最大资金比率和止损比例区间,策略有效地控制了风险,避免了因单一交易过大而导致的资金损失。4.**灵活性**:策略中的参数可以根据市场情况进行调整,以适应不同的交易环境和需求。5.**回测验证**:策略提供了详细的回测数据,包括回测时间、品种、初始资金等,方便交易者对策略的有效性进行验证和评估。海龟交易策略以其全面的设计和严谨的逻辑,为交易者提供了一套行之有效的交易解决方案。通过自动化执行、资金管理和灵活性等方面的优势,该策略有助于交易者在复杂多变的市场环境中稳健获利。海龟交易策略是一套非常完整的趋势跟随型的自动化交易策略。这个复杂的策略在入场条件、仓位控制、资金管理、止损止盈等各个环节,都进行了详细的设计,这基本上可以作为复杂交易策略设计和开发的模板。策略源码模板:#coding=utf-8from__future__importprint_function,absolute_import,unicode_literalsimportnumpyasnpimportpandasaspdtry:

importtalibexcept:

print('请安装TA-Lib库')fromgm.apiimport*'''本策略通过计算CZCE.FG801和SHFE.rb1801的ATR.唐奇安通道和MA线,并:上穿唐奇安通道且短MA在长MA上方则开多仓,下穿唐奇安通道且短MA在长MA下方则开空仓若有多/空仓位则分别:价格跌/涨破唐奇安平仓通道上/下轨则全平仓位,否则根据跌/涨破持仓均价-/+x(x=0.5,1,1.5,2)倍ATR的仓位回测数据为:CZCE.FG801和SHFE.rb1801的1min数据回测时间为:2017-09-1509:15:00到2017-10-0115:00:00'''definit(context):

#context.parameter分别为唐奇安开仓通道.唐奇安平仓通道.短ma.长ma.ATR的参数

context.parameter=[55,20,10,60,20]

context.tar=context.parameter[4]

#context.goods交易的品种

context.goods=['CZCE.FG801','SHFE.rb1801']

#context.ratio交易最大资金比率

context.ratio=0.8

#订阅context.goods里面的品种,bar频率为1min

subscribe(symbols=context.goods,frequency='60s',count=101)

#止损的比例区间defon_bar(context,bars):

bar=bars[0]

symbol=bar['symbol']

recent_data=context.data(symbol=symbol,frequency='60s',count=101,fields='close,high,low')

close=recent_data['close'].values[-1]

#计算ATR

atr=talib.ATR(recent_data['high'].values,recent_data['low'].values,recent_data['close'].values,

timeperiod=context.tar)[-1]

#计算唐奇安开仓和平仓通道

context.don_open=context.parameter[0]+1

upper_band=talib.MAX(recent_data['close'].values[:-1],timeperiod=context.don_open)[-1]

context.don_close=context.parameter[1]+1

lower_band=talib.MIN(recent_data['close'].values[:-1],timeperiod=context.don_close)[-1]

#计算开仓的资金比例

percent=context.ratio/float(len(context.goods))

#若没有仓位则开仓

position_long=context.account().position(symbol=symbol,side=PositionSide_Long)

position_short=context.account().position(symbol=symbol,side=PositionSide_Short)

ifnotposition_longandnotposition_short:

#计算长短ma线.DIF

ma_short=talib.MA(recent_data['close'].values,timeperiod=(context.parameter[2]+1))[-1]

ma_long=talib.MA(recent_data['close'].values,timeperiod=(context.parameter[3]+1))[-1]

dif=ma_short-ma_long

#获取当前价格

#上穿唐奇安通道且短ma在长ma上方则开多仓

ifclose>upper_bandand(dif>0):

order_target_percent(symbol=symbol,percent=percent,order_type=OrderType_Market,

position_side=PositionSide_Long)

print(symbol,'市价单开多仓到比例:',percent)

#下穿唐奇安通道且短ma在长ma下方则开空仓

ifclose<lower_bandand(dif<0):

order_target_percent(symbol=symbol,percent=percent,order_type=OrderType_Market,

position_side=PositionSide_Short)

print(symbol,'市价单开空仓到比例:',percent)

elifposition_long:

#价格跌破唐奇安平仓通道全平仓位止损

ifclose<lower_band:

order_close_all()

print(symbol,'市价单全平仓位')

else:

#获取持仓均价

vwap=position_long['vwap']

#获取持仓的资金

money=position_long['cost']

#获取平仓的区间

band=vwap-np.array([200,2,1.5,1,0.5,-100])*atr

grid_percent=float(pd.cut([close],band,labels=[0,0.25,0.5,0.75,1])[0])*percent

#选择现有百分比和区间百分比中较小的值(避免开仓)

target_percent=np.minimum(money/context.account().cash['nav'],grid_percent)

iftarget_percent!=1.0:

print(symbol,'市价单平多仓到比例:',target_percent)

order_target_percent(symbol=symbol,percent=target_percent,order_type=OrderType_Market,

position_side=PositionSide_Long)

elifposition_short:

#价格涨破唐奇安平仓通道或价格涨破持仓均价加两倍ATR平空仓

ifclose>upper_band:

order_close_all()

print(symbol,'市价单全平仓位')

else:

#获取持仓均价

vwap=position_short['vwap']

#获取持仓的资金

money=position_short['cost']

#获取平仓的区间

band=vwap+np.array([-100,0.5,1,1.5,2,200])*atr

grid_percent=float(pd.cut([close],band,labels=[1,0.75,0.5,0.25,0])[0])*percent

#选择现有百分比和区间百分比中较小的值(避免开仓)

target_percent=np.minimum(money/context.account().cash['nav'],grid_percent)

iftarget_percent!=1.0:

order_target_percent(symbol=symbol,percent=target_percent,order_type=OrderType_Market,

position_side=PositionSide_Short)

print(symbol,'市价单平空仓到比例:',target_percent)if__name__=='__main__':

'''

strategy_id策略ID,由系统生成

filename文件名,请与本文件名保持一致

mode实时模式:MODE_LIVE回测模式:MODE_BACKTES

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论