我正在创建一个非常粗略的“股票交易”计划。该程序加载有关股票价格的数据文件,然后在数据中创建一个长度为20天的移动平均值,该移动平均值以一天的增量移动。然后,该计划必须根据价格决定是否买入或卖出股票。我无法让我的程序正确地记录我买入/卖出的股票以及我剩下多少钱。我只包括了我的程序的相关部分。
netWorth = 1000
stocks = 0
def moving_average():
for day in range(1, len(closeColum)):
if day < 21:
continue
twenty_days = sum(closeColum[(day-20):day])
running_avg = twenty_days/20
if closeColum[day] < running_avg:
buyFunction(day, closeColum)
if closeColum[day] > running_avg:
sellFunction(day, closeColum)
else:
continue
print(stocks)
def buyFunction(day, closeColum):
netWorth1 = netWorth
stocks1 = stocks
while netWorth1 > 0:
netWorth1 = netWorth1 - closeColum[day]
stocks1 += 1
return(stocks1, netWorth1)
def sellFunction(day, closeColum):
stocks2 = stocks
netWorth2 = netWorth
while stocks2 > 0:
netWorth2 = netWorth2 + closeColum[day]
stocks2 -= 1
return(stocks2, netWorth2)
答案 0 :(得分:0)
当你说
时stocks2 = stocks
你正在制作一份独立生活的stocks
副本。然后当你修改它时:
stocks2 -= 1
这对stocks
变量没有影响。
return(stocks2, netWorth2)
也不会影响stocks
,因为你在moving_average
的任何地方都没有使用该返回值,所以它特别无用。
您需要做的是修改实际stocks
变量的值。大概这会导致错误,因为你不能正常修改函数中的全局变量,除非你特别要求这样做:
def buyFunction(day, closeColum):
global stocks
...
现在,您可以使用stocks += 1
等语句直接修改全局变量。 netWorth
需要做同样的事情。
或者,您可以将这些函数包装在一个类中,这通常比使用全局变量更好(因为我们必须进行修复等原因)。但是如果你的脚本很简单并且你仍然掌握着Python,那就不用担心了。