基于python的量化交易分析
采用:
1. N日择时策略+ATR风险控制
# N日择时策略+ATR
def Nbreakstrategy(self,data, N1, N2, n_win, n_loss):
# N1天内最高价
global start
data['N1_high'] = data.High.rolling(window=N1).max()
data['N1_high'] = data.N1_high.shift(1)
max_val = data.Close.expanding().max()
data['N1_high'].fillna(value=max_val, inplace=True)
# N2天内最低价
data['N2_low'] = data.Low.rolling(window=N2).min()
data['N2_low'] = data.N2_low.shift(1)
min_val = data.Close.expanding().min()
data['N2_low'].fillna(value=min_val, inplace=True)
# ATR止盈止损判断
buy_price = 0
for k_index, today in data.iterrows():
tick = round(today.Close * 0.01, 2)
# 买入
if (today.Close - tick) > today.N1_high:
print('N day buy: {} {}'.format(k_index,today.Close))
buy_price = today.Close
data.loc[k_index, 'signal'] = 1
# 止损,收盘价少于买入价,卖出
elif (buy_price != 0) and (buy_price > today.Close + tick) and ((buy_price - today.Close - tick) > n_loss * today.atr14):
#print('stop loss: {} {} {}'.format(k_index, today.Close, buy_price))
data.loc[k_index, 'signal'] = 0
buy_price = 0
# 止盈:收盘价多于买入价,卖出
elif (buy_price != 0) and (buy_price < today.Close - tick) and ((today.Close - buy_price + tick) > n_win * to