下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
海龟交易法策略(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 效果图制作合同模板范本2篇
- 文具采购的合同范本3篇
- 探究采购订单与采购合同的区别3篇
- 房屋买卖合同补充协议内容3篇
- 安徽林业行业劳动合同模板3篇
- 房屋买卖合同解除的解除合同法律问题3篇
- 工业用地买卖合同范本3篇
- 市政工作市民意见3篇
- 放弃保证书中的放弃条件解读3篇
- 房屋买卖合同解除协议书样本3篇
- 露营项目计划书
- 体育教练员培训方案
- (完整版)金融市场基础知识知识点归纳-图文
- 2023年中考语文二轮复习:书法鉴赏 真题练习题汇编(含答案解析)
- 家庭年终总结及明年计划
- 江西省南昌市2023-2024学年七年级上学期期末生物试卷
- 《城市道路工程设计规范》宣贯课件
- 乡镇医疗机构卫生监督检查要点
- 初中数学项目化学习初探一以“池塘里有多少条鱼”为例
- 化工行业基础知识培训
- 国开(新)(本)《古代诗歌散文专题》历届5年期末考试题及答案
评论
0/150
提交评论