クラスの 1 つに問題があります。この特定のクラスは、リスト (日付と価格を含む) を指定して移動平均を計算することになっています。日数 (ユーザーによる入力)。これが私のコードです:
class Moving_Average:
def calculation(self, alist:list,days:int):
m = days
prices = [float(i) for i in alist[1::2]]
average = [0]* len(prices)
signal = ['']* len(prices)
for m in range(0,len(prices)-days+1):
average[m+2] = sum(prices[m:m+days])/days
if prices[m+2] < average[m+2]:
signal[m+2]='SELL'
elif prices[m+2] > average[m+2] and prices[m+1] < average[m+1]:
signal[m+2]='BUY'
else:
signal[m+2] =''
average = [round(average[i],2) for i in range(0,len(average))]
return average,signal
これは、3 日間の平均を計算したい場合にうまく機能します。しかし、入力として 2 日を指定して平均を計算しようとすると、インデックス エラーが発生します。日数として 4 を入力しようとすると、結果は次のようになります。
[0, 0, 33.81, 33.74, 33.51, 33.31, 33.28, 33.49, 33.85, 34.21, 34.43, 34.62, 34.75,
34.88, 34.86, 34.57, 34.26, 34.45, 34.69, 35.13, 35.59, 35.51, 0], ['', '', '', '',
'SELL', 'SELL', 'SELL', 'BUY', '', '', '', '', '', '', '', '', 'SELL', 'SELL', 'BUY',
'', 'SELL', 'BUY', ''])
それがいつあるべきか:
[0, 0, 0, 33.81, 33.74, 33.51, 33.31, 33.28, 33.49, 33.85, 34.21, 34.43, 34.62, 34.75,
34.88, 34.86, 34.57, 34.26, 34.45, 34.69, 35.13, 35.59, 35.51], ['', '', '', '',
'SELL', 'SELL', 'SELL', 'BUY', '', '', '', '', '', '', '', '', 'SELL', 'SELL', 'BUY',
'', 'SELL', 'BUY', ''])
つまり、先頭ではなく末尾に 0 を追加します。