我是新来使用熊猫,所以请指出任何最佳做法,我可能已经错过了我的代码。我编写了下面的python代码,从Yahoo Finance下载股票行情数据,只保留AAPL和MSFT的每日调整收盘值。然后我在dataframe中创建了一个新的列,其中包含AAPL的每日调整收盘价除以MSFT的每日调整收盘价(a),以及另一个列,它是相同计算的100天移动平均值(B)。最后一列是(A)/(B),最后一列是第二列的日变化百分比。你知道吗
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas_datareader import data as pdr
import fix_yahoo_finance as yf
yf.pdr_override()
import matplotlib.pyplot as plt
import pandas as pd
# Define the instruments to download. We would like to see Apple, and Microsoft
tickers = ['AAPL', 'MSFT']
# We would like all available data from 01/01/2000 until 12/31/2016.
start_date = '2010-01-01'
end_date = '2016-12-31'
# User pandas_reader.data.DataReader to load the desired data. As simple as that.
df = pdr.get_data_yahoo(tickers, start_date, end_date)['Adj Close']
df["AAPL/MSFT"] = df['AAPL']/df['MSFT']
df["100Day-MA APPL/MSFT"] = (df['AAPL']/df['MSFT']).rolling(window=100).mean()
df["AAPL/MSFT / MA"] = df["AAPL/MSFT"]/df["100Day-MA APPL/MSFT"]
df["% change AAPL/MSFT / MA"] = df["AAPL/MSFT / MA"].pct_change()
print(df.tail(9))
输出如下。我的问题是,我如何设置这样的条件语句,即观察每日价格的趋势,并根据这些信号发出买入/卖出信号。例如,df的最后一列表示连续5天增加的百分比变化。或者最后一列连续5天增加,但仍低于1。如有任何见解,我们将不胜感激:)
AAPL MSFT ... AAPL/MSFT / MA % change AAPL/MSFT / MA
Date ...
2016-12-19 113.490685 61.435783 ... 0.965480 -0.014949
2016-12-20 113.792313 61.358532 ... 0.969278 0.003933
2016-12-21 113.899338 61.358532 ... 0.970376 0.001133
2016-12-22 113.150139 61.368191 ... 0.963949 -0.006623
2016-12-23 113.373917 61.068832 ... 0.970687 0.006990
2016-12-27 114.093948 61.107452 ... 0.976266 0.005748
2016-12-28 113.607445 60.827412 ... 0.976658 0.000401
2016-12-29 113.578247 60.740505 ... 0.977934 0.001307
2016-12-30 112.692825 60.006588 ... 0.982284 0.004448
一种方法是计算差异,然后创建一个列,如果差异大于0,则为1,否则为0。然后对最后一列做滚动求和,如果你得到5,你就做点什么。你知道吗
这假设所有连续的天都存在,并且时间序列中没有漏洞。如果不是这样的话,你需要更多的诡计。你知道吗
你的问题问得太多了。我将告诉你如何找到连续增长。你知道吗
从数据帧的简化版本开始:
我们将询问
change
列是否比前一天增加:这给我们留下了:
然后我们要求在一个尾随的5天窗口上的最小值;该值将是
True
当且仅当所有5天都是True
:因此我们有:
相关问题 更多 >
编程相关推荐