агрегированные данные тиков, чтобы открыть высокий минимум закрытый, не связанный со временем - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел бы объединить данные тиков, хранящиеся в фрейме данных pandas, в открытый высокий-низкий-закрытый формат, но не связанный со временем, но агрегированный для каждых 100 тиков.После этого я хотел бы отобразить их на графике свечей с помощью matlibplot.

Я решил это уже для агрегации по времени, используя набор данных pandas с двумя значениями: TIMESTAMP и PRICE.У TIMESTAMP уже есть формат даты pandas, поэтому я работаю с этим:

df["TIMESTAMP"]= pd.to_datetime(df["TIMESTAMP"])
df = df.set_index(['TIMESTAMP'])
data_ohlc =  df['PRICE'].resample('15Min').ohlc()

Есть ли какая-либо функция, которая выполняет повторную выборку наборов данных в формате ohlc, не используя таймфрейм, а считая количество тактов?

После этого дело доходит до визуализации, поэтому для построения графика мне нужно изменить формат даты на mdates.Для функции candystick_ohlc требуется формат mdate:

data_ohlc["TIMESTAMP"] = data_ohlc["TIMESTAMP"].apply(mdates.date2num)
from mpl_finance import candlestick_ohlc
candlestick_ohlc(ax1,data_ohlc.values,width=0.005, colorup='g', colordown='r',alpha=0.75)

Итак, есть ли какая-либо функция для отображения графика подсвечника без mdates, потому что при агрегировании тиковых данных не будет временной зависимости?

1 Ответ

0 голосов
/ 11 сентября 2018

Поскольку в этой задаче нет встроенной функции, я написал ее сам. Для данного кадра данных должны быть указаны фактические значения в столбце «ЦЕНА»:

def get_pd_ohlc(mydf, interval):

    ## use a copy, so that the new column doesn't effect the original dataset
    mydf = mydf.copy()

    ## Add a new column to name tick interval
    interval = [(1+int(x/interval)) for x in range(mydf["PRICE"].count())]
    mydf["interval"] = interval

    ##Step 1: Group 
    grouped = mydf.groupby('interval')

    ##Step 2: Calculate different aggregations 
    myopen = grouped['PRICE'].first()
    myhigh = grouped['PRICE'].max()
    mylow = grouped['PRICE'].min()
    myclose = grouped['PRICE'].last()

    ##Step 3: Generate Dataframe:
    pd_ohlc = pd.DataFrame({'OPEN':myopen,'HIGH':myhigh,'LOW':mylow,'CLOSE':myclose})

    return(pd_ohlc)

pd_100 = get_pd_ohlc(df,100)
print (pd_100.head())

Я также нашел решение для отображения ist. Модуль mpl_finance имеет функцию Candice2_ohlc, которая не требует никакой информации о времени и дате. Вот код:

#Making plot
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ohlc

fig = plt.figure()
plt.rcParams['figure.figsize'] = (16,8)
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=12, colspan=1)

#Making candlestick plot
candlestick2_ohlc(ax1, pd_ohlc['OPEN'], pd_ohlc['HIGH'],
                  pd_ohlc['LOW'], pd_ohlc['CLOSE'], width=0.5,
                  colorup='#008000', colordown='#FF0000', alpha=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...