Python,尝试使用多个累加器变量

时间:2016-04-14 15:31:01

标签: python

我正在创建一个非常粗略的“股票交易”计划。该程序加载有关股票价格的数据文件,然后在数据中创建一个长度为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)

1 个答案:

答案 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,那就不用担心了。