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 летнего например.
      • ezomm
        06 ноября 2024, 19:44
        Riskplayer, А что ты исследовал? Квадрат 9 Ганна? Годовой календарь 360 градусов?
          • ezomm
            07 ноября 2024, 10:46
            Riskplayer, попробуй исследовать наш день.Типа до 17-00 продавать, а с 17-00 до 10-00 покупать? Например в Сипи500 рабочая сессия продажа, а дальше покупка.У них Азия покупает Сипи500.
  • Неудержимый трейдер
    06 ноября 2024, 19:56
    сколько свободного времени у людей :)
  • Дмитрий Овчинников
    06 ноября 2024, 20:16
    Коллега!
    Была похожая статья у меня, но потом удалил:
    https://smart-lab.ru/blog/739004.php
      • Дмитрий Овчинников
        06 ноября 2024, 23:16
        Riskplayer, 
        нашел конфигурационный файл. Там была и вот такая система, в общем то как у вас, только я не по закрытию дня, естественно, а в интрадее: 
        открытие от 23.24 до 23.44
        закрытие от 25.97

  • Моисей
    06 ноября 2024, 21:47
    По солнцу надо, а не по луне!
  • Al Bax
    06 ноября 2024, 21:53
    Вы берете временной промежуток форс мажорного периода..

    Это неправильно.
    Возьмите например 2010-2012 гг
  • zzznth
    06 ноября 2024, 23:09
    Над ещё пробовать оценить влияние ретроградности меркурия
  • FatCat
    07 ноября 2024, 00:49
    Походу нерезы были подвержены лунным циклам. На наших инвесторов не действует
  • Ivan Gurov
    07 ноября 2024, 01:02
    А где вы скачали исторические данные? Вы их проверяли с оригиналом? Сколько я не скачивал бесплатных данных, везде есть дефекты. Кроме того, выборка меньше 10 лет — это очень мало. Мой совет — сделайте интерполяцию данных. То есть данные надо сначала подготовить, как это и есть наука.
  • Ivan Gurov
    07 ноября 2024, 01:09
    И ещё, если хотите дельного совета, выкладывайте код и исторические данные полностью, да хоть в яндекс облако. А то вашу идею я мог бы развить, а с нуля лень даже 5 строчек думать.

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


    Могу выложить, я не знал, что здесь тоже есть программисты.
  • Ivan Gurov
    07 ноября 2024, 01:11
    Кстати, а зачем вы используете чью-то лунную библиотеку? Лучше самому сделать и фазы считать, вы учитывали таймзоны?
  • Poll
    07 ноября 2024, 01:24
    Хороший пример, иллюстрирующий возможности переподгонки. Всегда можно найти прибыльную комбинацию на историчесих данных. 
      • Poll
        07 ноября 2024, 23:57
        Riskplayer, добавьте еще пару параметров, например активность солнца или облачность или скорость ветра и эквити станет еще красивее))
  • Дмитрий-сан
    07 ноября 2024, 15:48
    Думаю, неправильный подход. Я бы смотрел строго новолуния и полнолуния. В разные месяцы новолуния попадают на разные лунные дни: 14, 15, 16 дни. А вы чешете 14, 15, 16 лунный дни под одну гребенку. 
    Новолуния тоже не все одинаковые. Есть месяца, где есть 30 лунный день, а есть, где такого дня нет. Посмотреть, как влияет наличие, отсутствие 30 лунного дня.
    Как влияет наличие в году дополнительных новолуний («Чёрная Луна»), полнолуний («Голубая Луна»)? 

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

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