Стратегия торговли биткоинами, основанная на расчетах фаз Луны


Дата создания: 2024-01-15 12:31:06 Последнее изменение: 2024-01-15 12:31:06
Копировать: 0 Количество просмотров: 1352
1
Подписаться
1617
Подписчики

Стратегия торговли биткоинами, основанная на расчетах фаз Луны

Обзор

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

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

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

Длина лунного цикла = 29.5305882 дней Известно время полнолуния, число дней от начала полнолуния до текущего времени Фазовый возраст луны = количество дней от известного полнолуния в процентах от длины фазового цикла Лунная фаза = ((1 + cos ((Лунный возраст/длина лунного цикла)*2*π))/2

В зависимости от величины значения лунной фазы можно определить, какая сейчас лунная фаза. Луна изменяется от 0 до 1, чем больше значение, тем ближе к полной луне, чем меньше значение, тем ближе к новолунию.

Стратегия определяет, соответствует ли она условию лишнего или низкого ценообразования. Если лишнее ценообразование больше, чем лишнее ценообразование (по умолчанию 0.51), есть возможность сделать больше; если лишнее ценообразование меньше, чем лишнее ценообразование (по умолчанию 0.49), есть возможность сделать это.

Кроме того, стратегия также сочетает в себе такие показатели, как объем торгов, RSI, MACD, чтобы избежать появления торговых сигналов в нежелательных ситуациях. Позиции открываются только в том случае, если объем торгов увеличивается, RSI и MACD соответствуют условиям.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Уникальные торговые сигналы с использованием лунных фаз позволяют в некоторой степени избежать манипулирования рынком.
  2. Вместе с различными показателями, чтобы оценить состояние рынка и избежать торговли в неблагоприятных условиях
  3. Использование средней реальной ATR для расчета разумного объема сделок с эффективным контролем максимальных потерь в одной сделке
  4. Установка снятия убытков для предотвращения крупных потерь
  5. Использование OBV для определения движения средств и предотвращения неудачных сделок
  6. Настройка движущегося стоп-лока для закрепления прибыли

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

Анализ рисков

Основные риски этой стратегии:

  1. Лунные фазы и рыночные тенденции могут время от времени отклоняться.
  2. Неправильная установка стоп-пойнтов может привести к преждевременному прекращению стратегии
  3. Вероятность того, что MACD, RSI и другие индикаторы посылают ошибочные сигналы
  4. Неправильная настройка мобильной точки остановки может привести к тому, что стратегия пропустит больше прибыли.

Для борьбы с этими рисками можно принять следующие меры:

  1. Настройка находящихся на Луне фазных отклонений для обеспечения эффективности лунного доверия
  2. Тестирование множества параметров стоп-ретроспекции, выбор оптимальных параметров
  3. Настройка параметров MACD и RSI, чтобы они эффективно сигнализировали
  4. Тестирование множества перемещаемых стоп-параметров для максимальной прибыли

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

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

Однако есть еще много возможностей для оптимизации этой стратегии:

  1. В этом случае можно проверить параметры различных фаз Луны, чтобы найти оптимальные пороги.
  2. Подобные методы могут быть использованы для попыток объединения большего количества индикаторов для построения более эффективных стратегий.
  3. Оптимизация параметров механизма хранения убытков, сбалансированная риски и выгоды;
  4. Это позволит расширить диапазон сделок, а также доказать способность стратегии к генерализации.

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

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

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

//@version=5
strategy("Lunar Phase Strategy by Symphoenix", overlay=true)

// Input parameters
start_year = input(2023, title="Start year")
end_year = input(2023, title="End year")
longPhaseThreshold = input(0.51, title="Long Phase Threshold")
shortPhaseThreshold = input(0.49, title="Short Phase Threshold")
riskPerTrade = input(0.05, title="Risk Per Trade (as a % of Equity)")
stopLossPerc = input(0.01, title="Stop Loss Percentage")
atrLength = input(21, title="ATR Length for Volatility")
trailPerc = input(0.1, title="Trailing Stop Percentage")
maxDrawdownPerc = input(0.1, title="Maximum Drawdown Percentage")
volumeLength = input(7, title="Volume MA Length")

// Constants for lunar phase calculation and ATR
atr = ta.atr(atrLength)
volMA = ta.sma(volume, volumeLength) // Volume moving average

// Improved Lunar Phase Calculation
calculateLunarPhase() =>
    moonCycleLength = 29.5305882
    daysSinceKnownFullMoon = (time - timestamp("2019-12-12T05:12:00")) / (24 * 60 * 60 * 1000)
    lunarAge = daysSinceKnownFullMoon % moonCycleLength
    phase = ((1 + math.cos(lunarAge / moonCycleLength * 2 * math.pi)) / 2)
    phase

lunarPhase = calculateLunarPhase()

// Advanced Volume Analysis
priceChange = ta.change(close)
obv = ta.cum(priceChange > 0 ? volume : priceChange < 0 ? -volume : 0)

// Additional Technical Indicators
rsi = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Calculate Position Size based on Volatility and Account Equity
calculatePositionSize() =>
    equity = strategy.equity
    riskAmount = equity * riskPerTrade
    positionSize = riskAmount / atr
    if positionSize > 1000000000000
        positionSize := 1000000000000
    positionSize

positionSize = calculatePositionSize()

// Maximum Drawdown Tracking
var float maxPortfolioValue = na
maxPortfolioValue := math.max(maxPortfolioValue, strategy.equity)
drawdown = (maxPortfolioValue - strategy.equity) / maxPortfolioValue

// Check for maximum drawdown
if drawdown > maxDrawdownPerc
    strategy.close_all()
    strategy.cancel_all()

// Volume Analysis
isVolumeConfirmed = volume > volMA

// Date Check for Backtesting Period
isWithinBacktestPeriod = year >= start_year and year <= end_year

// Entry and Exit Conditions
// Adjusted Entry and Exit Conditions
longCondition = lunarPhase > longPhaseThreshold and lunarPhase < 0.999 and isVolumeConfirmed and obv > obv[1] and rsi < 70 and macdLine > signalLine and isWithinBacktestPeriod
shortCondition = lunarPhase < shortPhaseThreshold and lunarPhase > 0.001 and isVolumeConfirmed and obv < obv[1] and rsi > 30 and macdLine < signalLine and isWithinBacktestPeriod

if longCondition
    if strategy.position_size < 0
        strategy.close_all()
    if strategy.position_size < positionSize
        strategy.entry("Long", strategy.long, qty=positionSize)
        strategy.exit("Exit Long", "Long", trail_offset=atr * trailPerc, trail_points=atr)

if shortCondition
    if strategy.position_size > 0
        strategy.close_all()
    if strategy.position_size > -positionSize
        strategy.entry("Short", strategy.short, qty=positionSize)
        strategy.exit("Exit Short", "Short", trail_offset=atr * trailPerc, trail_points=atr)

// Implementing Stop-Loss Logic
longStopLoss = strategy.position_avg_price * (1 - stopLossPerc)
shortStopLoss = strategy.position_avg_price * (1 + stopLossPerc)

if strategy.position_size > 0 and close < longStopLoss
    strategy.close("Long")

if strategy.position_size < 0 and close > shortStopLoss
    strategy.close("Short")