聚宽量化(一)
学习量化还是不能太着急,首先心要静,熟悉一个平台,书写一个简单策略,也甭管这个策略有没有用,最主要的还是先熟悉平台。
熟悉一个平台包括以下几个方面:首先就是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
因为经常熬夜,所以我的肝好像不太好,你可以叫我小心肝吗?

浙公网安备 33010602011771号