Количественная торговая стратегия Momentum, основанная на лунном цикле на рынке криптовалют

Lunar Calendar Cyclical Trading ETHUSDT Fixed Date Entry/Exit Quantitative Strategy
Дата создания: 2025-08-11 09:09:22 Последнее изменение: 2025-08-11 09:09:22
Копировать: 0 Количество просмотров: 182
2
Подписаться
319
Подписчики

Количественная торговая стратегия Momentum, основанная на лунном цикле на рынке криптовалют Количественная торговая стратегия Momentum, основанная на лунном цикле на рынке криптовалют

Обзор

Эта стратегия является методом торговли криптовалютами, основанным на календарных датах, для покупки и продажи операций с использованием определенных дат календарного цикла. Эта стратегия начинается с нового календарного года и продолжается до конца декабря календарного года, следуя простому правилу: покупать на 5 день каждого календарного месяца и продавать на 26 день каждого календарного месяца.

Стратегический принцип

Основная идея стратегии основана на влиянии лунного цикла на криптовалютный рынок. Код реализует эту идею следующим образом:

  1. Начнем с определения даты начала нового календарного года и количества дней в месяце в каждом году, охватывающем период с 2020 по 2026 год.
  2. Вычислите разницу между текущей датой и календарным новым годом, чтобы определить текущий календарный месяц и дату.
  3. Когда календарная дата наступает на пятый день, и в настоящее время нет позиций, запускается сигнал “покупай”.
  4. Сигнал продажи запускается, когда у вас есть позиция на 26-й день календарного месяца.
  5. Покупая криптовалюту, учитывайте влияние сдвига и комиссионных, используя все имеющиеся средства, чтобы купить как можно больше криптовалют.
  6. При продаже ликвидировать все свои позиции, чтобы достичь прибыли или прекратить убытки.

Стратегия использует точный метод подсчета дат, который сохраняет число дней в каждом календарном месяце с помощью арифметики, а также начисляет общее число дней, начиная с нового календарного года, чтобы точно определить текущую календарную дату. Этот метод гарантирует точный триггер торговых сигналов.

Стратегические преимущества

Анализ кода этой стратегии позволяет выделить следующие преимущества:

  1. Простые и четкие правилаФиксированные даты покупки и продажи делают стратегию очень интуитивно понятной и легкой для понимания и исполнения, уменьшая субъективные суждения трейдера.
  2. Рассмотрение факторов рыночного тренияВ стратегии учтены комиссионные и скользящие пункты в размере 0,1%, что приближает результаты отбора к реальному состоянию торгов.
  3. Высокая эффективность использования средствНа каждой сделке используется 100% доступных средств, чтобы максимизировать потенциальный доход.
  4. Уникальный взгляд на лунный циклВ отличие от традиционного технического анализа, эта стратегия включает в себя элементы календаря, которые могут запечатлеть уникальные модели, связанные с поведением инвесторов на азиатских рынках.
  5. Долгосрочное применениеНапример, если вы используете стратегию, которая дает данные о календаре с 2020 по 2026 год, то вы можете использовать этот метод в долгосрочной перспективе.
  6. Визуальная помощь: Помогает трейдерам визуально отслеживать выполнение стратегии, отображая на графике знаки с календарными датами.
  7. Избегайте чрезмерной торговлиПоскольку в Китае существуют различные виды торговли, в некоторых странах существуют различные виды торговли, например, в Китае и Китае.

Стратегический риск

Несмотря на вышеперечисленные преимущества, эта стратегия несет в себе ряд потенциальных рисков:

  1. Отсутствие механизмов управления рискамиЕсли рынок сильно упадет после покупки, это может привести к значительным потерям.
  2. Игнорируя тенденции и состояние рынкаСтратегия заключается в том, чтобы торговать только на дату, без учета общей тенденции рынка, волатильности или других технических показателей.
  3. Предположение о существовании периодических законовВ этой стратегии предполагается какая-то связь между лунным циклом и ценой криптовалюты, но эта связь может быть нестабильной или отсутствовать.
  4. Ограничения по конкретному времениХотя данные предоставлены для 2020-2026 годов, данные календаря для будущих лет нуждаются в обновлении, и стратегия может не работать за пределами этого диапазона.
  5. Риск ликвидностиВ некоторых странах, например, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае, в Китае.
  6. Вероятность ошибки в вычислении датыЛюбая ошибка в расчете календарных дат может привести к ошибочному торговому сигналу.
  7. Отсутствие адаптацииВ то же время, в некоторых странах, например в Китае, существуют ограничения на торговлю в течение определенного периода времени, что приводит к тому, что торговля в течение определенного периода времени может быть неэффективной.

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

Направление оптимизации стратегии

В результате глубокого анализа кода можно сделать следующие выводы по оптимизации:

  1. Внедрение механизма стоп-лосса: добавление стоп-ложа в процентном или абсолютном размере, автоматическое ликвидация позиций при достижении определенного порога, чтобы избежать значительных потерь. Код оптимизации может быть добавлен аналогичноif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)Условное решение.

  2. Включение подтверждения технических показателей: в сочетании с трендовым индикатором (например, движущаяся средняя) или динамическим индикатором (например, RSI) в качестве вспомогательного условия, торгуйте на календарные даты только в том случае, если технический индикатор дает благоприятный сигнал. Это повышает качество сигнала.

  3. Оптимизация даты покупки и продажи: Проанализируйте, какие календарные даты, используя исторические данные, на самом деле обеспечивают наилучшее время для покупки и продажи, а не фиксированное использование 5 и 26 дней. Возможно, некоторые конкретные даты будут работать лучше.

  4. Управление некоторыми позициями: изменение стратегии для торговли с использованием части средств, а не 100% средств, или изменение размера позиции в соответствии с динамикой волатильности рынка, чтобы распределить риск.

  5. Добавить фильтр состояния рынка: приостанавливать исполнение стратегии в экстремальных рыночных условиях (например, высокая волатильность или явная тенденция медвежьего рынка), чтобы избежать торговли в неблагоприятных условиях.

  6. Расширенный временной интервал: Добавить данные календаря на большее количество лет или разработать функцию автоматического вычисления календарных дат, чтобы стратегия могла работать бесконечно долго.

  7. Повышение торговли различными видамиРасширять стратегию на несколько криптовалют или других классов активов, наблюдая за различными показателями на различных рынках в течение календарного цикла.

Реализация этих направлений оптимизации может значительно повысить гибкость и адаптивность стратегии, сохраняя при этом ее простоту и интуитивность.

Подвести итог

Стратегия торговли криптовалютами, основанная на календарных циклах, предоставляет уникальную торговую перспективу, используя определенные календарные даты для совершения операций по покупке и продаже. Наибольшие преимущества этой стратегии заключаются в ее простых четких правилах и простоте внедрения, в сочетании с уникальным фактором календарных циклов, которые могут улавливать рыночные модели, которые игнорируются при обычном техническом анализе.

Тем не менее, эта стратегия также сталкивается с проблемой отсутствия управления рисками и адаптации к рынку. Для повышения эффективности стратегии рекомендуется внедрение мер по улучшению, таких как механизм остановки убытков, подтверждение технических показателей и оптимизация даты покупки и продажи. Эти оптимизации могут не только уменьшить потенциальный риск, но и повысить адаптивность стратегии в различных рыночных условиях.

Следует отметить, что любая торговая стратегия должна быть адекватно протестирована задним ходом и вперед, чтобы убедиться, что она работает в реальных рыночных условиях. При использовании этой стратегии трейдер должен соответственно адаптироваться к собственной способности к риску и инвестиционным целям, а также принимать более всесторонние торговые решения в сочетании с другими методами анализа.

Исходный код стратегии
/*backtest
start: 2024-08-11 00:00:00
end: 2025-08-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Lunar ETHUSDT Trading 100% Invest with Fee & Slippage (2020~2026)", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1)

// Fee and slippage settings
feePercent = 0.1    // 0.1%
slippageTicks = 3
tickSize = syminfo.mintick
slippage = slippageTicks * tickSize

// Function for lunar new year start date and monthly lengths by year
f_get_lunar_data() =>
    y = year(time)
    if y == 2020
        [timestamp("Asia/Seoul", 2020, 1, 25, 0, 0), array.from(29,30,29,30,29,30,29,30,29,30,30,29)]
    else if y == 2021
        [timestamp("Asia/Seoul", 2021, 2, 12, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30)]
    else if y == 2022
        [timestamp("Asia/Seoul", 2022, 2, 1, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
    else if y == 2023
        [timestamp("Asia/Seoul", 2023, 1, 22, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
    else if y == 2024
        [timestamp("Asia/Seoul", 2024, 2, 10, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30,29)]
    else if y == 2025
        [timestamp("Asia/Seoul", 2025, 1, 29, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
    else if y == 2026
        [timestamp("Asia/Seoul", 2026, 2, 17, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
    else
        [na, array.new_int()]

// Function to create cumulative monthly days array
f_get_lunar_md(days_arr) =>
    arr = array.new_int()
    sum = 0
    for i = 0 to array.size(days_arr) - 1
        sum += array.get(days_arr, i)
        array.push(arr, sum)
    arr

// Get lunar start date and monthly lengths
[ts_start, lunar_lengths] = f_get_lunar_data()
valid = not na(ts_start)
days_since = valid ? math.floor((time - ts_start) / 86400000) : na
cumulative = valid ? f_get_lunar_md(lunar_lengths) : na

// Declare lunar month, day, last day variables
var int lunar_month = na
var int lunar_day = na
var int lunar_last_day = na

// Calculate lunar date
if valid and not na(days_since) and days_since >= 0
    lunar_month := na
    lunar_day := na
    lunar_last_day := na
    for i = 0 to array.size(cumulative) - 1
        cum = array.get(cumulative, i)
        prev = i == 0 ? 0 : array.get(cumulative, i - 1)
        if days_since < cum
            lunar_month := i + 1
            lunar_day := days_since - prev + 1
            lunar_last_day := array.get(lunar_lengths, i)
            break
else
    lunar_month := na
    lunar_day := na
    lunar_last_day := na

// Buy condition: Lunar day 5 and no current position
buy_condition = not na(lunar_day) and lunar_day == 5 and strategy.position_size == 0

// Sell condition: Lunar day 26 and holding position
sell_condition = not na(lunar_day) and lunar_day == 26 and strategy.position_size > 0

// Buy/sell price adjusted for slippage and fee
price_buy = close + slippage
price_buy_with_fee = price_buy * (1 + feePercent * 0.01)

price_sell = close - slippage
price_sell_with_fee = price_sell * (1 - feePercent * 0.01)

// Calculate buy quantity using 100% of equity
qty = math.floor(strategy.equity / price_buy_with_fee)

// Buy order (limit)
if buy_condition and qty > 0
    strategy.entry("Lunar Buy", strategy.long, qty, limit=price_buy)

// Sell order (close all)
if sell_condition and strategy.position_size > 0
    strategy.close("Lunar Buy")

// True range variable (for label position adjustment)
tr = ta.tr(true)

// Date format creation
yr = year(time)
mo = month(time)
dy = dayofmonth(time)
mo_str = mo < 10 ? "0" + str.tostring(mo) : str.tostring(mo)
dy_str = dy < 10 ? "0" + str.tostring(dy) : str.tostring(dy)
solar_str = str.tostring(yr) + "-" + mo_str + "-" + dy_str

// Display solar and lunar date and position label (on bar close)
if barstate.islastconfirmedhistory and not na(lunar_day)
    label.new(bar_index, high - tr * 6,  "Solar: " + solar_str + "\nLunar: " + str.tostring(lunar_month) + "-" + str.tostring(lunar_day) ,
      style=label.style_label_up, size=size.normal, color=color.new(color.teal, 50), textcolor=color.white)

// Display "15" label at bottom on lunar day 15 (lowest of last 50 bars - 1 true range)
if not na(lunar_day) and lunar_day == 15
    low_offset = ta.lowest(low, 50) - tr
    label.new(bar_index, low_offset, "15", style=label.style_label_down, color=color.orange, textcolor=color.white, size=size.normal)