【发布时间】:2021-02-02 12:16:44
【问题描述】:
我正在尝试使用来自Alpha Vantage 的实时外汇数据制作一个简单的移动平均线(API 密钥可以从 Alpha Vantage 免费注册)。除了 SMA 的周期不完整之外,一切似乎都运行良好。
例如,如果我设置data[:'2020-1-1'],它应该返回从 1.1.2020 到当前日期的数据。但是,2020 年 12 月到 2021 年 1 月的时间段已经过去了。
我尝试绘制图表并意识到我的移动平均周期越大,删除的数据越多。我的图表上的情节如下:
Dataframe for beginning period 2020-1-1
Dataframe period fixed but NAN values
以下是我在 3 个单独文件中的代码:
这是 execution.py 文件:
from alpha_vantage.foreignexchange import ForeignExchange
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from to_USD import currencyExchangeB
from smvgavg import sma
UniSymbol = 'USD'
fromSymbolsB = ['EUR','GBP']
for symbol in fromSymbolsB:
# store the result that return from "currencyExchange()" function
result = currencyExchangeB(UniSymbol,symbol)
# generate graph by passing those result of each currency data
sma(result,UniSymbol,symbol)
下一个是 to_USD.py 文件,我用它从 Alpha Vantage 中提取外币数据:
from alpha_vantage.foreignexchange import ForeignExchange
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import datetime
# added a class to collect a collection of variable so it can be return easily in the following function
class GRAPH_STRUCT:
date:any
symbol:str
def __init__(self,date,symbol):
self.date = date
self.symbol = symbol
def currencyExchangeB(toCurrencyB,fromCurrencyB):
# create an array to store the result
result = []
cc = ForeignExchange(key='%ALPHA_VANTAGE_APIKEY%',output_format='pandas')
data, meta_data = cc.get_currency_exchange_daily(from_symbol=fromCurrencyB,to_symbol=toCurrencyB,outputsize='full')
# append those result in the array
result = GRAPH_STRUCT(data[:'2020-1-1'],toCurrencyB)
# return those result in the end of the function
return result
最后一个文件是用于计算简单移动平均线的smvgavg.py文件:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
#dataObj is a datatype of GRAPH_STRUCT
def sma(dataObj,UniSymbol,symbol):
maA = 25
maB = 50
maT = [maA,maB]
for ma in maT:
smaString = "SMA" + str(ma)
data = dataObj.date
data[smaString] = data.iloc[:,3].rolling(window = ma).mean()
data = data.iloc[ma:]
print(data)
fig = plt.gcf()
fig.set_size_inches(10, 6)
plt.plot(data['4. close'], label='Close' if ma == 0 else "",color='red')
plt.plot(data['SMA' + str(ma)],label='SMA' + str(ma))
plt.title(symbol + '/' + UniSymbol, y=1)
plt.xlabel("Date")
plt.ylabel("Exchange Rate")
plt.legend()
plt.show()
任何帮助将不胜感激。 谢谢。
【问题讨论】:
-
你可以使用
min_periods=1参数Minimum number of observations in window required to have a value. min_periods will default to the size of the window。参考here
标签: python