全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
2275 1
2015-11-28
平台JoinQuant(https://www.joinquant.com/

乖离率(BIAS)是测量股价偏离均线大小程度的指标,简称Y值。其主要思想认为,当股价偏离市场平均成本太大时,股价会有一个回归的过程,即价格过高会降低,价格过低会上升。

计算方法
N期BIAS=(当日收盘价-N期平均收盘价)/N期平均收盘价*100%

主要变化
加入了多股票方法,每个单位时间内循环访问每个股票。
加入了仓位管理,将资金平均分配给每个股票,每个股票依然只能是进行满仓空仓操作。
加入了止损,每只股票亏损超过20%,则止损。
加入了胜率统计,在卖的时候判断,盈利则成功,亏损则失败,胜率算法为,成功次数除以成功与失败之和。在日志里输出,此次的胜率是64%。
去除了bias值与股价的对比图,因为是多股票。

改进方向
参数优化
加仓减仓功能
股票资金分配优化


bias
# 定义一个全局变量, 保存要操作的证券
def initialize(context):
    #  选择股票
    context.stocks = ['601328.XSHG&#  39;,'600036.XSHG&#  39;,'600196.XSHG&#  39;,'600010.XSHG&#  39;]
    set_universe(context.stocks)
    #平均分配股票的可用资金
    g.max_use_cash=context.portfolio.cash/len(context.stocks)
    #  设置变量,记录操作成功与失败次数
    g.win=0.0
    g.lose=0.0

# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_data(context, data):
   
    #   循环股票池
    for security in context.stocks:
        # 得到该股票当前价格
        current_price = data[security].price
        #  得到十三日均价
        avg = data[security].mavg(13)
        #计算bias值
        bias = (current_price-avg)/avg
        #  计算持仓成本
        current_avgcost = context.portfolio.positions[security].avg_cost
        #计算当前股票的盈利状况
        if context.portfolio.positions[security].amount > 0:
            r_ratio=(current_price-current_avgcost)/current_avgcost
        else:
            r_ratio=0
        
        #   如果bias值小于-0.06,且仓位为空,则买入
        if bias < -0.06 and context.portfolio.positions[security].amount == 0:
            # 计算可以买多少只股票
            amount = int(g.max_use_cash / current_price)
            #   下入买入单
            order(security, amount)
        # 如果bias值大于0.06,且仓位非空,则卖出
        elif (r_ratio<-0.2 or bias > 0.06) and context.portfolio.positions[security].amount > 0:
            #   卖出所有股票,使这只股票的最终持有量为0
            orderfail=order_target(security, 0)
            
            if orderfail!=None:#防止订单无效,如停牌、没钱买等
            #  统计胜率
                if r_ratio > 0:
                    g.win=g.win+1;
                else:
                    g.lose=g.lose+1;
    #计算操作次数
    times=g.win+g.lose
    #  取得当前时间
    date = context.current_dt.strftime("%Y-%m-%d&# 34;)
    #在最后一个单位时间,在日志中输出成功次数,失败次数,与胜率
    if times>0 and date==&#  39;2015-09-30':
        print(g.win,g.lose,g.win/times)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-11-28 15:12:52
顶一顶顶一顶顶一顶
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群