for循环迭代使得方法返回错误的值
问题描述:
我对建模交易策略感兴趣,所以我试图用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()
我用cash
和holding
列表存储离开了购买力,我持有的股票。 total
列表用于存储返回。正如我在策略方法中所定义的,我首先在cash
和holding
中追加一个新元素,使其与前一个元素相同,并且如果触发了订单信号,则会调用顺序方法,并且将替换新元素。然而,在我运行代码后,cash
和total
将以某种方式回退到初始值1000000和1,即使我从未打算设置它们。
cash, holding = strategy (new, j, cash, holding)
是否有问题?
答
在你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
我明白了。谢谢您的帮助! –
这是更多的代码来阅读和理解,可以从志愿者预期。请提供一个[Minimal,Complete和Verifiable示例](https://stackoverflow.com/help/mcve)并提供具体问题。 – pingul
有一个问题,你没有返回任何东西。 '订单'功能 –