海龟策略在期货市场的应用

策略分享
标签: #<Tag:0x00007fcf636d8fc8>

(Masquerade) #1

海龟策略在期货市场的应用

策略介绍:

海龟交易法是著名的公开交易系统,1983年著名的商品投机家理查德. 丹尼斯在一个交易员培训班上推广而闻名于世,它涵盖了交易系统的各个方面。其法则覆盖了交易的各个方面,并且不给交易员留下一点主观想象决策的余地。它具备一个完整的交易系统的所有成分。这个法则以及使用这个法则的人的故事被写成了一本书——《海龟交易法则》,这是一本入门量化投资的经典书籍。

策略核心

  • 掌握优势
    找到一个期望值为正的交易策略,因为从长期看,他能创造正的回报。
  • 管理风险
    控制风险,守住阵地,否则你可能等不到创造成果的一天。
  • 坚定不移
    唯有坚定不移的执行你的策略,你才能真正获得系统的成效。
  • 简单明了
    从长久看,简单的系统比复杂的系统更有生命力。

策略实现:

交易标的:橡胶1809
策略开始时间:2017-11-01
策略结束时间:2018-06-01

海龟交易的具体规则是:

当今天的收盘价大于过去20个交易日中的最高价时,以收盘价买入;
买入后,当收盘价小于过去10个交易日中的最低价时,以收盘价卖出。

克隆策略
In [2]:
import talib
import numpy as np
def initialize(context):
    # 设置是否是结算模式
    context.set_need_settle(False)
    # 设置最大杠杆
    context.set_max_leverage(1,'fill_amap')
    # 设置参数
    context.window = 20
def handle_data(context, data):
    
    if context.trading_day_index < context.window : # 在形成均线后才开始交易
        return
    
    today = data.current_dt.strftime('%Y-%m-%d') # 当前交易日期

    instrument = context.future_symbol(context.instruments[0]) # 交易标的
    curr_po = context.portfolio.positions[instrument] # 组合持仓
    curr_position = curr_po.amount # 持仓数量
    price = data.current(instrument, 'price') # 当前价格
    
    # 计算20天内最高价、最低价
    high_price = data.history(instrument, 'price', context.window, '1d').max()
    low_price = data.history(instrument, 'price', context.window, '1d').min()
    # 交易逻辑
    if price >= high_price and data.can_trade(instrument):
        context.order_target(instrument, 20) # 买入开仓
        print(today, curr_position, '买入开仓')
    elif price <= low_price and data.can_trade(instrument):
        context.order_target(instrument, -20) # 卖出开仓
        print(today, curr_position, '卖出开仓')
#启动回测
#策略回测接口: https://bigquant.com/docs/module_trade.html
m = M.trade.v3(
    instruments= ['RU1809.SHF'],
    start_date='2017-11-01',
    end_date='2018-06-01',
    initialize=initialize,
    handle_data=handle_data,
    # 买入订单以开盘价成交
    order_price_field_buy='open',
    # 卖出订单以开盘价成交
    order_price_field_sell='open',
    capital_base=1000000,
    benchmark='RU1809.SHF',
    m_deps=np.random.rand()
)
[2018-08-01 16:36:59.078118] INFO: bigquant: backtest.v7 开始运行..
[2018-08-01 16:36:59.087901] INFO: bigquant: biglearning backtest:V7.1.2
[2018-08-01 16:37:01.025092] INFO: algo: TradingAlgorithm V1.2.2
2017-12-04 0 买入开仓
2018-01-19 20 卖出开仓
2018-01-23 -20 卖出开仓
2018-01-24 -20 卖出开仓
2018-01-30 -20 卖出开仓
2018-01-31 -20 卖出开仓
2018-02-01 -20 卖出开仓
2018-02-06 -20 卖出开仓
2018-02-08 -20 卖出开仓
2018-03-19 -20 卖出开仓
2018-03-20 -20 卖出开仓
2018-03-21 -20 卖出开仓
2018-03-22 -20 卖出开仓
2018-03-23 -20 卖出开仓
2018-03-26 -20 卖出开仓
2018-04-04 -20 卖出开仓
2018-04-16 -20 卖出开仓
2018-04-17 -20 卖出开仓
[2018-08-01 16:37:02.539673] INFO: Performance: Simulated 143 trading days out of 143.
[2018-08-01 16:37:02.541444] INFO: Performance: first open: 2017-10-31 21:00:00+00:00
[2018-08-01 16:37:02.542713] INFO: Performance: last close: 2018-06-01 15:00:00+00:00
  • 收益率34.26%
  • 年化收益率68.06%
  • 基准收益率-16.99%
  • 阿尔法0.39
  • 贝塔-0.63
  • 夏普比率1.29
  • 胜率0.5
  • 盈亏比2.86
  • 收益波动率45.94%
  • 信息比率0.1
  • 最大回撤18.91%
[2018-08-01 16:37:03.257349] INFO: bigquant: backtest.v7 运行完成[4.179289s].


(zhaozhaolu) #2

克隆后无法正常使用呀!