Блог им. Riskplayer

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

Попробуем быстренько исследовать, можно ли извлечь что-нибудь из лунного цикла с помощью питона и библиотек 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()
Торговля по луне
Мда ужжж… В этом году луна не помогла нам заработать.
★5
21 комментарий
Обычно такими исследованиями занимаются британские ученые…
*ложный процент, Иногда, в целях развлечения можно.
avatar
Интересно, а есть ли влияние солнечного цикла активности, 11 летнего например.
avatar
Alexide, Не знаю. Не исследовал этот вопрос. Хотя, наверное, интересно посмотреть.
avatar
Riskplayer, А что ты исследовал? Квадрат 9 Ганна? Годовой календарь 360 градусов?
avatar
ezomm, Исследовал простую вещь. В лунном цикле есть ли благоприятные дни для покупок или нет. 
avatar
Riskplayer, попробуй исследовать наш день.Типа до 17-00 продавать, а с 17-00 до 10-00 покупать? Например в Сипи500 рабочая сессия продажа, а дальше покупка.У них Азия покупает Сипи500.
avatar
сколько свободного времени у людей :)
Коллега!
Была похожая статья у меня, но потом удалил:
https://smart-lab.ru/blog/739004.php
Дмитрий Овчинников, Спасибо. Видимо, пропустил.
avatar
Riskplayer, 
нашел конфигурационный файл. Там была и вот такая система, в общем то как у вас, только я не по закрытию дня, естественно, а в интрадее: 
открытие от 23.24 до 23.44
закрытие от 25.97

Дмитрий Овчинников, Спасибо! Очень интересно. Цифры получились очень близкие. 
avatar
По солнцу надо, а не по луне!
avatar
Вы берете временной промежуток форс мажорного периода..

Это неправильно.
Возьмите например 2010-2012 гг
avatar
Над ещё пробовать оценить влияние ретроградности меркурия
avatar
Походу нерезы были подвержены лунным циклам. На наших инвесторов не действует
avatar
А где вы скачали исторические данные? Вы их проверяли с оригиналом? Сколько я не скачивал бесплатных данных, везде есть дефекты. Кроме того, выборка меньше 10 лет — это очень мало. Мой совет — сделайте интерполяцию данных. То есть данные надо сначала подготовить, как это и есть наука.
avatar
И ещё, если хотите дельного совета, выкладывайте код и исторические данные полностью, да хоть в яндекс облако. А то вашу идею я мог бы развить, а с нуля лень даже 5 строчек думать.

Я вон цикл по золоту экстраполировал:
smart-lab.ru/mobile/topic/1073082/


Могу выложить, я не знал, что здесь тоже есть программисты.
avatar
Кстати, а зачем вы используете чью-то лунную библиотеку? Лучше самому сделать и фазы считать, вы учитывали таймзоны?
avatar
Ivan Gurov, Эта библиотека сама все считает и учитывает таймзоны. 
avatar
Хороший пример, иллюстрирующий возможности переподгонки. Всегда можно найти прибыльную комбинацию на историчесих данных. 
avatar

теги блога Riskplayer

....все тэги



UPDONW
Новый дизайн