聚宽源码45

原文策略源码如下:
#HS300–随机森林拐点识别
import math
import numpy as np
import pandas as pd
from pandas import DataFrame,Series
import pickle
import time
import datetime
import jqdata
import talib as tb
import sklearn
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostClassifier,GradientBoostingClassifier,RandomForestRegressor,RandomForestClassifier
from sklearn import cross_validation, metrics,svm,preprocessing
from sklearn.metrics import mean_squared_error
from sklearn.cross_validation import train_test_split
from sklearn.grid_search import GridSearchCV
from sklearn.svm import SVR
from sklearn.externals import joblib
from sklearn.model_selection import learning_curve
from sklearn.linear_model import LinearRegression
‘’’
二八小市值择时买卖

配置指定频率的调仓日,在调仓日每日指定时间,计算沪深300指数和中证500指数当前的20日涨
幅,如果2个指数的20日涨幅有一个为正,则进行选股调仓,之后如此循环往复。

止损策略:

大盘止损:(可选)
    1. 每分钟取大盘前130日的最低价和最高价,如果最高大于最低的两倍则清仓,停止交易。
    2. 每分钟判断大盘是否呈现三只黑鸦止损,如果是则当天清仓并停止交易,第二天停止交
       易一天。

个股止损:(可选)
    每分钟判断个股是否从持仓后的最高价回撤幅度,如果超过个股回撤阈值,则平掉该股持仓

二八止损:(必需)
    每日指定时间,计算沪深300指数和中证500指数当前的20日涨幅,如果2个指数涨幅都为负,
    则清仓,重置调仓计数,待下次调仓条件满足再操作

‘’’
from six import StringIO
import tradestat
#import ind
from ind import *
#from blacklist import *

blacklist.py

建议在研究里建立文件blacklist.py,然后将这段代码拷贝进blacklist.py

模拟运行的时候只需要更新研究里的数据即可,这样可在不修改模拟运行代码的情况下

修改黑名单

配置股票黑名单

列出当且极不适宜购买的股票

注:1. 黑名单有时效性,回测的时候最好不使用,模拟交易建议使用

2. 用一模块或者大数据分析收集这类股票,定时更新

def get_blacklist():
# 黑名单一览表,更新时间 2016.7.10 by 沙米
# 科恒股份、太空板业,一旦2016年继续亏损,直接面临暂停上市风险
blacklist = [“600656.XSHG”,“300372.XSHE”,“600403.XSHG”,“600421.XSHG”,“600733.XSHG”,“300399.XSHE”,
“600145.XSHG”,“002679.XSHE”,“000020.XSHE”,“002330.XSHE”,“300117.XSHE”,“300135.XSHE”,
“002566.XSHE”,“002119.XSHE”,“300208.XSHE”,“002237.XSHE”,“002608.XSHE”,“000691.XSHE”,
“002694.XSHE”,“002715.XSHE”,“002211.XSHE”,“000788.XSHE”,“300380.XSHE”,“300028.XSHE”,
“000668.XSHE”,“300033.XSHE”,“300126.XSHE”,“300340.XSHE”,“300344.XSHE”,“002473.XSHE”]
return blacklist

def before_trading_start(context):
cur_time = context.previous_date
cur_time = datetime.datetime.strftime(cur_time,’%Y-%m-%d’)

print(g.data_.index[0],cur_time)
print(g.data_.index[0]==cur_time)
g.stocks = g.data_.where(g.data_==1).loc[cur_time,:].dropna(axis = 0).index.values

def after_trading_end(context):
#log.info("==> after trading end @ %s", str(context.current_dt))
g.trade_stat.report(context)

reset_day_param()

# 得到当前未完成订单
orders = get_open_orders()
for _order in orders.values():
    log.info("canceled uncompleted order: %s" %(_order.order_id))
pass

def initialize(context):
log.info("==> initialize @ %s", str(context.current_dt))

# 设置手续费率
set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
# 设置基准指数:沪深300指数 '000300.XSHG'
set_benchmark('000300.XSHG')
# 设定滑点为百分比
# 没有调用set_slippage函数, 系统默认的滑点是PriceRelatedSlippage(0.00246)
#set_slippage(PriceRelatedSlippage(0.004))
# 使用真实价格回测(模拟盘推荐如此,回测请注释)
set_option('use_real_price', True)

# 加载统计模块
g.trade_stat = tradestat.trade_stat()

# 配置策略参数
# 此配置主要为之前的小市值策略,保证之前的收益回撤
# 如果想要更改,最好新建个函数,调整参数测试其他策略
set_param()
# 调仓日计数器,单位:日
g.day_count = 0
# 缓存股票持仓后的最高价
g.last_high = {}
#定义股票池
# 如下参数不能更改
if g.is_market_stop_loss_by_price:
    # 记录当日是否满足大盘价格止损条件,每日盘后重置
    g.is_day_stop_loss_by_price = False

# 缓存三黑鸦判断状态
g.is_last_day_3_black_crows = False
if g.is_market_stop_loss_by_3_black_crows:
    g.cur_drop_minute_count = 0

if g.is_rank_stock:
    if g.rank_stock_count > g.pick_stock_count:
        g.rank_stock_count = g.pick_stock_count

if g.is_stock_stop_loss or g.is_stock_stop_profit:
    # 缓存当日个股250天内最大的3日涨幅,避免当日反复获取,每日盘后清空
    g.pct_change = {}

if g.is_market_stop_loss_by_28_index:
    g.minute_count_28index_drop = 0

if g.is_equity_curve_protect:
    # 记录当日是否满足资金曲线保护条件,每日盘后重置
    g.is_day_curve_protect = False
g.time1 = time.time()
file = StringIO(read_file('pre_result_csv.csv'))
#print(StringIO(file))
g.data_ = pd.read_csv(file,index_col = 0)
# 打印策略参数
log_param()

def set_param():
# 调仓频率,单位:日
g.period = 3
# 配置调仓时间(24小时分钟制)
g.adjust_position_hour = 14
g.adjust_position_minute = 50
# 配置选股参数

# 备选股票数目
g.pick_stock_count = 100

# 配置选股参数
# 是否根据PE选股
g.pick_by_pe = False
# 如果根据PE选股,则配置最大和最小PE值
if g.pick_by_pe:
    g.max_pe = 200
    g.min_pe = 0

# 是否根据EPS选股
g.pick_by_eps = False
# 配置选股最小EPS值
if g.pick_by_eps:
    g.min_eps = 0

# 配置是否过滤创业板股票
g.filter_gem = False
# 配置是否过滤黑名单股票,回测建议关闭,模拟运行时开启
g.filter_blacklist = False

# 是否对股票评分
g.is_rank_stock = False
if g.is_rank_stock:
    # 参与评分的股票数目
    g.rank_stock_count = 20

# 买入股票数目
g.buy_stock_count = 5

# 配置二八指数
#g.index2 = '000300.XSHG'  # 沪深300指数,表示二,大盘股
#g.index8 =
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值