使用京东量化平台做中小市值策略选股

差不多是去年中旬,京东上线了一个股票量化平台,当然现在有很多这样的平台了(joinquant,uqer 等等),京东比他们多的一个优势就是,多提供了京东平台的大数据,这些销售数据可以间接反映出部分企业的市场数据。

最近,一行三会联手金融反腐,试图把投资者逼回价值投资的轨道,那么什么是价值投资呢,大多数人对企业的财务信息不甚了了,没兴趣也看不懂企业那些财务报表(大多数都是造假的数据),怎么在几千只股票中寻找到有价值的企业呢?

下面这段程序是一个小市值的选股策略,开发语言是python,京东也提供了java的支持,不过我还是较喜欢python的简洁,基本思路是,选取中小板中市现率为正的股票,若rsi 指数出现 向上穿插则买入,若上证50指数和中正指数同时回落,则平仓,交易时间为收盘前10分钟。

文章仅提供一个思路,我已添加注释,若对文章中出现的财务指标,技术指标,函数不清楚的,请自行学习,不要问我,因为我没时间回答你。。。

量化策略交易,不可证伪,客官请自重。

import numpy as np
import pandas as pd
import talib

#初始化函数
def init(context):
    #滑点默认值为2‰
    context.set_slippage(0.002)
    #交易费默认值为0.25‰
    context.set_commission(0.00025)
    context.t=1.01
    #000985.SH  中证全指    中证全指指数  由剔除掉ST、*ST、暂停上市股票,以及上市时间不足3个月等股票后的剩余沪深A股股票构成样本股。
    context.zzind='000985.SH'
    # 000016.SH 上证50    上证50指数          挑选沪市规模大、流动性好的最具代表性的50只股票组成样本股,以综合反映沪市最具市场影响力的一批龙头企业的整体状况。
    context.szind = '000016.SH'
    #399333.SZ  中小板R    中小板指数(收益)   指数样本与中小板100P相同
    context.zxind = '399333.SZ'
    task.daily(handle, time_rule=market_close(minute=10))

#选股函数
def stockSelsel(date):
    # pcf_ratio_ocfttm  市现率(PCF,经营现金流TTM)   每股市价为过去12个月每股经营性现金流的倍数  市现率(PCF,经营现金流TTM)= (在指定交易日期的最新收盘价*当日人民币外汇牌价×截至当日公司总股本)/经营活动产生的现金流量(TTM) =总市值/连续四个季度的经营现金流;连续四季度:当期+(上年年报-上年同期)
    p = query(
            fundamentals.equity_valuation_indicator.pcf_ratio_ocfttm
                ).filter(
            fundamentals.equity_valuation_indicator.pcf_ratio_ocfttm > 0
        ).order_by(
            fundamentals.equity_valuation_indicator.market_cap_2.asc()
        ).limit(20)
    # get_fundamentals  财务数据选股 返回DataFrame对象
    # dropna 返回一个仅含非空数据和索引值的 Series
    df = get_fundamentals(p , date); df=df.dropna(axis=1)
    return df.columns.values

def rsi(s,date):
    #返回30天的股票价格散列数据
    d = get_history(30, '1d', 'close')[s]
    d = d.values;
    #计算RSi值
    rsi6 = talib.RSI(d, timeperiod=6);rsi12=talib.RSI(d, timeperiod=12);rsi24=talib.RSI(d, timeperiod=24)
    return [rsi6[-1],rsi12[-1],rsi24[-1]]

def handle(context, data_dict):
    date = context.now
    #get_index_constituents 获取指数成份股
    sl = get_index_constituents(context.zzind)
    
    #取指标成分股过去20天的收盘价格
    ds1 = get_history(20,'1d','close')[context.zzind].values
    ds2 = get_history(20,'1d','close')[context.zxind].values
   
    #data_dict 存储了所选股票TradeData对象的属性    股票实时行情数据信息都存储在该参数中
    ps1 = data_dict[context.zzind].last/ds1[0]
    ps2 = data_dict[context.zxind].last/ds2[0]
    
    if ps1 < context.t and ps2 < context.t :
        for i in context.portfolio.positions.keys():
            # 调整持仓到期望的市值,0 即为清仓
            order_target_value(i,0)
    else:
        l = stockSelsel(date)
        x=[];xl=[]
        for i in l:
            if i in sl:
                r=rsi(i,date)
                try:
                    if not(r[0]

你可能感兴趣的:(使用京东量化平台做中小市值策略选股)