Python在函数中遇到TypeError

2024-09-28 18:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行这个脚本时,我总是得到一个TypeError。我不明白为什么。我在youtube上看了这个系列,并且一直在完全按照他在每节课中键入的代码进行操作,但是当我运行它时,这个错误会弹出,print('Predicited Outcome: ', performanceAr(patDex)) TypeError: 'list' object is not callable。有什么想法可以让代码正常工作吗?我曾想过,如果我把行移过去,它可能会正确运行,但它不会。奇怪的是,我得到一些输出,但它必须击中行打印('预测结果:',性能(patDex)),然后它给我的错误。抱歉,如果我打了很多绒毛,但我必须:(代码如下。。你知道吗

import numpy as np
import matplotlib
# matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import time
#Watch sentdex python charting tutorial

date,bid,ask = np.loadtxt('GBPUSD1d.txt', unpack=True
                              , delimiter=',',
                              converters={0:mdates.strpdate2num('%Y%m%d%H%M%S')})
#Global
avgLine = ((bid+ask)/2)

patForRec = []
patterAr = []
performanceAr = []

totalStart = time.time()

def percentChange(startPoint, currentPoint):
    return ((float(currentPoint)-startPoint)/abs(startPoint))*100.00


def patternStorage():
    patStartTime = time.time()
    x = len(avgLine) - 30
    y = 11
    while y < x:
        pattern = []
        p1 = percentChange(avgLine[y-10], avgLine[y-9])
        p2 = percentChange(avgLine[y-10], avgLine[y-8])
        p3 = percentChange(avgLine[y-10], avgLine[y-7])
        p4 = percentChange(avgLine[y-10], avgLine[y-6])
        p5 = percentChange(avgLine[y-10], avgLine[y-5])
        p6 = percentChange(avgLine[y-10], avgLine[y-4])
        p7 = percentChange(avgLine[y-10], avgLine[y-3])
        p8 = percentChange(avgLine[y-10], avgLine[y-2])
        p9 = percentChange(avgLine[y-10], avgLine[y-1])
        p10 = percentChange(avgLine[y-10], avgLine[y])

        outcomeRange = avgLine[y+20:y+30]
        currentPoint = avgLine[y]

        try:
            avgOutcome = reduce(lambda x, y: x+y, outcomeRange) / len(outcomeRange)
        except Exception(e):
            print(str(e))
            avgOutcome=0

        futureOutcome = percentChange(currentPoint, avgOutcome)
        pattern.append(p1)
        pattern.append(p2)
        pattern.append(p3)
        pattern.append(p4)
        pattern.append(p5)
        pattern.append(p6)
        pattern.append(p7)
        pattern.append(p8)
        pattern.append(p9)
        pattern.append(p10)

        patterAr.append(pattern)
        performanceAr.append(futureOutcome)

        # Dont need to print
        # print(currentPoint)
        # print(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10)
        y+=1
    patEndTime = time.time()
    print(len(patterAr))
    print(len(performanceAr))
    print(patEndTime-patStartTime)


def currentPattern():



    cp1 = percentChange(avgLine[-11], avgLine[-10])
    cp2 = percentChange(avgLine[-11], avgLine[-9])
    cp3 = percentChange(avgLine[-11], avgLine[-8])
    cp4 = percentChange(avgLine[-11], avgLine[-7])
    cp5 = percentChange(avgLine[-11], avgLine[-6])
    cp6 = percentChange(avgLine[-11], avgLine[-5])
    cp7 = percentChange(avgLine[-11], avgLine[-4])
    cp8 = percentChange(avgLine[-11], avgLine[-3])
    cp9 = percentChange(avgLine[-11], avgLine[-2])
    cp10 = percentChange(avgLine[-11], avgLine[-1])

    patForRec.append(cp1)
    patForRec.append(cp2)
    patForRec.append(cp3)
    patForRec.append(cp4)
    patForRec.append(cp5)
    patForRec.append(cp6)
    patForRec.append(cp7)
    patForRec.append(cp8)
    patForRec.append(cp9)
    patForRec.append(cp10)
    print(patForRec)


def patternRecognition():
    for eachPattern in patterAr:
        sim1 = 100.00 - abs(percentChange(eachPattern[0], patForRec[0]))
        sim2 = 100.00 - abs(percentChange(eachPattern[1], patForRec[1]))
        sim3 = 100.00 - abs(percentChange(eachPattern[2], patForRec[2]))
        sim4 = 100.00 - abs(percentChange(eachPattern[3], patForRec[3]))
        sim5 = 100.00 - abs(percentChange(eachPattern[4], patForRec[4]))
        sim6 = 100.00 - abs(percentChange(eachPattern[5], patForRec[5]))
        sim7 = 100.00 - abs(percentChange(eachPattern[6], patForRec[6]))
        sim8 = 100.00 - abs(percentChange(eachPattern[7], patForRec[7]))
        sim9 = 100.00 - abs(percentChange(eachPattern[8], patForRec[8]))
        sim10 = 100.00 - abs(percentChange(eachPattern[9], patForRec[9]))

        howSim = (sim1+sim2+sim3+sim4+sim5+sim6+sim7+sim8+sim9+sim10)/10.00

        if howSim > 70:
            patDex = patterAr.index(eachPattern)
            print('#################')
            print('#################')
            print(patForRec)
            print('=================')
            print('=================')
            print(eachPattern)
            print('-----------------')
            print('-----------------')
            print('Predicted Outcome: ', performanceAr(patDex))
            print('#################')
            print('#################')




def graphRawFX():

    fig = plt.figure(figsize=(10,7))
    ax1 = plt.subplot2grid((40,40), (0,0), rowspan=40, colspan=40)

    ax1.plot(date,bid)
    ax1.plot(date,ask)
    plt.gca().get_yaxis().get_major_formatter().set_useOffset(False)

    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d- %H:%M:%S'))
    for label in ax1.xaxis.get_ticklabels():
        label.set_rotation(45)

    ax1_2 = ax1.twinx()
    ax1_2.fill_between(date, 0, (ask-bid), facecolor='g', alpha=.3 )

    plt.subplots_adjust(bottom=.23)
    plt.grid(True)
    plt.show()

patternStorage()
currentPattern()
patternRecognition()
totalTime = time.time() - totalStart
print('Processing Time Took: ', totalTime,' seconds')

Tags: importtimematplotlibpltabspatternprintappend
1条回答
网友
1楼 · 发布于 2024-09-28 18:57:18

您正在用performanceAr指定()。Python将尝试将它作为一个函数调用(或者更具体地说,由于它是一个变量,所以将它的值作为一个函数调用)。你知道吗

print('Predicted Outcome: ', performanceAr(patDex))

也许你想要这个?地址:

print('Predicted Outcome: ', performanceAr[patDex])

(注意[]而不是()

相关问题 更多 >