我正在嘗試制作一個加密貨幣掃描器,但我被一個問題卡住了。我做了一個小的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的1完成。
[*********************100%***********************] 1的1完成。
[*********************100%***********************] 1的1完成。
[*********************100%***********************] 1的1完成。
現在我想從所有的硬幣中獲取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')/span>
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)
買入 = []
賣出 = []
open_pos = False[/span].
for i in range(len(df)) 。
if df.Lower[i] > df.Close[i]:
if open_pos == False:
buys.append(i)
open_pos = True: buys.append(i)
elif df.Upper[i] < df.Close[i]:
if open_pos:
sells.append(i)
open_pos = False[/span
print('zoveel buys:'/span>, buys)
print('zoveel sells:', sells)
# print(df.dropna())/span>
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'/span>, 'SMA'/span>, 'Upper'/span>, 'Lower'/span>]])
plt.fill_between(df.index, df.Upper, df.Lower, color='灰色', alpha=0.3)
plt.legend(['Close'/span>, 'SMA'/span>, 'Upper'/span>, 'Lower'/span>])
plt.show()
merged = pd.concat([df.iloc[buyys].Close, df.iloc[sells].Close], axis=1)
merged.columns = ['Buys'/span>, 'Sells'/span>]
print(merged)
#(merged)
totalprofit = merged.shift(-1).Sells - merged.Buyys
print(totalprofit)
relprofits = (merged.shift(-1).Sells - merged.Buyys) / merged.Buyys
print(relprofits.mean()
uj5u.com熱心網友回復:
在這一行中
df = yf.download(symbol, start='2020-01-01')
你正在將下載的結果分配給一個資料框架。然而,每次你都會創建一個新的資料框架,而不是添加到該框架中。
因此,你需要在回圈中通過呼叫df的一個函式來完成你想要的一切df,例如do_something(df)。
或者你可以用dfs.append(df)將其存盤在一些dfs = []中,然后你將在一個資料幀的陣列中擁有每個資料幀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310225.html
標籤:
