2017-08-01 77 views
1

我對建模交易策略感興趣,所以我試圖用python來模擬策略。我從頭開始寫這個,當我運行它時有一些問題。for循環迭代使得方法返回錯誤的值

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中追加一個新元素,使其與前一個元素相同,並且如果觸發了訂單信號,則會調用順序方法,並且將替換新元素。然而,在我運行代碼後,cashtotal將以某種方式回退到初始值1000000和1,即使我從未打算設置它們。

cash, holding = strategy (new, j, cash, holding)是否有問題?

the plot

+3

這是更多的代碼來閱讀和理解,可以從志願者預期。請提供一個[Minimal,Complete和Verifiable示例](https://stackoverflow.com/help/mcve)並提供具體問題。 – pingul

+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 
+0

我明白了。謝謝您的幫助! –