例如采用‘EPS’ 选股,选排名前10的买入。根据策略成交记录基本上都是在每个季度的第一个交易日买入,例如在4月1号买入一季度排名前10的 ‘EPS' ,而实际上一季度的 'EPS’ 一般都是要到4月底才出来。而策略却在4月1号就买入股票了。
# 可以自己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
原来是这样的