Kedudukan dinamik SPARK dan strategi perdagangan dwi penunjuk

supertrend RSI ATR
Tarikh penciptaan: 2024-04-12 17:22:47 Akhirnya diubah suai: 2024-04-12 17:22:47
Salin: 0 Bilangan klik: 778
1
fokus pada
1617
Pengikut

Kedudukan dinamik SPARK dan strategi perdagangan dwi penunjuk

Gambaran keseluruhan

Strategi SPARK adalah strategi perdagangan kuantitatif yang menggabungkan penyesuaian kedudukan dinamik dan pengesahan dua indikator. Strategi ini menggunakan indikator SuperTrend dan indeks kekuatan relatif ((RSI) untuk mengenal pasti titik masuk dan keluar yang berpotensi, sambil menggunakan mekanisme penyesuaian kedudukan dinamik untuk mengoptimumkan peruntukan dana. Strategi ini juga menyediakan tetapan stop-loss yang fleksibel, serta parameter tersuai seperti kawalan frekuensi perdagangan minimum dan pilihan pilihan pilihan arah.

Prinsip Strategi

Inti strategi SPARK adalah penggunaan gabungan indikator SuperTrend dan indikator RSI. Indikator SuperTrend menilai arah trend dengan membandingkan harga penutupan dengan hubungan kedudukan rintangan sokongan dinamik, manakala indikator RSI digunakan untuk mengenal pasti keadaan pasaran yang lebih baik daripada membeli dan menjual.

Strategi menggunakan mekanisme penyesuaian kedudukan dinamik untuk mengoptimumkan peruntukan dana untuk setiap perdagangan. Dengan menetapkan peratusan portfolio dan kadar leverage, strategi dapat secara automatik mengira saiz kedudukan terbaik berdasarkan keadaan pasaran semasa dan baki akaun.

Kelebihan Strategik

  1. Pengesahan dua indikator: Dengan menggabungkan kedua-dua indikator SuperTrend dan RSI, strategi SPARK dapat mengenal pasti dengan lebih tepat titik masuk dan keluar yang berpotensi, mengurangkan kemungkinan kesalahan penilaian.
  2. Penyesuaian kedudukan dinamik: Strategi ini menggunakan mekanisme penyesuaian kedudukan dinamik yang dapat mengoptimumkan secara automatik peruntukan dana untuk setiap urus niaga berdasarkan peratusan portfolio dan leverage, meningkatkan kecekapan penggunaan dana.
  3. Pengurusan risiko yang fleksibel: Strategi ini menyediakan tetapan stop loss yang fleksibel, yang boleh dipilih mengikut peratusan tetap atau cara pengiraan dinamik mengikut keutamaan risiko individu, untuk mengawal risiko yang tepat.
  4. Parameter tersuai: Strategi membolehkan pengguna menyesuaikan pelbagai parameter input, seperti panjang ATR, penggandaan, nilai RSI, dan sebagainya, untuk menyesuaikan diri dengan keadaan pasaran dan pilihan perdagangan yang berbeza.

Risiko Strategik

  1. Risiko pasaran: Walaupun strategi SPARK menggunakan mekanisme pengesahan dua indikator dan penyesuaian kedudukan dinamik, risiko kerugian mungkin berlaku dalam keadaan pasaran yang melampau.
  2. Risiko pengoptimuman parameter: prestasi strategi sangat bergantung pada pilihan parameter input. Tetapan parameter yang tidak sesuai boleh menyebabkan prestasi strategi yang buruk.
  3. Risiko overfit: Jika parameter strategi terlalu dioptimumkan, ia boleh menyebabkan strategi tidak berfungsi dengan baik dalam keadaan pasaran masa depan.

Arah pengoptimuman strategi

  1. Pengenalan lebih banyak petunjuk: Pertimbangkan untuk memperkenalkan petunjuk teknikal lain, seperti MACD, Brinband, dan lain-lain, untuk meningkatkan lagi ketepatan pengesahan isyarat.
  2. Mengoptimumkan mekanisme hentian hentian: meneroka strategi hentian hentian yang lebih maju, seperti hentian bergerak, hentian dinamik, dan lain-lain, untuk melindungi keuntungan dan mengehadkan kerugian.
  3. Penyesuaian parameter penyesuaian diri: membangunkan mekanisme penyesuaian diri, menyesuaikan parameter strategi mengikut keadaan pasaran yang dinamik, untuk menyesuaikan diri dengan keadaan pasaran yang sentiasa berubah.

ringkaskan

Strategi SPARK menyediakan pedagang dengan penyelesaian perdagangan kuantitatif yang komprehensif dengan menggabungkan indikator SuperTrend dan RSI, dan menggunakan mekanisme penyesuaian kedudukan yang dinamik dan alat pengurusan risiko yang fleksibel. Walaupun strategi mungkin menghadapi beberapa risiko, dengan pengoptimuman dan penambahbaikan yang berterusan, strategi SPARK dijangka dapat mencapai prestasi yang stabil dalam pelbagai keadaan pasaran.

Kod sumber strategi
/*backtest
start: 2024-03-12 00:00:00
end: 2024-04-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SPARK", shorttitle="SPARK", overlay=true)

// Choose whether to activate the minimal bars in trade feature
minBarsEnabled = input(true, title="Activate Minimal Bars in Trade")
portfolioPercentage = input(10, title="Portfolio Percentage", minval=1, maxval=100)
// Leverage Input
leverage = input(1, title="Leverage", minval=1)

// Calculate position size according to portfolio percentage and leverage
positionSizePercent = portfolioPercentage / 100 * leverage
positionSize = (strategy.initial_capital / close) * positionSizePercent

// Take Profit and Stop Loss settings
useFixedTPSL = input(1, title="Use Fixed TP/SL", options=[1, 0])
tp_sl_step = 0.1
fixedTP = input(2.0, title="Fixed Take Profit (%)", step=tp_sl_step)
fixedSL = input(1.0, title="Fixed Stop Loss (%)", step=tp_sl_step)

// Calculate Take Profit and Stop Loss Levels
takeProfitLong = close * (1 + fixedTP / 100)
takeProfitShort = close * (1 - fixedTP / 100)
stopLossLong = close * (1 - fixedSL / 100)
stopLossShort = close * (1 + fixedSL / 100)

// Plot TP and SL levels on the chart
plotshape(series=takeProfitLong, title="Take Profit Long", color=color.green, style=shape.triangleup, location=location.abovebar)
plotshape(series=takeProfitShort, title="Take Profit Short", color=color.red, style=shape.triangledown, location=location.belowbar)
plotshape(series=stopLossLong, title="Stop Loss Long", color=color.red, style=shape.triangleup, location=location.abovebar)
plotshape(series=stopLossShort, title="Stop Loss Short", color=color.green, style=shape.triangledown, location=location.belowbar)

// Minimum Bars Between Trades Input
minBarsBetweenTrades = input(5, title="Minimum Bars Between Trades")

// Inputs for selecting trading direction
tradingDirection = input("Both", "Choose Trading Direction", options=["Long", "Short", "Both"])

// SuperTrend Function
trendFlow(src, atrLength, multiplier) =>
    atr = atr(atrLength)
    up = hl2 - (multiplier * atr)
    dn = hl2 + (multiplier * atr)
    trend = 1
    trend := nz(trend[1], 1)
    up := src > nz(up[1], 0) and src[1] > nz(up[1], 0) ? max(up, nz(up[1], 0)) : up
    dn := src < nz(dn[1], 0) and src[1] < nz(dn[1], 0) ? min(dn, nz(dn[1], 0)) : dn
    trend := src > nz(dn[1], 0) ? 1 : src < nz(up[1], 0)? -1 : nz(trend[1], 1)
    [up, dn, trend]

// Inputs for SuperTrend settings
atrLength1 = input(7, title="ATR Length for Trend 1")
multiplier1 = input(4.0, title="Multiplier for Trend 1")
atrLength2 = input(14, title="ATR Length for Trend 2")
multiplier2 = input(3.618, title="Multiplier for Trend 2")
atrLength3 = input(21, title="ATR Length for Trend 3")
multiplier3 = input(3.5, title="Multiplier for Trend 3")
atrLength4 = input(28, title="ATR Length for Trend 4")
multiplier4 = input(3.382, title="Multiplier for Trend 4")

// Calculate SuperTrend
[up1, dn1, trend1] = trendFlow(close, atrLength1, multiplier1)
[up2, dn2, trend2] = trendFlow(close, atrLength2, multiplier2)
[up3, dn3, trend3] = trendFlow(close, atrLength3, multiplier3)
[up4, dn4, trend4] = trendFlow(close, atrLength4, multiplier4)

// Entry Conditions based on SuperTrend and Elliott Wave-like patterns
longCondition = trend1 == 1 and trend2 == 1 and trend3 == 1 and trend4 == 1
shortCondition = trend1 == -1 and trend2 == -1 and trend3 == -1 and trend4 == -1

// Calculate bars since last trade
barsSinceLastTrade = barssince(tradingDirection == "Long" ? longCondition : shortCondition)

// Strategy Entry logic based on selected trading direction and minimum bars between trades
if tradingDirection == "Long" or tradingDirection == "Both"
    if longCondition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Long", strategy.long, qty=positionSize)
        strategy.exit("TP/SL Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)

if tradingDirection == "Short" or tradingDirection == "Both"
    if shortCondition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Short", strategy.short, qty=positionSize)
        strategy.exit("TP/SL Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Color bars based on position
var color barColor = na
barColor := strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na

// Plot colored bars
plotcandle(open, high, low, close, color=barColor)

// Plot moving averages
plot(sma(close, 50), color=color.blue)
plot(sma(close, 200), color=color.orange)

// More customizable trading bot - adding a new indicator
// This indicator is the RSI (Relative Strength Index)

// RSI Inputs
rsi_length = input(14, title="RSI Length")
rsi_oversold = input(30, title="RSI Oversold")
rsi_overbought = input(70, title="RSI Overbought")

// Calculate RSI
rsi = rsi(close, rsi_length)

// Plot RSI
plot(rsi, color=color.purple, title="RSI")

// Entry Conditions based on RSI
rsi_long_condition = rsi < rsi_oversold
rsi_short_condition = rsi > rsi_overbought

// Strategy Entry logic based on RSI
if tradingDirection == "Long" or tradingDirection == "Both"
    if rsi_long_condition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Long_RSI", strategy.long, qty=positionSize)
        strategy.exit("TP/SL Long_RSI", from_entry="Long_RSI", stop=stopLossLong, limit=takeProfitLong)

if tradingDirection == "Short" or tradingDirection == "Both"
    if rsi_short_condition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Short_RSI", strategy.short, qty=positionSize)
        strategy.exit("TP/SL Short_RSI", from_entry="Short_RSI", stop=stopLossShort, limit=takeProfitShort)