Riskplayer
Riskplayer личный блог
06 ноября 2024, 19:27

Торговля по луне

Попробуем быстренько исследовать, можно ли извлечь что-нибудь из лунного цикла с помощью питона и библиотек pandas и pylunar на индексе IMOEX. Предварительно устанавливаем pylunar. Библиотека дает дает информацию о луне на основе локации и даты.

import pylunar
import pandas as pd
import matplotlib.pyplot as plt

*** Теперь готовим дневные данные индекса IMOEX ***
*** Если есть минутные данные в формате DataFrame, то делаем следующее  ***

df = intraday_df.resample('D').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
df = df.dropna() 

Теперь в df содержатся дневки IMOEX.

  *** Вычисляем процентное изменение цены за один день
df['pct'] = df['Close'].pct_change().shift(-1)  

  *** Изменение цены за один день
df['diff'] = df['Close'].diff().shift(-1)              

Делаем стобец для хранения лунных дней
df['age'] = 0.0

mi = pylunar.MoonInfo((55,45,7),(37,36,56))

Здесь цифры (55,45,7),(37,36,56) — широта и долгота г.Москвы
Вычисляем «возраст» лунного цикла на 15 ч 40 мин UTC (т.е по московскому времени 18:40 — это время закрытия основной сессии).

for i in range(len(df)):

    mi.update((df.index[i].year, df.index[i].month, df.index[i].day, 15, 40,0))
    df.at[df.index[i], 'age'] = mi.age()

Здесь в цикле в столбец «age» вычисляем для каждой даты число лунного дня.
Для простоты создаем еще столбец «round_age», где храним округленные числа лунных дней.
df['round_age'] = df['age'].round()

А теперь разбиваем данные на две выборки, одна выборка df_1 с 2012 до 01.01.2024 для вычисления, вторая df_2 для проверки на данных 2024 года.

from datetime import datetime
finish_date = datetime(2024, 1, 1)
df_1 = df[df.index < finish_date]
df_2 = df[df.index > finish_date]

Смотрим распределение средних процентных доходностей по лунным дням.
td=df.groupby(['round_age'])['pct'].mean()
td.plot(kind = 'bar')



Торговля по луне
Видим, что с 23 по 25 лунный день есть положительные доходности. Т.е. стратегия следующая: на закрытие дня 23 лунного дня покупаем и на закрытии 26 дня продаем. Смотрим доход нарастающим итогом на первой выборке.

df_1[(df_1['round_age'] >= 23) & (df_1['round_age'] <= 25)]['diff'].cumsum().plot()
Торговля по луне

Вроде годно, но похоже, система поломалась в конце выборке. Проверяем на второй выборке:
df_2[(df_2['round_age'] >= 23) & (df_2['round_age'] <= 25)]['diff'].cumsum().plot()
Торговля по луне
Мда ужжж… В этом году луна не помогла нам заработать.
26 Комментариев
  • Да пошли вы все...
    06 ноября 2024, 19:30
    Обычно такими исследованиями занимаются британские ученые…
  • Alexide
    06 ноября 2024, 19:31
    Интересно, а есть ли влияние солнечного цикла активности, 11 летнего например.
  • Неудержимый трейдер
    06 ноября 2024, 19:56
    сколько свободного времени у людей :)
  • Дмитрий Овчинников
    06 ноября 2024, 20:16
    Коллега!
    Была похожая статья у меня, но потом удалил:
    https://smart-lab.ru/blog/739004.php

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн