for循环迭代使方法返回错误的值

时间:2017-08-01 09:08:33

标签: python list numpy

我对交易策略建模感兴趣所以我尝试使用python来模拟策略。我是从头开始编写的,运行时有一些问题。

def strategy(strain, date, cash, holding):
    def order(strain, amount, date, cash, holdling):
        cash[date]=cash[date-1] - strain[date-1]*amount
        holding[date]=holding [date-1] + amount
        return
    amount = int(cash[0]*0.1/strain[date-1])
    cash.append(cash[date-1])
    holding.append(holding[date-1])
    if (#some strategy) : order(strain, amount, date, cash, holding) 
    return cash, holding
def main():
    cash = [1000000,1000000]
    holding = [0,0]
    total = []
    new = #an array of time series data  
    day = len(new)
    Time = np.arange(2, day-20, 1)
    for j in np.arange(2, day-20, 1):
        **cash, holding = strategy (new, j, cash, holding)**  
        count =  cash[j-1] + holding[j-1]*new[j-1]
        count = count/1000000
        total.append(count)
    plt.plot(Time, total, 'r', label='return')        
if __name__ == "__main__":
    main()

我使用cashholding列表来存储剩余的购买力和我持有的股票。 total列表用于存储返回。正如我在策略方法中定义的那样,我首先在cashholding中添加一个新元素,使其与前一个元素相同,如果触发顺序信号,将调用order方法和新元素将被取代。但是在我运行代码之后,cashtotal将以某种方式回退到初始值1000000和1,即使我从未打算设置它们。

cash, holding = strategy (new, j, cash, holding)是否有问题?

the plot

1 个答案:

答案 0 :(得分:0)

在你的order函数中,你传递参数并修改它们但没有返回它们,这就是为什么即使使用新元素更新cash时也没有反映持有的变化。

def strategy(strain, date, cash, holding):
    def order(strain, amount, date, cash, holdling):
        cash[date]=cash[date-1] - strain[date-1]*amount
        holding[date]=holding [date-1] + amount
        return cash, holding
    amount = int(cash[0]*0.1/strain[date-1])
    cash.append(cash[date-1])
    holding.append(holding[date-1])
    if (#some strategy) :. 
        cash, holding = order(strain, amount, date, cash, holding) 
    return cash, holding