【发布时间】:2020-12-08 01:32:53
【问题描述】:
我不能在另一个函数中使用来自一个函数的变量。 我正在尝试使用这两个:
def b(df):
macd=df['Close'].ewm(span=12, ignore_na=False).mean()-
df['Close'].ewm(span=26,ignore_na=False).mean()
return macd
def b1(df):
signal=df.rolling(window=9).mean()
return signal
在
def pls(df, macd, signal):
macd=b(df)
signal=b1(df)
kodas(AMZN, macd, signal, 10000, 1, 1)
balance=kodas(df, macd, signal, 10000, 1, 1)
profitai=np.diff(balance)
return macd, signal
但最终我收到此错误 name 'macd' is not defined 当我这样做时
pls(AMZN, macd, signal, balance, profitai)。我敢肯定,“信号”和“平衡”也会发生这种情况。我知道我没有在函数之外定义“macd”,但我不会为一个 STOCK 数据计算“macd”,所以我必须创建一个代码不会重复一千次的函数。所以,我的问题是在这种情况下我应该怎么做才能在另一个函数中使用来自一个函数的变量?
这是完整的代码:
from google.colab import drive
drive.mount('/content/drive')
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
import numpy as np
import matplotlib.lines as mlines
def failas(df):
coltsla=['Date', 'Time' , 'Open', 'High', 'Low', 'Close', 'Volume']
dateparse = lambda x: pd.datetime.strptime(x, '%m/%d/%Y %H:%M')
df = pd.read_csv(df, parse_dates={'Datetime': ['Date', 'Time']}, header=0, names=coltsla)
return df
def failas1(df):
coltsla=['Date', 'Time' , 'Open', 'High', 'Low', 'Close', 'Volume']
dateparse = lambda x: pd.datetime.strptime(x, '%m/%d/%Y %H:%M')
df = pd.read_csv(df, parse_dates={'Datetime': ['Date', 'Time']}, skiprows=2, header=0,names=coltsla)
return df
AMZN=failas("/content/drive/My Drive/AMZN.csv")
AMZN1=failas1("/content/drive/My Drive/AMZN.csv")
def b(df):
macd=df['Close'].ewm(span=12, ignore_na=False).mean()-
df['Close'].ewm(span=26,ignore_na=False).mean()
return macd
def b1(df):
signal=df.rolling(window=9).mean()
return signal
def kodas(df, macd, signal, pradzia=10000, buyk=1, macdk=1):
a=pd.Series(df['Close'])
balance=[]
money=pradzia
kiekis=0
lieka=0
uzdarbis=0
perkame=0
taxsuma=100
for i in range(1, len(df)):
#Pirkimas
if (macd[i] > signal[i] and macd[i-1] <= signal[i-1]):
kiekis=money//(a[i]*buyk)
perkame=a[i]*buyk*kiekis
lieka=money-perkame
#TakeProfit
if (macd[i] < signal[i]*macdk and macd[i-1] >= signal[i-1]*macdk):
parduodame=kiekis*(a[i])
uzdarbis=parduodame-perkame+lieka-taxsuma
money=money+uzdarbis
#Stoploss
if (macd[i] > signal[i] and macd[i-1] <= signal[i-1] and a[i] < (df['High'][i])*0.945 or macd[i] <
signal[i] and macd[i-1] >= signal[i-1] and a[i] < (df['High'][i])*0.945):
parduodame=kiekis*(a[i])
uzdarbis=parduodame-perkame+lieka-taxsuma
money=money+uzdarbis
balance.append(money-10000)
return balance
def pls(df, macd, signal):
macd=b(df)
signal=b1(df)
kodas(AMZN, macd, signal, 10000, 1, 1)
balance=kodas(df, macd, signal, 10000, 1, 1)
profitai=np.diff(balance)
return macd, signal
pls(AMZN, macd, signal, balance, profitai)
plt.plot(AMZN1['Datetime'], profitai.cumsum())
【问题讨论】: