@181 ,这是这两天我做出来的基于单股的实盘应用代码哈,还正在研究多股进行。 目标是代替一些手工转为自动
import pandas as pd
import numpy as np
import talib ## 使用talib计算MACD的参数
def initialize(context):
g.security = ['002110.XSHE']#,'000636.XSHE']
set_backtest()
#run_daily(trade, 'every_bar')
#run_daily(trade1,time='09:31')
#run_daily(trade1,time='09:32')
run_time(5)#每30分钟运行一次
def run_time(x):
datas = get_price('000300.XSHG',count=240,frequency='1m').index.tolist()[:-1]#剔除15:00
times = [str(t)[-8:] for t in datas]
times.insert(0,'09:30:00')
for t in times[::x]:
run_daily(trade, t)
def set_backtest():
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
log.set_level('order', 'error')
#每天开盘前要做的事情
#def before_trading_start(context):
# set_slip_fee(context)
# 根据不同的时间段设置滑点与手续费
#def set_slip_fee(context):
# set_slippage(FixedSlippage(0.02))
# dt=context.current_dt
# if dt>datetime.datetime(2013,1, 1):
# set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, close_today_commission=0, min_commission=5), type='stock')
# else:
# set_order_cost(OrderCost(open_tax=0, open_commission=0.003,close_commission=0.003, close_tax=0.001,min_commission=5), type='stock')
# 过滤停牌、退市、ST股票
#def paused_filter(security_list):
# current_data = get_current_data()
# security_list = [stock for stock in security_list if not current_data[stock].paused]
# return security_list
#def delisted_filter(security_list):
# current_data = get_current_data()
# security_list = [stock for stock in security_list if not '退' in current_data[stock].name]
# return security_list
#def st_filter(security_list):
# current_data = get_current_data()
# security_list = [stock for stock in security_list if not current_data[stock].is_st]
# return security_list
#######进行操作的过程#######
def trade(context):
#按分钟回测/模拟, 在每分钟的第一秒运行, 每天执行240次,
#def handle_data(context, data):
# stock_to_choose = get_fundamentals(query(
# valuation.code, valuation.pe_ratio,
# valuation.pb_ratio,valuation.market_cap,
# indicator.eps, indicator.inc_net_profit_annual
# ).filter(
# valuation.pe_ratio < 40,
# valuation.pe_ratio > 10,
# indicator.eps > 0.3,
# indicator.inc_net_profit_annual > 0.30,
# indicator.roe > 15
# ).order_by(
# valuation.pb_ratio.asc()
# ).limit(
# 50), date=None)
# stockpool = list(stock_to_choose['code'])
# stockpool = paused_filter(stockpool)
# stockpool = delisted_filter(stockpool)
# stockpool = st_filter(stockpool)
stockpool = g.security
long_list = []
short_list = []
hold = []
for stock in stockpool:
#prices = attribute_history(stock,300, '1d',['close'])
prices = get_bars(stock, 50, '5m',include_now=True)
price = array(prices['close'])
#print(price)
macd_tmp = talib.MACD(price, fastperiod=12, slowperiod=26, signalperiod=20)
DIF = macd_tmp[0]
DEA = macd_tmp[1]
MACD = np.round(macd_tmp[2],3)
#print(MACD)
# 判断MACD走向
#if MACD[-1] > 0 and MACD[-2] <0:
if MACD[-1] < 0 and MACD[-1] > MACD[-2] and MACD[-2] 0:
elif MACD[-1] > 0 and MACD[-1] < MACD[-2] and MACD[-2] >MACD[-3]:
print(MACD[-1],MACD[-2],MACD[-3],'sell it')
short_list.append(stock)
#elif MACD[-1] > 0 and MACD[-1] > MACD[-2]*1.3:
#long_list.append(stock)
#elif MACD[-1] < MACD[-2] *0.8:
#short_list.append(stock)
stockset = list(context.portfolio.positions.keys())
for stock in stockset:
if stock in short_list:
print('sell')
#order_target_value(stock, 0)
order_value(stock, -10000)
else:
hold.append(stock)#如果不在卖出列表里则持有
buy_list = []
for stock in long_list:
#if stock not in hold:
buy_list.append(stock)#新增的买入股票
if len(buy_list)==0:
Cash = context.portfolio.available_cash
#print(Cash)
else:
Cash = context.portfolio.available_cash/len(buy_list)
for stock in buy_list:
#调整股票仓位到10000元价值
#order_target_value(stock, 30000)
# 买入这么多现金的股票
order_value(stock, 10000)
print('buy')
2019-03-09