【发布时间】:2014-05-12 20:50:13
【问题描述】:
我编写了一个函数,该函数在给定日期和价格列表的情况下计算股票的移动平均值。但是输出不正确。我只需要对代码进行第二次观察。这是我的代码。
def calculate(self, stock_date_price_list, min_days=2):
'''Calculates the moving average and generates a signal strategy for buy or sell
strategy given a list of stock date and price. '''
stock_averages = []
stock_signals = []
price_list = [float(n) for n in stock_date_price_list[1::2]]
days_window = collections.deque(maxlen=min_days)
rounding_point = 0.01
for price in price_list:
days_window.append(price)
stock_averages.append(0)
stock_signals.append("")
if len(days_window) == min_days:
moving_avg = sum(days_window) / min_days
stock_averages[-1] = moving_avg
if price < moving_avg:
stock_signals[-1] = "SELL"
elif price > moving_avg:
if price_list[-2] < stock_averages[-2]:
stock_signals[-1] = "BUY"
stock_averages[:] = ("%.2f" % avg if abs(avg)>=rounding_point else ' ' for avg in stock_averages)
return stock_averages, stock_signals
输入是以下格式的股票价格和日期列表:
[2012-10-10,52.30,2012-10-09,51.60]
我得到的输出是:
2012-10-01 659.39
2012-10-02 661.31
2012-10-03 671.45
2012-10-04 666.80
2012-10-05 652.59
2012-10-08 638.17
2012-10-09 635.85
2012-10-10 640.91
2012-10-11 628.10
2012-10-12 629.71 648.43 SELL
2012-10-15 634.76 645.97 SELL
2012-10-16 649.79 644.81 BUY
2012-10-17 644.61 642.13 BUY
2012-10-18 632.64 638.71 SELL
2012-10-19 609.84 634.44 SELL
2012-10-22 634.03 634.02 BUY
2012-10-23 613.36 631.77 SELL
2012-10-24 616.83 629.37 SELL
应该是这样的:
2012-10-01 659.39
2012-10-02 661.31
2012-10-03 671.45
2012-10-04 666.80
2012-10-05 652.59
2012-10-08 638.17
2012-10-09 635.85
2012-10-10 640.91
2012-10-11 628.10
2012-10-12 629.71 648.43
2012-10-15 634.76 645.97
2012-10-16 649.79 644.81 BUY
2012-10-17 644.61 642.13
2012-10-18 632.64 638.71 SELL
2012-10-19 609.84 634.44
2012-10-22 634.03 634.02 BUY
2012-10-23 613.36 631.77 SELL
2012-10-24 616.83 629.37
买卖参数:
如果某一天的收盘价已经上穿简单移动平均线(即当日收盘价高于当天的简单移动平均线,而前一收盘价不高于前一简单移动平均线),产生买入信号。
如果某一天的收盘价低于简单移动平均线,则生成卖出信号。
否则,不产生信号。
【问题讨论】:
-
您在那里打印的值是什么?是否有一些代码可以工作?如果您将买入/卖出信号的计算分离到一个函数中,该函数采用单个价格的所有相关值,可能会更容易,这样您就可以单独测试它。
-
@jonrsharpe 打印的值是日期、收盘价、移动平均线、买入/卖出决定.. 除了输出之外,代码似乎没有问题。我一直在尝试将它分成两个功能,但因为我是新手,所以运气不佳。
标签: list python-3.x