聚宽量化(一)

学习量化还是不能太着急,首先心要静,熟悉一个平台,书写一个简单策略,也甭管这个策略有没有用,最主要的还是先熟悉平台。

熟悉一个平台包括以下几个方面:首先就是API文档,其次是会阅读API文档,调用函数,这看似好像也挺简单的,但是我也不知道为什么这看似简单的东西对我来说如此艰难,我有点怀疑自己的阅读能力。

不过,记录怀疑时候的自己,看起来也挺美妙的,毕竟时间也一天天过去,也不管是否在怀疑自己。

首先,试着编写第一个策略:

# 导入函数库
from jqdata import *

# 初始化函数,设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 过滤掉order系列API产生的比error级别低的log
    # log.set_level('order', 'error')
    
    ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    ## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)
      # 开盘前运行
    #run_daily(before_market_open, time='before_open', reference_security='000300.XSHG') 
      # 开盘时或每分钟开始时运行
    #相当于主函数的作用,用来调用其他函数,time类似一个定时器
    run_daily(market_open, time='every_bar', reference_security='000300.XSHG')
      # 收盘后运行
    #run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    
    g.stocksnum=10
    
    g.day=0
    
    g.period=7
    
    
    
    
## 开盘前运行函数     
def before_market_open(context):
    pass

# 设定停牌
def stock_filter(stock_list,del_paused,del_st,del_delist,del_hl):
    
    current_data=get_current_data()
    
    if del_paused:
        stock_list = [stock for stock in stock_list if not current_data[stock].paused]
        
     if del_st:  # 删除ST
        stock_list = [stock for stock in stock_list if not current_data[stock].is_st]

    if del_delist:  # 删除退市
        stock_list = [stock for stock in stock_list if not '退' in current_data[stock].name]

    if del_hl:  # 删除涨停
        stock_list = [stock for stock in stock_list if not current_data[stock].day_open >= current_data[stock].high_limit]
    
    return stock_list
    
    
    
## 开盘时运行函数
def market_open(context):
    
    if g.day % g.period ==0:
        scu=get_index_stocks('000001.XSHG')+get_index_stocks('399106.XSHE')
       
        
        q=query(valuation.code).filter(valuation.code.in_(scu)).order_by(
            
            valuation.market_cap.asc()
            ).limit(g.stocksnum)
        
        df = get_fundamentals(q)
    
        
        buylist=list(df['code'])
        
        #print(buylist)
        for stock in context.portfolio.positions:
            
            cost=context.portfolio.positions[stock].avg_cost
            price=context.portfolio.positions[stock].price
            
            ret=price/cost -1
            print(stock)
            if stock not in buylist:
                order_target(stock,0)
else:
         # 设定收益率 if ret>0.5: order_target(stock,0)   # 设置止损率 elif ret<-0.1: order_tar position_per_stk=context.portfolio.cash/g.stocksnum for stock in buylist: order_value(stock,position_per_stk) g.day+=1 ## 收盘后运行函数 def after_market_close(context): pass

 

posted @ 2021-05-08 17:09  小新分身  阅读(853)  评论(0)    收藏  举报