嘗試每分鍾用get_bars函數獲取所有股票的當前價格,但是回測執行若幹次之後就沒反應了。
close_data = get_bars(g.stocks, fields=['date','open','high','low','close','volume'], unit='1m', count=3,include_now=False) print(close_data['000001.XSHE']['close'][-1])
就是上面這行代碼。數據獲取沒幾次就沒反應了。
有什麼方法能優化一下嗎? 其實我的需求很簡單,每分鍾看一次所有股票的價格,然後再做進一步的決策。
下面是我的代碼:
# 導入函數庫
from jqdata import *
# 初始化函數,設定基準等等
def initialize(context):
# 設定滬深300作為基準
set_benchmark('000300.XSHG')
# 開啟動態複權模式(真實價格)
set_option('use_real_price', True)
# 輸出內容到日誌 log.info()
log.info('初始函數開始運行且全局只運行一次')
# 過濾掉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')
# 開盤時運行
run_daily(market_open, time='every_bar')
# 收盤後運行
#run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
## 開盤前運行函數
def before_market_open(context):
# 輸出運行時間
log.info('函數運行時間(before_market_open):' str(context.current_dt.time()))
g.stocks = list(get_all_securities(types=['stock'], date=str(context.current_dt.date())).index)
g.last_close = []
#print(g.stocks)
for stock in g.stocks:
close_data = attribute_history(stock, 1, '1d', ['close'])
g.last_close.append( float(close_data['close'][0]))
## 開盤時運行函數
def market_open(context):
log.info('函數運行時間(market_open):' str(context.current_dt.time()))
security = g.stocks;
close_data = get_bars(g.stocks, fields=['date','open','high','low','close','volume'], unit='1m', count=3,include_now=F)
print(close_data['000001.XSHE']['close'][-1]) #即使把這行注釋掉,也只是多執行幾次,並沒有明顯改善。
## 收盤後運行函數
def after_market_close(context):
log.info(str('函數運行時間(after_market_close):' str(context.current_dt.time())))
#得到當天所有成交記錄
trades = get_trades()
for _trade in trades.values():
log.info('成交記錄:' str(_trade))
log.info('一天結束')
log.info('##############################################################')