【发布时间】:2021-09-15 23:38:04
【问题描述】:
我正在尝试制作一个加密扫描仪,但我遇到了一个问题。我制作了一个包含一些加密货币的小 csv 文件,如下所示:
BTC-USD
ETH-USD
ADA-USD
BNB-USD
现在我想遍历这个 csv 文件并将所有值放入 df 的函数中。现在的问题是它只插入文件的最后一个值并给出该硬币的图形。我尝试如下:
with open('symbols.csv') as f:
symbols = f.read().splitlines()
for symbol in symbols:
df = yf.download(symbol, start='2020-01-01')
我觉得它正在做它的工作,因为我得到以下输出:
[*********************100%***********************] 1 of 1 completed
[*********************100%***********************] 1 of 1 completed
[*********************100%***********************] 1 of 1 completed
[*********************100%***********************] 1 of 1 completed
现在我想从所有硬币中获取 4 个图表,而不仅仅是 csv 文件中的最后一个硬币。谁能帮我解决这个问题?提前致谢!
注意:其余代码正在运行并提供正确的值,现在唯一缺少的是从不同硬币获取输出的循环。
我的整个代码是:
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
with open('symbols.csv') as f:
symbols = f.read().splitlines()
for symbol in symbols:
df = yf.download(symbol, start='2020-01-01')
# df = yf.download('ADA-USD', start='2021-01-01')
df['SMA'] = df.Close.rolling(window=20).mean()
df['stddev'] = df.Close.rolling(window=20).std()
df['Upper'] = df.SMA + 2* df.stddev
df['Lower'] = df.SMA - 2* df.stddev
df['Buy_Signal'] = np.where(df.Lower > df.Close, True, False)
df['Sell_Signal'] = np.where(df.Upper < df.Close, True, False)
buys = []
sells = []
open_pos = False
for i in range(len(df)):
if df.Lower[i] > df.Close[i]:
if open_pos == False:
buys.append(i)
open_pos = True
elif df.Upper[i] < df.Close[i]:
if open_pos:
sells.append(i)
open_pos = False
print('zoveel buys:', buys)
print('zoveel sells:', sells)
# print(df.dropna())
plt.figure(figsize=(12, 6))
# plt.scatter(df.index[df.Buy_Signal], df[df.Buy_Signal].Close, marker = '^', color ='g')
# plt.scatter(df.index[df.Sell_Signal], df[df.Sell_Signal].Close, marker = '^', color ='r')
plt.scatter(df.iloc[buys].index, df.iloc[buys].Close, marker = '^', color ='g')
plt.scatter(df.iloc[sells].index, df.iloc[sells].Close, marker = '^', color ='r')
plt.plot(df[['Close', 'SMA', 'Upper', 'Lower']])
plt.fill_between(df.index, df.Upper, df.Lower, color='grey', alpha=0.3)
plt.legend(['Close', 'SMA', 'Upper', 'Lower'])
plt.show()
merged = pd.concat([df.iloc[buys].Close, df.iloc[sells].Close], axis=1)
merged.columns = ['Buys', 'Sells']
print(merged)
# #
totalprofit = merged.shift(-1).Sells - merged.Buys
print(totalprofit)
relprofits = (merged.shift(-1).Sells - merged.Buys) / merged.Buys
print(relprofits.mean())
【问题讨论】:
标签: python csv cryptocurrency