【问题标题】:Can one replace keywords in functions by a dict or sth?可以用字典或某物替换函数中的关键字吗?
【发布时间】:2020-12-28 13:14:28
【问题描述】:

我有一个带有大量预定义参数的函数(函数 runstrat 中的 test.addstrategy)。

我想将关键字 selcperc=p1、mperiod=int(p2) 更改为 rperiodzperiod强>。这些也是 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 做了一个糟糕的解决方法。我可能想要更改的所有参数。在全局参数中,我设置了一个包含所有案例的字典,它将用相关案例替换参数...

【问题讨论】:

    标签: python function keyword


    【解决方案1】:

    关键字由被调用的函数定义,调用者无法更改它们。

    【讨论】:

    • 实际上关键字只是存储在函数中的dicts中的参数。因此,如果关键字更改了函数中已经默认设置的参数,则会取而代之。
    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2015-12-13
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多