Strategi Perdagangan Bitcoin Berasaskan Fasa Bulan

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

img

Ringkasan

Strategi ini menggunakan kitaran fasa bulan sebagai isyarat perdagangan, digabungkan dengan RSI, MACD, OBV dan penunjuk lain untuk mengenal pasti peluang perdagangan untuk mata wang kripto seperti Bitcoin. Keuntungan utama strategi ini adalah menggunakan fasa bulan, faktor luaran, sebagai pencetus perdagangan, yang berbeza dengan kebanyakan strategi yang hanya bergantung pada penunjuk teknikal, sehingga dapat mengelakkan manipulasi pasaran hingga tahap tertentu.

Logika Strategi

Logik teras strategi ini adalah untuk menentukan peluang panjang atau pendek berdasarkan peringkat yang berbeza dalam kitaran fasa bulan.

Panjang kitaran fasa bulan = 29.5305882 hari Memandangkan masa bulan purnama yang diketahui, bilangan hari dari bulan purnama itu hingga masa semasa boleh dikira
Umur bulan = Hari sejak bulan purnama yang diketahui % Panjang kitaran fasa bulan Nilai fasa bulan = (1 + cos(umur bulan / panjang kitaran fasa bulan * 2 * π)) / 2

Nilai fasa bulan turun naik antara 0 hingga 1. Nilai yang lebih besar bermaksud lebih dekat dengan bulan purnama, sementara nilai yang lebih kecil bermaksud lebih dekat dengan bulan baru.

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

Di samping itu, strategi ini juga menggabungkan penunjuk seperti jumlah dagangan, RSI dan MACD untuk mengelakkan isyarat dagangan semasa keadaan yang tidak menguntungkan.

Analisis Kelebihan

Kelebihan utama strategi ini:

  1. Menggunakan isyarat perdagangan fasa bulan yang unik, mengelakkan manipulasi pasaran ke tahap tertentu
  2. Menggabungkan penunjuk untuk menentukan keadaan pasaran, mengelakkan perdagangan dalam persekitaran yang tidak baik
  3. Menggunakan ATR untuk mengira saiz kedudukan yang munasabah, mengawal kerugian maksimum setiap dagangan dengan berkesan
  4. Tetapkan hentian kerugian untuk mengelakkan kerugian besar
  5. Hakim arah aliran dana dengan OBV, mengelakkan perdagangan terhadap trend
  6. Tetapkan Stop Loss untuk mengunci keuntungan

Ringkasnya, strategi ini memanfaatkan sepenuhnya kelebihan unik fasa bulan, dan menggabungkan pelbagai penunjuk teknikal untuk mengenal pasti peluang perdagangan yang berkemungkinan tinggi, sementara memanfaatkan mekanisme kawalan risiko untuk menentukan risiko perdagangan dengan berkesan.

Analisis Risiko

Risiko utama strategi ini termasuk:

  1. Fasa bulan dan pergerakan pasaran kadang-kadang mungkin gagal
  2. Stop loss pengeluaran yang tidak betul boleh menghentikan strategi lebih awal
  3. Kemungkinan isyarat palsu dari MACD, RSI
  4. Stop loss yang tidak betul boleh menyebabkan strategi kehilangan keuntungan yang lebih besar

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

  1. Sesuaikan ambang fasa bulan untuk memastikan isyarat bulan yang sah
  2. Uji pelbagai parameter stop loss drawdown dan pilih optimum
  3. Penyesuaian halus parameter MACD dan RSI untuk menjana isyarat dengan cekap
  4. Uji pelbagai set parameter stop loss untuk keuntungan maksimum

Melalui pengoptimuman parameter dan penunjuk gabungan, risiko perdagangan dapat dikurangkan dalam tahap yang besar.

Arahan pengoptimuman

Masih ada ruang untuk mengoptimumkan lagi strategi ini:

  1. Uji parameter bulan yang berbeza untuk mencari ambang yang optimum
  2. Cuba menggabungkan lebih banyak penunjuk untuk perdagangan ensemble dan meningkatkan kecekapan
  3. Mengoptimumkan mekanisme stop loss parameter untuk mengimbangi risiko dan pulangan
  4. Memperluas kepada lebih banyak aset dagangan untuk menguji keupayaan generalisasi

Kesimpulan

Strategi ini merealisasikan perdagangan Bitcoin yang cekap melalui isyarat perdagangan fasa bulan yang unik, digabungkan dengan penunjuk teknikal arus perdana. Berbanding dengan strategi penunjuk tunggal, strategi ini dapat melindungi risiko manipulasi pasaran dengan lebih baik dan mempunyai kelebihan yang unik. Dengan memanfaatkan stop loss untuk mencegah risiko dan pengoptimuman parameter, pulangan yang stabil dan baik dapat diperoleh dengan stabil. Masih ada ruang yang besar untuk meningkatkan strategi ini dan ia mempunyai 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 lanjut