买入并持有策略(buy_and_hold)

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

(小马哥) #1
克隆策略
In [23]:
instruments = ['600519.SHA', '000001.SZA', '000002.SZA']  
start_date = '2017-05-28'  
end_date = '2017-07-18'
bench_mark = '000300.SHA'

def initialize(context):
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) # 设置手续费
    context.date_record = {}

def handle_data(context, data):
    
    for k in instruments:
        sid = context.symbol(k) # 将标的转化为equity格式
        if  context.trading_day_index == 0:
            context.order(sid, 100) # 买入
            # 记录买入时间
            context.date_record[k] = int(context.trading_day_index)
        
    # 打印持仓时间
    for j in instruments:
        hold_days = context.trading_day_index - context.date_record[j] 
        print('股票: ', j, '持仓时间: ', hold_days)
        
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='close',
    benchmark='000300.SHA',
    capital_base=1000000,
    )  
        
[2017-09-10 21:09:30.827807] INFO: bigquant: backtest.v7 开始运行..
股票:  600519.SHA 持仓时间:  0
股票:  000001.SZA 持仓时间:  0
股票:  000002.SZA 持仓时间:  0
股票:  600519.SHA 持仓时间:  1
股票:  000001.SZA 持仓时间:  1
股票:  000002.SZA 持仓时间:  1
股票:  600519.SHA 持仓时间:  2
股票:  000001.SZA 持仓时间:  2
股票:  000002.SZA 持仓时间:  2
股票:  600519.SHA 持仓时间:  3
股票:  000001.SZA 持仓时间:  3
股票:  000002.SZA 持仓时间:  3
股票:  600519.SHA 持仓时间:  4
股票:  000001.SZA 持仓时间:  4
股票:  000002.SZA 持仓时间:  4
股票:  600519.SHA 持仓时间:  5
股票:  000001.SZA 持仓时间:  5
股票:  000002.SZA 持仓时间:  5
股票:  600519.SHA 持仓时间:  6
股票:  000001.SZA 持仓时间:  6
股票:  000002.SZA 持仓时间:  6
股票:  600519.SHA 持仓时间:  7
股票:  000001.SZA 持仓时间:  7
股票:  000002.SZA 持仓时间:  7
股票:  600519.SHA 持仓时间:  8
股票:  000001.SZA 持仓时间:  8
股票:  000002.SZA 持仓时间:  8
股票:  600519.SHA 持仓时间:  9
股票:  000001.SZA 持仓时间:  9
股票:  000002.SZA 持仓时间:  9
股票:  600519.SHA 持仓时间:  10
股票:  000001.SZA 持仓时间:  10
股票:  000002.SZA 持仓时间:  10
股票:  600519.SHA 持仓时间:  11
股票:  000001.SZA 持仓时间:  11
股票:  000002.SZA 持仓时间:  11
股票:  600519.SHA 持仓时间:  12
股票:  000001.SZA 持仓时间:  12
股票:  000002.SZA 持仓时间:  12
股票:  600519.SHA 持仓时间:  13
股票:  000001.SZA 持仓时间:  13
股票:  000002.SZA 持仓时间:  13
股票:  600519.SHA 持仓时间:  14
股票:  000001.SZA 持仓时间:  14
股票:  000002.SZA 持仓时间:  14
股票:  600519.SHA 持仓时间:  15
股票:  000001.SZA 持仓时间:  15
股票:  000002.SZA 持仓时间:  15
股票:  600519.SHA 持仓时间:  16
股票:  000001.SZA 持仓时间:  16
股票:  000002.SZA 持仓时间:  16
股票:  600519.SHA 持仓时间:  17
股票:  000001.SZA 持仓时间:  17
股票:  000002.SZA 持仓时间:  17
股票:  600519.SHA 持仓时间:  18
股票:  000001.SZA 持仓时间:  18
股票:  000002.SZA 持仓时间:  18
股票:  600519.SHA 持仓时间:  19
股票:  000001.SZA 持仓时间:  19
股票:  000002.SZA 持仓时间:  19
股票:  600519.SHA 持仓时间:  20
股票:  000001.SZA 持仓时间:  20
股票:  000002.SZA 持仓时间:  20
股票:  600519.SHA 持仓时间:  21
股票:  000001.SZA 持仓时间:  21
股票:  000002.SZA 持仓时间:  21
股票:  600519.SHA 持仓时间:  22
股票:  000001.SZA 持仓时间:  22
股票:  000002.SZA 持仓时间:  22
股票:  600519.SHA 持仓时间:  23
股票:  000001.SZA 持仓时间:  23
股票:  000002.SZA 持仓时间:  23
股票:  600519.SHA 持仓时间:  24
股票:  000001.SZA 持仓时间:  24
股票:  000002.SZA 持仓时间:  24
股票:  600519.SHA 持仓时间:  25
股票:  000001.SZA 持仓时间:  25
股票:  000002.SZA 持仓时间:  25
股票:  600519.SHA 持仓时间:  26
股票:  000001.SZA 持仓时间:  26
股票:  000002.SZA 持仓时间:  26
股票:  600519.SHA 持仓时间:  27
股票:  000001.SZA 持仓时间:  27
股票:  000002.SZA 持仓时间:  27
股票:  600519.SHA 持仓时间:  28
股票:  000001.SZA 持仓时间:  28
股票:  000002.SZA 持仓时间:  28
股票:  600519.SHA 持仓时间:  29
股票:  000001.SZA 持仓时间:  29
股票:  000002.SZA 持仓时间:  29
股票:  600519.SHA 持仓时间:  30
股票:  000001.SZA 持仓时间:  30
股票:  000002.SZA 持仓时间:  30
股票:  600519.SHA 持仓时间:  31
股票:  000001.SZA 持仓时间:  31
股票:  000002.SZA 持仓时间:  31
股票:  600519.SHA 持仓时间:  32
股票:  000001.SZA 持仓时间:  32
股票:  000002.SZA 持仓时间:  32
股票:  600519.SHA 持仓时间:  33
股票:  000001.SZA 持仓时间:  33
股票:  000002.SZA 持仓时间:  33
股票:  600519.SHA 持仓时间:  34
股票:  000001.SZA 持仓时间:  34
股票:  000002.SZA 持仓时间:  34
[2017-09-10 21:09:31.573399] INFO: Performance: Simulated 35 trading days out of 35.
[2017-09-10 21:09:31.585158] INFO: Performance: first open: 2017-05-31 13:30:00+00:00
[2017-09-10 21:09:31.586059] INFO: Performance: last close: 2017-07-18 19:00:00+00:00
  • 收益率8.68%
  • 年化收益率82.06%
  • 基准收益率5.37%
  • 阿尔法0.34
  • 贝塔1.05
  • 夏普比率4.32
  • 收益波动率17.95%
  • 信息比率2.58
  • 最大回撤5.2%
[2017-09-10 21:09:31.921717] INFO: bigquant: backtest.v7 运行完成[1.093887s].

(ylrh3) #2

bench_mark 啥意思


(ylrh3) #3

我想输出买入价格和持仓那天的收盘价格,怎么写Print


(iQuant) #4

主要是这几句代码:

price = data.current(sid, 'price') # 最新价格
cur_position = context.portfolio.positions[sid].amount # 持仓数量
cur_cost = context.portfolio.positions[sid].cost_basis # 持仓成本
print('日期: ',data.current_dt, '最新价格: ', price, '持仓数量: ', cur_position, '持仓成本: ', cur_cost)
克隆策略
In [7]:
instruments = ['600519.SHA']  
start_date = '2017-05-28'  
end_date = '2017-08-18'

def initialize(context):
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) # 设置手续费
    context.short_period = 5 # 短期均线
    context.long_period = 50 # 长期均线 

def handle_data(context, data):
    
    if context.trading_day_index <  context.long_period:  # 长期均线值要有意义,需要在50根k线之后
        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 # 持仓数量
    cur_cost = context.portfolio.positions[sid].cost_basis # 持仓成本
    
    print('日期: ',data.current_dt, '最新价格: ', price, '持仓数量: ', cur_position, '持仓成本: ', cur_cost)
    
    # 交易逻辑
    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) # 全部卖出
     
m=M.trade.v2(
    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,
    )        
[2017-09-23 13:41:55.798418] INFO: bigquant: backtest.v7 开始运行..
日期:  2017-08-09 19:00:00+00:00 最新价格:  3490.37 持仓数量:  0 持仓成本:  0.0
日期:  2017-08-10 19:00:00+00:00 最新价格:  3495.91 持仓数量:  200.0 持仓成本:  3493.12086528
日期:  2017-08-11 19:00:00+00:00 最新价格:  3442.08 持仓数量:  200.0 持仓成本:  3493.12086528
日期:  2017-08-14 19:00:00+00:00 最新价格:  3554.22 持仓数量:  200.0 持仓成本:  3493.12086528
日期:  2017-08-15 19:00:00+00:00 最新价格:  3526.77 持仓数量:  200.0 持仓成本:  3493.12086528
日期:  2017-08-16 19:00:00+00:00 最新价格:  3530.47 持仓数量:  200.0 持仓成本:  3493.12086528
日期:  2017-08-17 19:00:00+00:00 最新价格:  3503.45 持仓数量:  200.0 持仓成本:  3493.12086528
日期:  2017-08-18 19:00:00+00:00 最新价格:  3481.83 持仓数量:  200.0 持仓成本:  3493.12086528
[2017-09-23 13:41:57.373084] INFO: Performance: Simulated 58 trading days out of 58.
[2017-09-23 13:41:57.377984] INFO: Performance: first open: 2017-05-31 13:30:00+00:00
[2017-09-23 13:41:57.379388] INFO: Performance: last close: 2017-08-18 19:00:00+00:00
  • 收益率-0.23%
  • 年化收益率-0.98%
  • 基准收益率7.02%
  • 阿尔法-0.1
  • 贝塔0.17
  • 夏普比率-0.97
  • 收益波动率5.59%
  • 信息比率-3.39
  • 最大回撤1.43%
[2017-09-23 13:41:57.832964] INFO: bigquant: backtest.v7 运行完成[2.034512s].