Специальная скользящая средняя - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу предсказать направление изменения цены. Термин цена используется для обозначения средней цены акции, которая определяется как среднее между лучшей ценой предложения и Лучшая цена предложения в момент времени t:

enter image description here

Это виртуальное значение цены, так как в эта точная цена, но предсказывающая ее движение вверх или вниз дает хорошую оценку цены будущих заказов. Набор из дискретный выбор должен быть построен из наших данных для использования в качестве целей для нашей модели классификации. Просто используя p (t)> p (t + k) для определить направление средней цены введет неуправляемо количество шума, так как наименьшее изменение будет зарегистрировано как движение вверх или вниз.

Среднее значение предыдущих k средних цен, обозначенное m_b, и среднее значение следующих k средних цен, обозначенное m_a, определяются как:

enter image description here

Вот пример:

0        2015-03-31 09:30:00.233  2.4645
1        2015-03-31 09:30:00.233  2.4634
2        2015-03-31 09:34:44.116  2.5363
3        2015-03-31 09:34:44.116  2.5434
4        2015-03-31 09:36:38.535  2.5356
5        2015-03-31 09:36:38.535  2.5432
6        2015-03-31 09:36:38.537  2.5463
7        2015-03-31 09:36:38.537  2.5432
8        2015-03-31 09:45:10.512  2.5274
9        2015-03-31 09:45:10.512  2.5262
10       2015-03-31 09:45:10.523  2.5299
11       2015-03-31 09:45:10.529  2.5234
12       2015-03-31 09:45:10.531  2.5276
13       2015-03-31 09:45:10.568  2.5212
14       2015-03-31 09:45:10.569  2.5262
15       2015-03-31 09:45:10.635  2.5143
16       2015-03-31 09:45:10.684  2.5267
17       2015-03-31 09:45:10.686  2.5212
18       2015-03-31 10:00:02.111  2.5213
19       2015-03-31 10:00:02.111  2.5298
20       2015-03-31 10:00:02.112  2.5212
21       2015-03-31 10:00:02.381  2.5263
22       2015-03-31 10:00:02.472  2.5212
23       2015-03-31 10:00:02.486  2.5298
24       2015-03-31 10:00:02.524  2.5298
25       2015-03-31 10:00:04.026  2.5270
26       2015-03-31 10:06:54.546  2.5212
27       2015-03-31 10:06:54.558  2.5234
28       2015-03-31 10:06:54.558  2.5253
29       2015-03-31 10:06:54.566  2.5234

В любое время я хочу вычислить m_a и m_b, но я не знаю, как это сделать с пандами или numpy. Предполагая, что горизонт k = 5, как я могу кодировать эти две специальные скользящие средние с помощью python? Поэтому мне нужны две функции, то есть leftmovingaverage() и rightmovingaverage(), и рядом с колонкой цен отображаются два столбца с именами M_A и M_B.

.

Пример:

Изображение у нас есть 1000 данных времени. И установите k = 600, тогда вы можете вычислить m_a из k = 590 ~ 600 и m_b из k = 601 ~ 610. Все хорошо объясните в следующей ссылке: http://poseidon.csd.auth.gr/papers/PUBLISHED/CONFERENCE/pdf/2017/2017_CBI_CNNLOB.pdf.

1 Ответ

0 голосов
/ 24 апреля 2018
def moving_average(df, col_name='Price', k=3):
    ma_cols = []
    mb_cols = []
    temp_df = DataFrame()

    for i in range(0, k+1):
        ma_col = 'M_A_{}'.format(i)
        ma_cols.append(ma_col)
        mb_col = 'M_B_{}'.format(i)
        mb_cols.append(mb_col)
        temp_df[ma_col] = df[col_name].shift(i)
        temp_df[mb_col] = df[col_name].shift(-i)

    df['M_A'] = temp_df[ma_cols].mean(axis=1, skipna=True, numeric_only=True)
    df['M_B'] = temp_df[mb_cols].mean(axis=1, skipna=True)
    print (df)
    return df

moving_average(df)

Для обоих суммирований оба индекса начинаются с i = 1, а сумма делится на k + 1 вместо k

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...