RSI Strategi Purata Posisi Dinamik

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

img

Ringkasan

Strategi ini menggabungkan Indeks Kekuatan Relatif (RSI) dan prinsip purata kedudukan martingale. Ia memulakan kedudukan panjang apabila RSI turun di bawah garis oversold, dan menggandakan kedudukan jika harga terus menurun. Mengambil keuntungan dicapai dengan sasaran kecil. Strategi ini sesuai untuk syiling dengan cap pasaran tinggi dalam perdagangan spot untuk keuntungan yang stabil.

Logika Strategi

  1. Menggunakan penunjuk RSI untuk mengenal pasti keadaan oversold pasaran, dengan tempoh RSI ditetapkan kepada 14 dan ambang oversold ditetapkan kepada 30.
  2. Memulakan kedudukan panjang pertama dengan 5% daripada ekuiti akaun apabila RSI < 30.
  3. Jika harga menurun 0.5% daripada harga kemasukan awal, dua kali ganda saiz kedudukan untuk purata ke bawah.
  4. Ambil keuntungan dengan kenaikan 0.5% setiap kali.
  5. Ulangi kitaran.

Analisis Kelebihan

  • Mengenal pasti keadaan pasar yang terlalu banyak dijual dengan RSI untuk titik kemasukan yang baik.
  • Rata-rata kedudukan Martingale menurunkan harga kemasukan purata.
  • Mengambil keuntungan kecil membolehkan keuntungan yang konsisten.
  • Sesuai untuk duit syiling dengan cap pasaran tinggi untuk perdagangan spot untuk risiko terkawal.

Analisis Risiko

  • Kemerosotan pasaran yang berpanjangan boleh menyebabkan kerugian besar.
  • Tiada Stop Loss bermakna penurunan tanpa had.
  • Terlalu banyak rata-rata turun meningkatkan kerugian.
  • Masih mempunyai risiko arah panjang yang melekat.

Arahan pengoptimuman

  1. Menggabungkan stop loss untuk mengehadkan kerugian maksimum.
  2. Mengoptimumkan parameter RSI untuk mencari isyarat overbought / oversold terbaik.
  3. Tetapkan julat keuntungan yang munasabah berdasarkan turun naik syiling tertentu.
  4. Tentukan kadar purata berdasarkan jumlah aset atau peraturan saiz kedudukan.

Ringkasan

Strategi ini menggabungkan penunjuk RSI dan purata kedudukan martingale untuk mengambil kesempatan daripada situasi oversold dengan purata ke bawah yang sesuai, dan mengambil keuntungan kecil untuk keuntungan yang mantap.


/*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 lanjut