新手不太懂,问下怎么买基金?我的代码会报错


(sunxking) #1

股票选择

instruments = [‘510050.OFA’]

开始时间

start_date = ‘2018-1-1’

结束时间

end_date = ‘2018-12-31’

初始化账户

def initialize(context):
context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) # 设置手续费,买入成本为万分之三,卖出为千分之1.3

def handle_data(context, data):
k = instruments[0] # 标的为字符串格式
sid = context.symbol(k) # 将标的转化为equity格式
price = data.current(sid, ‘price’) # 最新价格
cash = context.portfolio.cash # 现金
cur_position = context.portfolio.positions[sid].amount # 持仓

# 交易
if cur_position == 0 and data.can_trade(sid):
    context.order_target_percent(sid, 1.0) # 买入

m1=M.trade.v4(
instruments=instruments,
start_date=start_date,
end_date=end_date,
initialize=initialize,
handle_data=handle_data,
order_price_field_buy=‘open’, # 以开盘价买入
order_price_field_sell=‘open’, # 以开盘价卖出
capital_base=1000000, # 本金
benchmark=‘000300.INDX’,
m_deps=np.random.rand(),
)

报错如下:
Traceback (most recent call last)
in ()
37 capital_base=1000000, # 本金
38 benchmark=‘000300.INDX’,
—> 39 m_deps=np.random.rand(),
40 )

Exception: read empty ohlc daily data


(iQuant) #2

您好,收到您的问题,已将问题分配给策略工程师,稍后工程师会为您进行回复。


(达达) #3

看一下这个帖子 基金双均线策略


(sunxking) #4

谢谢,可以买了,但还是有个问题:
D.instruments(‘2018-01-01’,‘2018-12-31’, market=‘CN_FUND’)
打印出来的基金列表全都是OFA结尾,如:‘510050.OFA’
但用OFA买入就报错,必须换成’510050.HOF’才正常,那D.instruments岂不是返回了错误值?


(polll) #5

您可以看一下那个帖子的下面有个可视化模块版本的,建议您使用那个可视化版本策略
在可视化版本的自定义函数中,抽取数据用了新版接口DataSource(‘bar1d_CN_FUND’)调取数据,如下图所示,这样就不会出现问题了


(sunxking) #6

谢谢你回答,但我的我遇到的问题其实不是如何读历史数据,而是取基金列表的时候bigquant的接口取出来就是错的(后缀不对),你们可以自己试一下,老接口和新接口取出来的基金列表都是错的都是OFA结尾,但这个肯定不行


(达达) #7

image
使用这个基金基本信息表获取的基金代码后缀都是HOF的,这样就可以和历史数据对上了


(sunxking) #8

这个可以了,谢谢啊
提几个建议:
1、建议整理下社区目前的资源,现在很多版本的例子混在一起,各种版本的接口混用让新手很懵;
2、完善帮助文档,最新api帮助文档讲解太粗糙,例子太少;


(iQuant) #9

嗯嗯,收到您的反馈,感谢您提出的这些建议,我们会针对您提出两点初步进行完善,您有什么意见建议可以随时向我们反馈哈~