pandas寻找最优策略参数
当进行策略制定后,再进行资金曲线计算后,将策略更多参数可能性进行遍历,寻找最优参数
import pandas as pd
from program.class8.Functions import transfer_to_period_data
from program.class8.Signals import signal_bolling
from program.class8.Evaluate import equity_curve_with_long_and_short
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
pd.set_option('expand_frame_repr', False) # 当列太多时不换行
pd.set_option('display.max_rows', 1000)
# # 导入数据
# df = pd.read_hdf('/Users/jxing/Desktop/coin_quant_class/data/class8/eth_1min_data.h5', key='all_data')
#
# # 转换数据周期
# rule_type = '15T'
# df = transfer_to_period_data(df, rule_type)
#
# # 计算交易信号
# para = [150, 3]
# df = signal_bolling(df, para)
#
# df = df[df['candle_begin_time'] >= pd.to_datetime('2017-01-01')]
# df.reset_index(inplace=True, drop=True)
#
# # 计算资金曲线
# df = equity_curve_with_long_and_short(df, leverage_rate=3, c_rate=2.0/1000)
#
# print('策略最终收益:', df.iloc[-1]['equity_curve'])
# exit()
# =====寻找最优参数
# 导入数据
all_data = pd.read_hdf('/Users/jxing/Desktop/coin_quant_class/data/class8/eth_1min_data.h5', key='all_data')
# 转换数据周期
rule_type = '15T'
all_data = transfer_to_period_data(all_data, rule_type)
# 选取时间段
all_data = all_data[all_data['candle_begin_time'] >= pd.to_datetime('2017-01-01')]
all_data.reset_index(inplace=True, drop=True)
# 构建参数候选组合
n_list = range(50, 500, 50)
m_list = [0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4]
# 遍历所有参数组合
rtn = pd.DataFrame()
for m in m_list:
for n in n_list:
para = [n, m]
# 计算交易信号
df = signal_bolling(all_data.copy(), para)
# 计算资金曲线
df = equity_curve_with_long_and_short(df, leverage_rate=3, c_rate=2.0 / 1000)
print(para, '策略最终收益:', df.iloc[-1]['equity_curve'])
# 存储数据
rtn.loc[str(para), '收益'] = df.iloc[-1]['equity_curve']
print(rtn.sort_values(by='收益', ascending=False))