Strategi Perdagangan Bitcoin Berbasis Fase Bulan

Penulis:ChaoZhang, Tanggal: 2024-01-15 12:31:06
Tag:

img

Gambaran umum

Strategi ini menggunakan siklus fase bulan sebagai sinyal perdagangan, dikombinasikan dengan RSI, MACD, OBV dan indikator lainnya untuk mengidentifikasi peluang perdagangan untuk cryptocurrency seperti Bitcoin. Keuntungan utama dari strategi ini adalah memanfaatkan fase bulan, faktor eksternal, sebagai pemicu perdagangan, yang berbeda dari sebagian besar strategi yang hanya mengandalkan indikator teknis, sehingga dapat menghindari manipulasi pasar sampai batas tertentu.

Logika Strategi

Logika inti dari strategi ini adalah untuk menentukan peluang panjang atau pendek berdasarkan tahap yang berbeda dari siklus fase bulan.

Panjang siklus fase bulan = 29,5305882 hari Mengingat waktu bulan purnama yang diketahui, jumlah hari dari bulan purnama itu sampai waktu saat ini dapat dihitung
Usia bulan = Hari sejak bulan purnama yang diketahui % Panjang siklus fase bulan Nilai fase bulan = (1 + cos(umur bulan / panjang siklus fase bulan * 2 * π)) / 2

Nilai fase bulan berfluktuasi antara 0 sampai 1. Semakin besar nilai berarti lebih dekat dengan bulan purnama, sementara nilai yang lebih kecil berarti lebih dekat dengan bulan baru.

Strategi ini menilai peluang panjang atau pendek berdasarkan ambang fase bulan. Jika nilai fase bulan lebih besar dari ambang panjang (default 0.51), ada kemungkinan untuk pergi panjang. Jika nilai fase bulan kurang dari ambang pendek (default 0.49), ada kemungkinan untuk pergi pendek.

Selain itu, strategi ini juga menggabungkan indikator seperti volume perdagangan, RSI dan MACD untuk menghindari sinyal perdagangan selama kondisi yang tidak menguntungkan.

Analisis Keuntungan

Keuntungan utama dari strategi ini:

  1. Menggunakan sinyal perdagangan fase bulan yang unik, menghindari manipulasi pasar sampai batas tertentu
  2. Menggabungkan indikator untuk menentukan kondisi pasar, menghindari perdagangan di lingkungan yang tidak menguntungkan
  3. Menggunakan ATR untuk menghitung ukuran posisi yang wajar, secara efektif mengendalikan kerugian maksimum per perdagangan
  4. Set drawdown stop loss untuk mencegah kerugian besar
  5. Hakim arah aliran dana dengan OBV, hindari perdagangan melawan tren
  6. Atur stop loss untuk mengunci keuntungan

Singkatnya, strategi ini memanfaatkan sepenuhnya keuntungan unik dari fase bulan, dan menggabungkan beberapa indikator teknis untuk mengidentifikasi peluang perdagangan dengan probabilitas tinggi, sementara memanfaatkan mekanisme pengendalian risiko untuk mendefinisikan risiko perdagangan secara efektif.

Analisis Risiko

Risiko utama dari strategi ini meliputi:

  1. Fase bulan dan pergerakan pasar kadang-kadang gagal
  2. Stop loss penarikan yang tidak tepat dapat menghentikan strategi sebelum waktunya
  3. Kemungkinan sinyal palsu dari MACD, RSI
  4. Stop loss trailing yang tidak tepat dapat menyebabkan strategi kehilangan keuntungan yang lebih besar

Untuk mengendalikan risiko ini, langkah-langkah berikut dapat diambil:

  1. Sesuaikan ambang fase bulan untuk memastikan sinyal bulan yang valid
  2. Uji beberapa parameter stop loss drawdown dan pilih optimal
  3. Perbaiki parameter MACD dan RSI untuk menghasilkan sinyal secara efisien
  4. Uji beberapa set parameter stop loss trailing untuk keuntungan maksimum

Melalui optimalisasi parameter dan indikator gabungan, risiko perdagangan dapat dikurangi secara besar-besaran.

Arahan Optimasi

Masih ada ruang untuk optimalisasi lebih lanjut dari strategi ini:

  1. Uji parameter bulan yang berbeda untuk menemukan ambang optimal
  2. Cobalah menggabungkan lebih banyak indikator untuk perdagangan ensemble dan meningkatkan efisiensi
  3. Mengoptimalkan mekanisme stop loss parameter untuk menyeimbangkan risiko dan pengembalian
  4. Ekspansi ke lebih banyak aset perdagangan untuk menguji kemampuan generalisasi

Kesimpulan

Strategi ini mewujudkan perdagangan Bitcoin yang efisien melalui sinyal perdagangan fase bulan yang unik, dikombinasikan dengan indikator teknis arus utama. Dibandingkan dengan strategi indikator tunggal, strategi ini dapat melindungi risiko manipulasi pasar dengan lebih baik dan memiliki keuntungan yang unik. Dengan memanfaatkan stop loss untuk mencegah risiko dan pengoptimalan parameter, pengembalian yang stabil dan baik dapat diperoleh secara stabil. Masih ada ruang besar untuk meningkatkan strategi ini dan memiliki prospek aplikasi yang menjanjikan.


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


Lebih banyak