from jqdata import *
import numpy as np
import talib as ta
from scipy.fftpack import fft
def initialize(context):
set_backtest()
set_params()
run_daily(onStart, time='before_open', reference_security='000300.XSHG')
run_daily(onUpdate, 'every_bar')
run_daily(onClose, time='after_close', reference_security='000300.XSHG')
def set_params():
g.days = 0
g.refresh_rate = 10
g.last_dt = '9999-12-31'
g.etfs = [
'511380.XSHG',
'515220.XSHG',
'159980.XSHE',
'159985.XSHE',
]
g.etfPrx5 = {'511380.XSHG': 0,
'515220.XSHG': 1,
'159980.XSHE': 2,
'159985.XSHE': 3}
g.etfDatas = pd.DataFrame()
def set_backtest():
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
log.set_level('order', 'error')
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
def onStart(context):
pass
def onUpdate(context):
g.days += 1
AllTargetPrx(g.etfs, 5, '1d', ['close'])
pxdf = getLastPrice(context, g.etfs)
MergeData(pxdf)
print(g.etfDatas)
def onClose(context):
g.etfDatas = g.etfDatas.drop(index=g.etfDatas.index)
trades = get_trades()
for _trade in trades.values():
log.info('成交记录:'+str(_trade))
log.info('一天结束')
log.info('##############################################################')
def cull(context):
pass
def Strategy(context):
pass
def getLastPrice(context, etfs):
g.last_dt = (context.current_dt - datetime.timedelta(1)).strftime('%Y-%m-%d')
df = get_price(etfs, g.last_dt, context.previous_date, frequency='1d', fields=['open', 'close', 'high', 'low'])
dresult = df['close']
colsArray = dresult.columns
resDict={}
result = pd.DataFrame()
for i in range(len(colsArray)):
temp = dresult[colsArray[i]].values
if(len(temp) != 0):
resDict = {
'code': colsArray[i],
'close':temp[0]
}
df = pd.DataFrame([resDict])
result = pd.concat([result, df])
return result
def AllTargetPrx(etfs, count=5, unit='1d', fields=['close']):
for etf in etfs:
prx = get_bars(etf, count, unit, fields)
if prx['close'].size != 0:
ma5 = prx['close'].mean()
prx5Dic = {'code':etf, 'ma5': ma5}
df = pd.DataFrame(prx5Dic, index=[0])
g.etfDatas = pd.concat([g.etfDatas, df])
def MergeData(joiner):
if not joiner.empty:
g.etfDatas = pd.merge(g.etfDatas,joiner,how='left',on='code')