问题描述
我有一个带有大量预定义参数的函数(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,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,fill=False,edgecolor='blue',lw=3,clip_on=False))
ax.add_patch(Rectangle(max_val_ndx[::-1],clip_on=False))
print(data)
plt.tight_layout()
plt.show()
St 是另一个非常冗长的课程。
编辑:
我现在通过 incl 做了一个糟糕的解决方法。我可能想要更改的所有参数。在全局参数中,我设置了一个包含所有案例的字典,它将用相关案例替换参数...
解决方法
关键字由被调用的函数定义,调用者无法更改它们。