Strategi perdagangan Bitcoin berdasarkan pengiraan fasa bulan


Tarikh penciptaan: 2024-01-15 12:31:06 Akhirnya diubah suai: 2024-01-15 12:31:06
Salin: 0 Bilangan klik: 1352
1
fokus pada
1617
Pengikut

Strategi perdagangan Bitcoin berdasarkan pengiraan fasa bulan

Gambaran keseluruhan

Strategi ini berdasarkan pada kitaran fasa bulan sebagai isyarat perdagangan, menggabungkan beberapa petunjuk seperti RSI, MACD, OBV untuk mengenal pasti peluang perdagangan mata wang digital seperti bitcoin. Keuntungan utama strategi ini adalah menggunakan faktor luaran fasa bulan sebagai isyarat pembukaan perdagangan, dan tidak seperti kebanyakan strategi yang hanya bergantung pada petunjuk teknikal, dapat mengelakkan manipulasi pasaran hingga tahap tertentu.

Prinsip Strategi

Logik teras strategi ini adalah untuk menilai sama ada memenuhi syarat untuk melakukan lebih atau kurang berdasarkan tahap yang berbeza dalam kitaran fasa bulan. Rumus untuk mengira fasa bulan adalah:

Panjang kitaran fasa bulan = 29.5305882 hari Bilangan hari dari permulaan bulan yang penuh kepada masa semasa Usia fasa bulan = jarak hari dari bulan purnama yang diketahui % panjang kitaran fasa bulan Nilai fasa bulan = ((1 + cos ((umur fasa bulan/panjang kitaran fasa bulan*2*π))/2

Ukuran fasa bulan dapat menentukan apa fasa bulan semasa. Faza bulan berubah antara 0 dan 1, nilai yang lebih besar menunjukkan semakin dekat dengan bulan penuh, dan nilai yang lebih kecil menunjukkan semakin dekat dengan bulan baru.

Strategi ini berdasarkan kepada apakah nilai fasa bulan terhad memenuhi syarat untuk melakukan over atau under. Jika nilai fasa bulan lebih besar daripada nilai fasa bulan terhad ((0.51 lalai), maka ada peluang untuk melakukan over; jika nilai fasa bulan kurang daripada nilai fasa bulan terhad ((0.49 lalai), maka ada peluang untuk melakukan under.

Selain itu, strategi ini menggabungkan jumlah perdagangan, RSI, MACD dan lain-lain untuk mengelakkan isyarat perdagangan dalam keadaan yang tidak sesuai. Kedudukan hanya akan dibuka apabila jumlah perdagangan meningkat dan RSI dan MACD memenuhi syarat.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Menggunakan fasa bulan untuk memberikan isyarat dagangan yang unik untuk mengelakkan manipulasi pasaran
  2. Menggabungkan pelbagai petunjuk untuk menilai keadaan pasaran dan mengelakkan perdagangan dalam keadaan yang tidak baik
  3. Menggunakan purata gelombang sebenar ATR untuk mengira jumlah dagangan yang munasabah, dengan berkesan mengawal kerugian maksimum dalam satu dagangan
  4. Tetapkan hentian penarikan kerugian untuk mengelakkan kerugian besar
  5. Menggunakan OBV untuk menilai aliran dana dan mengelakkan dagangan negatif
  6. Tetapkan Stop Loss Bergerak untuk Kunci Keuntungan

Secara keseluruhannya, strategi ini memanfaatkan kelebihan unik fasa bulan dan dilengkapi dengan pelbagai petunjuk teknikal untuk mengenal pasti peluang perdagangan berkemungkinan tinggi dan mengawal risiko perdagangan dengan berkesan melalui kaedah kawalan risiko.

Analisis risiko

Strategi ini mempunyai risiko utama:

  1. Fasa bulan dan pergerakan pasaran kadang-kadang tidak sesuai
  2. Penetapan terhad yang tidak betul boleh menyebabkan strategi berhenti lebih awal
  3. Kemungkinan indikator MACD, RSI dan lain-lain memberi isyarat yang salah
  4. Tetapan stop loss bergerak yang tidak betul boleh menyebabkan strategi terlepas lebih banyak keuntungan

Untuk mengawal risiko ini, langkah-langkah berikut boleh diambil:

  1. Menyesuaikan penurunan fasa bulan untuk memastikan keberkesanan bulan
  2. Uji pelbagai set parameter penarikan balik dan pilih parameter yang optimum
  3. Menyesuaikan parameter MACD dan RSI untuk memastikan mereka memberi isyarat yang cekap
  4. Uji pelbagai set parameter berhenti bergerak untuk mendapatkan keuntungan maksimum

Dengan pengoptimuman parameter dan penggunaan indikator komposit, risiko perdagangan dapat dielakkan.

Arah pengoptimuman

Strategi ini masih mempunyai ruang untuk dioptimumkan:

  1. Ia boleh menguji parameter fasa bulan yang berbeza untuk mencari nilai terhad yang optimum.
  2. Ia boleh cuba untuk berdagang dalam kombinasi dengan lebih banyak petunjuk untuk meningkatkan kecekapan strategi;
  3. Ia boleh mengoptimumkan parameter-parameter dalam mekanisme penangguhan kerugian, mengimbangi risiko dan faedah;
  4. Ia boleh digunakan untuk memperluaskan pelbagai jenis transaksi dan membuktikan kebolehan strategi untuk digunakan secara meluas.

ringkaskan

Strategi ini mencapai perdagangan Bitcoin yang cekap melalui isyarat perdagangan yang unik pada bulan, dengan penunjuk teknologi arus perdana. Berbanding dengan strategi penunjuk tunggal, strategi ini dapat melindungi diri dari risiko manipulasi pasaran dengan kelebihan yang unik. Dengan pencegahan risiko dan parameter pengoptimuman, keuntungan yang lebih baik dapat diperoleh secara stabil.

Kod sumber strategi
/*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")