【发布时间】:2020-12-28 13:14:28
【问题描述】:
我有一个带有大量预定义参数的函数(函数 runstrat 中的 test.addstrategy)。
我想将关键字 selcperc=p1、mperiod=int(p2) 更改为 rperiod 和 zperiod强>。这些也是 St 函数中的参数。
例如像 globalparams dict 这样的 dict 是否可能?
globalparams = dict(fromdate=datetime.datetime(2005, 11, 3),
todate=datetime.datetime(2020, 6, 18),
strategy="St",
#Heatmap section
heatmap=True,
heatmapparams= {'selcperc': "p1"},
heatmapparams2= {'mperiod': "int(p2)",
'printlog': "False"},
)
if globalparams["heatmap"]:
results_list = []
for i in np.arange(0.02, 0.12, 0.02):
for j in np.arange(60, 250, 10):
PnL = runstrat(p1=i, p2=j)
results_list.append([i, j, i, PnL])
my_heatmap1(results_list)
return
def runstrat(p1, p2):
test= bt.Cerebro()
test.addstrategy(eval(globalparams["strategy"], selcperc=p1, mperiod=int(p2),printlog=False)
for fname in glob.glob(os.path.join(globalparams["path"], '*')):
df = pd.read_csv(fname, index_col=0, parse_dates=True)
if len(df)>200:
test.adddata(bt.feeds.PandasData(dataname=df,name=os.path.basename(fname).replace(".csv", ""),fromdate=fromdate, todate=todate, plot=False))
test.run(maxcpus=0)
return test.broker.getvalue()
def my_heatmap1(data):
data = np.array(data)
xs = np.unique(data[:, 1].astype(int))
ys = np.unique(data[:, 0].astype(float))
vals = data[:, 3].reshape(len(ys), len(xs))
min_val_ndx = np.unravel_index(np.argmin(vals, axis=None), vals.shape)
max_val_ndx = np.unravel_index(np.argmax(vals, axis=None), vals.shape)
cmap = LinearSegmentedColormap.from_list('', ['red', 'orange', 'yellow', 'chartreuse', 'limegreen'])
ax = sns.heatmap(vals, xticklabels=xs, yticklabels=ys, cmap='viridis', annot=True, fmt='.2f')
ax.add_patch(Rectangle(min_val_ndx[::-1], 1, 1, fill=False, edgecolor='blue', lw=3, clip_on=False))
ax.add_patch(Rectangle(max_val_ndx[::-1], 1, 1, fill=False, edgecolor='blue', lw=3, clip_on=False))
print(data)
plt.tight_layout()
plt.show()
St 是另一个非常冗长的课程。
编辑:
我现在通过 incl 做了一个糟糕的解决方法。我可能想要更改的所有参数。在全局参数中,我设置了一个包含所有案例的字典,它将用相关案例替换参数...
【问题讨论】: