照着教程写了个金叉死叉策略


(yhzhao) #1

主要参数

#股票代号
instruments = ['002594.SZA']  
#开始日期
start_date = '2015-02-01'   
#结束日期
end_date = '2017-02-08'

回测主体

def initialize(context):
    #购买费用万三,卖出费用千分之1.3,每次最少5元
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
    #短期看7天
    context.short_period = 7
    #长期看30天
    context.long_period = 30
​
​
def handle_data(context, data):
    #确保平均值计算所需数据都存在
    if context.trading_day_index <  context.long_period:
        return
    #根据股票代号转换成系统内部的id
    sid = context.symbol(instruments[0])
    #今天的价格
    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  
    
    #短期平均值超过长期平均值买买买,100股一手
    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.backtest.v5(
    instruments=instruments,
    start_date=start_date,
    end_date=end_date,
    initialize=initialize,
    handle_data=handle_data,
    # 不考虑会带来冲击成本
    volume_limit=0,  
    # 开盘买入
    order_price_field_buy='open',
    # 开盘卖出
    order_price_field_sell='open',
    # 原始资金 10万
    capital_base=float("1.0e5"),
    )

试了下比亚迪这股票最近两年的数据,收益率是负的。。。

看起来赚钱没那么简单~~


(神龙斗士) #2

代码写的很漂亮,加油


(master) #3

文章写的简单清晰,非常棒!