以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  python引用财务数据选股有明显的未来数据  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=170606)

--  作者:qweoo123456
--  发布时间:2019/6/23 12:04:35
--  python引用财务数据选股有明显的未来数据

例如采用‘EPS’ 选股,选排名前10的买入。根据策略成交记录基本上都是在每个季度的第一个交易日买入,例如在4月1号买入一季度排名前10的 ‘EPS\' ,而实际上一季度的 \'EPS’ 一般都是要到4月底才出来。而策略却在4月1号就买入股票了。


--  作者:yukizzc
--  发布时间:2019/6/24 9:38:29
--  
这个并不会,我们是按照发布日期去对齐k时间的,你4月1号取的时候是取的上一季度的数据,4月底后才可以取到第一季度的
--  作者:qweoo123456
--  发布时间:2019/6/24 10:29:54
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190624102750.png
图片点击可在新窗口打开查看

--  作者:qweoo123456
--  发布时间:2019/6/24 10:34:22
--  
思维例控一季报是在4月29日发布的,而买入日期却是在4月1日,其他基本如此
--  作者:qweoo123456
--  发布时间:2019/6/24 10:48:31
--  

# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

#比较简单的根据市盈率做的策略,只选取排名前几的进行轮动调仓。
#使用前注意补充好300样本股历史数据及专业财务数据
#推荐使用000001上证指数做基准合约

import time
import os
import csv
import numpy as np
import talib as ta

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    #买入的股票数
    context.num = 10
    context.code = []
   
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    #选取300成份样本股作为股票池
    try:
        context.code = get_blocks (\'上海A股\',0)+get_blocks(\'深圳A股\',0) + get_blocks(\'深圳创业\',0)
    except:
        pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    try:
        pe = []
        code = []
        #筛选非停牌且eps大于0的票
        for i in context.code:
            close = history_bars(i, 1, \'1d\',\'close\')
            temp = fin_indicator(i,\'EPS\',1,0,0)
            if len(close)>0 and temp[-1]>0:
                code.append(i)
        #转换成市盈率
        for j in code:
            close = history_bars(j, 1, \'1d\',\'close\')
            temp = fin_indicator(j,\'EPS\',1,0,0)
            pe.append(temp[-1])
        pe_ra = np.array(pe)
        #对pe进行排序,buy_list是排名前几的股票列表
        sort = np.argsort(-pe_ra)
        code = np.array(code)
        buy_list = code[[sort[:context.num]]]
        sell_num = 0
        #获得持仓品种信息
        ho =get_portfolio_book(0)
       
        cash=get_account(19,\'\')/context.num
       
        if len(ho)>0:
            for k in ho:
                if not(k in buy_list):
                        portfolio=get_portfolio(k,0)
                        sell_close(k, \'Market\', volume=portfolio.buy_quantity)
                        sell_num = sell_num+1
        for kk in buy_list[:context.num]:
            if not(kk in ho):
                buy_open(kk, \'Market\', amount=cash)
    except:
        pass

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass
   

这是测试代码
--  作者:qweoo123456
--  发布时间:2019/6/24 13:53:46
--  
你们不查看一下问题吗?
--  作者:yukizzc
--  发布时间:2019/6/24 17:29:26
--  
三大基本表里的数据都有发布日期,取这几个是不存在未来
衍生表中很多项是要我们自己根据三个表取值后根据公式计算得出的,这张表中没有发布日期,你说的这个未来无法避免

--  作者:qweoo123456
--  发布时间:2019/6/24 19:22:22
--  

原来是这样的