.csv 파일에서 읽고 파싱 한 데이터 시리즈의 평균 True 범위를 계산하려고합니다. 다음과 같이 내 코드는 다음과 같습니다'float'명령문에 numpy를 사용하는 '__getitem__'속성이 없습니다.
나는 다음과 같은 오류 메시지가 무엇입니까 그러나import datetime
import time
import matplotlib.pyplot as plt
import numpy as np
fhand = open('C:\Users\Stuart\Desktop\FX Programming\EURUSD_hour.csv', 'r')
for line in fhand:
line = line.split(',')
fxpair, _date, _time, _open, _high, _low, _close = line[0], line[1], line[2], line[3], float(line[4]), float(line[5]), float(line[6])
date_time = datetime.datetime.strptime('{} {}'.format(_date.partition(' ')[0], _time),'%Y%m%d %H:%M:%S')
#define Average True Range function
def TR(d,c,h,l,o,yc):
x = h-l
y = abs(h-yc)
z = abs(l-yc)
print x
print y
print z
if y <= x >= z:
TR = x
elif x <= y >= z:
TR = y
elif x <= z >= y:
TR = z
print d, TR
return d, TR
x = 1
TRDates = []
TrueRanges = []
while x < len(_date):
TRDate, TrueRange = TR(_date[x],_close[x],_high[x],_low[x],_open[x],_close[x-1])
TRDates.append(TRDate)
TrueRanges.append(TrueRange)
x+=1
def ExpMovingAverage(values, window):
weights = np.exp(np.linspace(-1., 0., window))
weights /= weights.sum()
a = np.convolve(values, weights, mode='full')[:len(values)]
a[:window] = a[window]
return a
print len(TrueRanges)
ATR = ExpMovingAverage(TrueRanges,14)
print ATR
:
46 while x < len(line):
---> 47 TRDate, TrueRange = TR(_date[x],_close[x],_high[x],_low[x],_open[x],_close[x-1])
48 TRDates.append(TRDate)
49 TrueRanges.append(TrueRange)
TypeError: 'float' object has no attribute '__getitem__'
그래서이 while 문에 문제가 분명하고, 내가 원하는 것처럼이 _date 반복 밤은 그것까지. 또한 DATE_TIME 대신 _date의 사용 시도했지만 그때 얻을 :
이---> 46 while x < len(date_time):
47 TRDate, TrueRange = TR(date_time[x],_close[x],_high[x],_low[x],_open[x],_close[x-1])
48 TRDates.append(TRDate)
TypeError: object of type 'datetime.datetime' has no len()
누군가가이 작업을 진행하는 데 도움이 수 있습니까?
필자는 아래에 붙여 넣은 코드가 매우 비슷합니다. 실제로이 코드는 데이터에 다른 텍스트 파일을 사용하고 다른 방법으로 압축을 풉니 다. 누군가가 두 코드를 조정하여 최상위 코드가 작동하도록 할 수 있습니까?
import numpy as np
sampleData = open('C:\\Users\\Stuart\\Desktop\\FX Programming\\sampleData.txt','r').read()
splitData = sampleData.split('\n')
date,closep,highp,lowp,openp,volume = np.loadtxt(splitData, delimiter=',',unpack=True)
def TR(d,c,h,l,o,yc):
x = h-l
y = abs(h-yc)
z = abs(l-yc)
print x
print y
print z
if y <= x >= z:
TR = x
elif x <= y >= z:
TR = y
elif x <= z >= y:
TR = z
print d, TR
return d, TR
x = 1
TRDates = []
TrueRanges = []
while x < len(date):
TRDate, TrueRange = TR(date[x],closep[x],highp[x],lowp[x],openp[x],closep[x-1])
TRDates.append(TRDate)
TrueRanges.append(TrueRange)
x+=1
################
def ExpMovingAverage(values, window):
weights = np.exp(np.linspace(-1., 0., window))
weights /= weights.sum()
a = np.convolve(values, weights, mode='full')[:len(values)]
a[:window] = a[window]
return a
print len(TrueRanges)
ATR = ExpMovingAverage(TrueRanges,14)
print ATR
오류 메시지는 '[x]'로 색인하려고하는 'TR'에 대한 입력 중 하나가 숫자가 아니라 배열임을 나타냅니다. 'TR'을 사용하기 전에'for line in fhand :'블록이 원하는 값 (숫자 목록?)을 생성하는지 확인하십시오. 그 변수는 문자열 일 수 있습니다. – hpaulj