Strategi RSI Posisi Dinamis Rata-rata

Penulis:ChaoZhang, Tanggal: 2024-02-06 09:44:05
Tag:

img

Gambaran umum

Strategi ini menggabungkan Relative Strength Index (RSI) dan prinsip rata-rata posisi martingale. Ini memulai posisi panjang ketika RSI turun di bawah garis oversold, dan menggandakan posisi jika harga terus menurun. Pengambilan keuntungan dicapai dengan target kecil. Strategi ini cocok untuk koin dengan kapitalisasi pasar tinggi dalam perdagangan spot untuk keuntungan yang stabil.

Logika Strategi

  1. Menggunakan indikator RSI untuk mengidentifikasi kondisi oversold pasar, dengan periode RSI ditetapkan menjadi 14 dan ambang oversold ditetapkan menjadi 30.
  2. Memulai posisi panjang pertama dengan 5% dari ekuitas akun ketika RSI < 30.
  3. Jika harga turun 0,5% dari harga masuk awal, dua kali lipat ukuran posisi untuk rata-rata ke bawah.
  4. Ambil keuntungan sebesar 0,5% setiap kali.
  5. Ulangi siklus.

Analisis Keuntungan

  • Mengidentifikasi kondisi pasar oversold dengan RSI untuk titik masuk yang baik.
  • Rata-rata posisi Martingale menurunkan harga masuk rata-rata.
  • Mengambil keuntungan kecil memungkinkan keuntungan yang konsisten.
  • Cocok untuk perdagangan spot koin dengan kapitalisasi pasar tinggi untuk risiko terkontrol.

Analisis Risiko

  • Penurunan pasar yang berkepanjangan dapat menyebabkan kerugian besar.
  • Tidak ada stop loss berarti downside tak terbatas.
  • Terlalu banyak rata-rata turun meningkatkan kerugian.
  • Masih memiliki inheren risiko arah panjang.

Arahan Optimasi

  1. Menggabungkan stop loss untuk membatasi kerugian maksimum.
  2. Mengoptimalkan parameter RSI untuk menemukan sinyal overbought / oversold terbaik.
  3. Tetapkan rentang keuntungan yang wajar berdasarkan volatilitas koin tertentu.
  4. Tentukan laju rata-rata berdasarkan total aset atau aturan ukuran posisi.

Ringkasan

Strategi ini menggabungkan indikator RSI dan posisi martingale rata-rata untuk mengambil keuntungan dari situasi oversold dengan rata-rata turun yang tepat, dan mengambil keuntungan kecil untuk keuntungan yang stabil.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stavolt

//@version=5
strategy("RSI Martingale Strategy", overlay=true, default_qty_type=strategy.cash, currency=currency.USD)

// Inputs
rsiLength = input(14, title="RSI Length")
oversoldThreshold = input(30, title="Oversold Threshold") // Keeping RSI threshold
profitTargetPercent = input(0.5, title="Profit Target (%)") / 100
initialInvestmentPercent = input(5, title="Initial Investment % of Equity")

// Calculating RSI
rsiValue = ta.rsi(close, rsiLength)

// State variables for tracking the initial entry
var float initialEntryPrice = na
var int multiplier = 1

// Entry condition based on RSI
if (rsiValue < oversoldThreshold and na(initialEntryPrice))
    initialEntryPrice := close
    strategy.entry("Initial Buy", strategy.long, qty=(strategy.equity * initialInvestmentPercent / 100) / close)
    multiplier := 1

// Adjusting for errors and simplifying the Martingale logic
// Note: This section simplifies the aggressive position size adjustments without loops
if (not na(initialEntryPrice))
    if (close < initialEntryPrice * 0.995) // 0.5% drop from initial entry
        strategy.entry("Martingale Buy 1", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 2)
        multiplier := 2 // Adjusting multiplier for the next potential entry

    if (close < initialEntryPrice * 0.990) // Further drop
        strategy.entry("Martingale Buy 2", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 4)
        multiplier := 4

    // Additional conditional entries could follow the same pattern

// Checking for profit target to close positions
if (strategy.position_size > 0 and (close - strategy.position_avg_price) / strategy.position_avg_price >= profitTargetPercent)
    strategy.close_all(comment="Take Profit")
    initialEntryPrice := na // Reset for next cycle


Lebih banyak