2360.【深度解析 二】资产负债与ROA模型 44328

# 标题:【深度解析 二】资产负债与ROA模型

# 导入函数库
from   jqdata import *
import warnings


# 初始化函数,设置基准等等
# context 是由系统维护的上下文环境
# 包含买入均价、持仓情况、可用资金等资产组合相关信息
def initialize(context):
    
    # 设置的滑点较高(不设置滑点的话用默认的0.00246)
    set_slippage(FixedSlippage(0.02))
    
    # 设置沪深300股指作为基准
    # 如果不设置,默认的基准也是沪深300股指
    set_benchmark('000300.XSHG') 
    
    # 开启动态复权模式(使用真实价格)
    set_option('use_real_price', True)
    
    # 避免使用未来数据
    set_option('avoid_future_data', True)
    
    # 过滤掉order系列API产生的比error级别低的log
    # 默认是 'debug' 参数。最低的级别,日志信息最多
    # 系统推荐尽量使用'debug'参数或不显式设置,方便找出所有错误
    log.set_level('order', 'error')
    
    # 过滤 'ignore' 级别的警告信息
    warnings.filterwarnings('ignore')


    # g. 开头的是全局变量
    # 一经声明整个程序都可以使用
    
    # 选股参数
    
    # 最大股票持仓数量
    g.stock_num = 5
    
    # 仓位比例。计算仓位时使用
    g.position = 1  

    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣 5 元钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
     
    # 设置交易时间
    # 每个月第一个交易日,上午 10:00 调用 my_trade() 函数
    run_monthly(my_trade, monthday=1, time='10:00', reference_security='000300.XSHG')
    



# 交易函数
# 过滤、筛选、排序生成待买入股票列表
# 并根据待交易股票列表开仓或调整仓位
def my_trade(context):
    
    # 过滤:次新股,ST,ST*,退市,涨停,跌停,停牌 股票
    # 根据 资产负债率、不良资产率、优质资产周转率、ROA 增长量等财务指标过滤、排序股票
    # 生成待买入股票列表
    check_out_list = get_stock_list(context)
    
    # 在日志中输出今日准备购买的股票列表
    log.info('今日准备购买的股票:%s' % check_out_list)
    
    # 调整头寸规模
    # 卖出不再列表中的股票
    # 买入新选出的股票
    adjust_position(context, check_out_list)

关键函数解锁后查看:


# 调整仓位
# 第一次全仓买入股票
# 之后,每次卖出不在列表中的过时股票
# 买入新选出来的股票
def adjust_position(context, buy_stocks):

    # 遍历当前持仓的每只股票
    # 如果这只股票不在买入列表中就全部清仓
    for stock in context.portfolio.positions:
        if stock not in buy_stocks:
            order_target(stock, 0)
        
    # 获取当前资产组合中持仓数量
    position_count = len(context.portfolio.positions)
    
    # 如果最大持仓量大于现有持仓量,说明还有买入空间
    if g.stock_num > position_count:
        
        # 资产组合中剩余现金除以准备买入的股票数量
        # 平均分配剩余资金
        value = context.portfolio.cash * g.position / (g.stock_num - position_count)
        
        # 遍历待买入列表中的每一只股票
        for stock in buy_stocks:
            
            # 如果这只股票不在持仓列表中就买入 value 额度
            if stock not in context.portfolio.positions:
                order_target_value(stock, value)
                
                # 如果持仓列表长度等于最大持仓量,说明已经买够股票
                # 直接跳出循环
                if len(context.portfolio.positions) == g.stock_num:
                    break
2025-02-23
⚠️
本站资源大多来自网络,仅供网友学习交流,未经作者或上传书面授权,请勿作他用。
站长 vx: xiangyin615 或者 留言反馈 ,我们将尽快处理。
Notice: When you of the legal rights be violate, please stir to vx: xiangyin615
个人中心
购物车
优惠劵
搜索