当我调用此方法patternFinder()时,出现了这样的错误
def patternFinder():
avgaLine=((bid+ask)/2)
x=len(avgaLine)-30
y=11
while y<x:
outcomeRange=avgaLine[y+20:y+30]
currentPoint=avgaLine[y]
print reduce((lambda x,y:x+y,outcomeRange)/len(outcomeRange))
print (currentPoint)
print ('_________')
time.sleep(5555)
我收到此错误:
文件
<ipython-input-66-a32566f8689e>
,第21行
打印reduce((lambda x,y:x + y,outcomeRange)/ len(outcomeRange))
SyntaxError:语法无效
答案 0 :(得分:2)
这不是使用reduce
的正确方法(应该在缩减后 进行除法),此外,您甚至不需要在此处使用reduce
。如果要计算平均值,请尝试以下方法:
print( sum(outcomeRange) / len(outcomeRange) )
顺便提防整数除法。确保outcomeRange
至少包含一个十进制值,或者确保您导入了当前的除法函数:
from __future__ import division
答案 1 :(得分:1)
reduce
接受两个单独的参数,函数和可迭代。因此,您的电话应该是
reduce(lambda x,y:x+y, outcomeRange/len(outcomeRange))
但是,还要确保您的outcomeRange
是一个numpy数组,否则,尝试将其除以数字时会遇到另一个语法错误。否则,将除法转换为[x/len(outcomeRange) for x in outcomeRange]
在那种情况下,最好在求和完成后除以长度 ,因此,您可以编写
reduce(lambda x, y: x+y, outcomeRange) / len(outcomeRange)
答案 2 :(得分:0)
您最有可能使用Python 3+,这意味着print
语句的语法不正确。它必须放在括号中:
print(reduce((lambda x,y:x+y,outcomeRange)/len(outcomeRange)))
您在其他2条print
语句中已正确完成操作,我想您只是在这里错过了它。
答案 3 :(得分:0)
对于 Python 3.8
(Jupyter Notebook Anaconda)
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import numpy as np
import time
def bytespdate2num(b):
return mdates.datestr2num(b.decode('utf-8'))
date, bid, ask = np.loadtxt('GBPUSD1d.txt', unpack=True,
delimiter=',', converters={0:bytespdate2num})
def percentChange (startPoint, currentPoint):
return ((float(currentPoint)-startPoint)/startPoint)*100.0
def patternFinder():
avgLine = ((bid+ask)/2)
x = len(avgLine) - 30
y = 11
while y < x:
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]
print (sum(outcomeRange) / len(outcomeRange) )
print (currentPoint)
print (' ____')
print (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
y += 1
time.sleep(5555)
patternFinder()
输出
1.553601
1.553555
-0.001930961683282023 -0.0032182694721319405 -0.0032182694721319405 -0.0035400964193622853 -0.003861923366564046 -0.005471058102644308 -0.0061147119970621205 -0.00450557726099615 -0.00450557726099615 -0.004827404208212203