将线性趋势拟合到一组数据是直接的。但是如何将多条趋势线拟合到一个时间序列中?我将上涨和下跌趋势定义为高于或低于指数移动平均线的价格。当价格高于 EMA 时,我需要适应一个积极的趋势,当趋势转为消极时,一个新的消极趋势线等等。在我的market_data['Signal']熊猫数据框中下面的代码中,我告诉我趋势是上升 +1 还是下降 -1。
我猜我需要某种循环,但我无法弄清楚逻辑......
import pandas as pd
import pandas_datareader.data as web
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import matplotlib.dates as mdates
#Colecting data
market = '^DJI'
end = dt.datetime(2016, 12, 31)
start = dt.date(end.year-10, end.month, end.day)
market_data = web.DataReader(market, 'yahoo', start, end)
#Calculating EMA and difference
market_data['ema'] = market_data['Close'].ewm(200).mean()
market_data['diff_pc'] = (market_data['Close'] / market_data['ema']) - 1
#Defining bull/bear signal
TH = 0
market_data['Signal'] = …Run Code Online (Sandbox Code Playgroud) 我有一个带有刻度数据的pandas df'instr_bar'如下:
time
2016-07-29 16:07:24 5.72
2016-07-29 16:07:24 5.72
2016-07-29 16:07:24 5.72
2016-07-29 16:07:58 5.72
2016-07-29 16:07:58 5.72
2016-07-29 16:09:49 5.70
2016-07-29 16:09:50 5.73
2016-07-29 16:11:14 5.73
2016-07-29 16:11:14 5.73
2016-07-29 16:14:53 5.77
2016-07-29 16:14:53 5.77
2016-07-29 16:17:27 5.75
2016-07-29 16:17:43 5.76
2016-07-29 16:17:43 5.76
Run Code Online (Sandbox Code Playgroud)
我想把它变成5分钟的OHLC.在许多情况下,索引不是唯一的.
然后我使用以下代码: instr_bar = instr_bar.resample('5Min').ohlc()
然后我得到以下df:
open high low close
time
2016-07-29 15:40:00 5.74 5.74 5.74 5.74
2016-07-29 15:45:00 NaN NaN NaN NaN
2016-07-29 15:50:00 5.75 5.75 5.75 5.75
2016-07-29 15:55:00 5.75 5.75 5.72 5.72 …Run Code Online (Sandbox Code Playgroud) 我已经阅读了类似于我的问题的多个帖子,但我仍然无法弄明白.我有一个pandas df看起来如下(多天):
Out[1]:
price quantity
time
2016-06-08 09:00:22 32.30 1960.0
2016-06-08 09:00:22 32.30 142.0
2016-06-08 09:00:22 32.30 3857.0
2016-06-08 09:00:22 32.30 1000.0
2016-06-08 09:00:22 32.35 991.0
2016-06-08 09:00:22 32.30 447.0
...
Run Code Online (Sandbox Code Playgroud)
要计算我能做的vwap:
df['vwap'] = (np.cumsum(df.quantity * df.price) / np.cumsum(df.quantity))
Run Code Online (Sandbox Code Playgroud)
但是,我想重新开始每天(groupby),但我无法弄清楚如何使用(lambda?)函数.
df['vwap_day'] = df.groupby(df.index.date)['vwap'].apply(lambda ...
Run Code Online (Sandbox Code Playgroud)
速度至关重要.不胜感激任何帮助:)
pandas ×2
python ×2
dataframe ×1
for-loop ×1
lambda ×1
numpy ×1
python-3.x ×1
resampling ×1
time-series ×1
trend ×1