麻烦看看,BigQuant可否提供港股传统策略的回测代码例子


(zrld) #1

Can’t instantiate abstract class HKExchangeCalendar with abstract methods trading_sections

自己写为啥总有上述错误无法运行


(zrld) #2

@iQuant


(iQuant) #3

您好,问题已经解决,您可以再运行一下。

克隆策略

金叉死叉策略

当短期均线上穿长期均线,出现金叉,买入

当短期均线下穿长期均线,出现死叉,卖出

1. 主要参数

In [1]:
# 股票选择
instruments = ['0700.HKEX']  
# 开始时间
start_date = '2012-05-29'  
# 结束时间
end_date = '2017-11-08'

2. 策略回测主体

In [2]:
# 初始化账户
def initialize(context):
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) # 设置手续费,买入成本为万分之三,卖出为千分之1.3
    context.short_period = 5 # 短期均线
    context.long_period = 50 # 长期均线 

def handle_data(context, data):
    
    # 长期均线值要有意义,需要在50根k线之后
    if context.trading_day_index <  context.long_period:   
        return
    
    k = instruments[0] # 标的为字符串格式
    sid = context.symbol(k) # 将标的转化为equity格式
    price = data.current(sid, 'price') # 最新价格
 
    short_mavg = data.history(sid, 'price',context.short_period, '1d').mean() # 短期均线值
    long_mavg = data.history(sid, 'price',context.long_period, '1d').mean() # 长期均线值

    cash = context.portfolio.cash  # 现金
    cur_position = context.portfolio.positions[sid].amount # 持仓
    
    # 交易逻辑
    # 如果短期均线大于长期均线形成金叉,并且没有持仓,并且该股票可以交易
    if short_mavg > long_mavg and cur_position == 0 and data.can_trade(sid):  
        context.order(sid, int(cash/price/100)*100) # 买入
    # 如果短期均线小于长期均线形成死叉,并且有持仓,并且该股票可以交易
    elif short_mavg < long_mavg and cur_position > 0 and data.can_trade(sid):  
        context.order_target_percent(sid, 0) # 全部卖出
     

3.回测接口

In [3]:
m=M.trade.v3(
    instruments=instruments,
    start_date=start_date,
    end_date=end_date,
    initialize=initialize,
    handle_data=handle_data,
    order_price_field_buy='open', # 以开盘价买入
    order_price_field_sell='open', # 以开盘价卖出
    capital_base=1000000,# 本金
    benchmark='HSI.HKEX'
    )
[2018-01-09 16:02:59.963691] INFO: algo: set price type:backward_adjusted
[2018-01-09 16:03:21.667930] INFO: Performance: Simulated 1343 trading days out of 1343.
[2018-01-09 16:03:21.669684] INFO: Performance: first open: 2012-05-29 01:30:00+00:00
[2018-01-09 16:03:21.670917] INFO: Performance: last close: 2017-11-08 08:00:00+00:00
  • 收益率427.06%
  • 年化收益率36.6%
  • 基准收益率53.76%
  • 阿尔法0.3
  • 贝塔0.64
  • 夏普比率1.47
  • 胜率0.75
  • 盈亏比3.191
  • 收益波动率21.93%
  • 信息比率1.4
  • 最大回撤21.1%


策略研究常用功能
(Vinsan) #4

成交價是不是出了問題?
都上千了


(小Q) #5

因为这个策略是后复权价格啊。
如果想设置为前复权价格或者真实交易价格,可以参考:链接


(Vinsan) #6

謝謝,請問加上一手(如1000股為1手)做交易單位又要怎做呢?