Beberapa indikator mengkonfirmasi strategi pengambilan untung dinamis DCA dari terobosan rata-rata pergerakan

EMA RSI MACD BB DCA HTF
Tanggal Pembuatan: 2025-04-11 11:09:00 Akhirnya memodifikasi: 2025-04-11 11:09:00
menyalin: 1 Jumlah klik: 341
2
fokus pada
319
Pengikut

Beberapa indikator mengkonfirmasi strategi pengambilan untung dinamis DCA dari terobosan rata-rata pergerakan Beberapa indikator mengkonfirmasi strategi pengambilan untung dinamis DCA dari terobosan rata-rata pergerakan

Ringkasan

Strategi ini menggunakan beberapa indikator teknis seperti EMA 48, RSI 14, MACD, dan Bollinger Bands untuk mengkonfirmasi titik masuk potensial, sambil menerapkan metode manajemen posisi yang terstruktur dan mekanisme kontrol risiko yang sudah ada. Inti dari strategi ini adalah mengidentifikasi titik persimpangan harga dengan EMA, dan menggunakan RSI, MACD, dan Bollinger Bands untuk mengkonfirmasi, mengkombinasikan analisis kerangka waktu tinggi untuk menghindari sinyal palsu, menggunakan strategi DCA tiga tingkat untuk menambah posisi, dan melindungi keuntungan dengan stop loss dan stop loss dinamis bertingkat.

Prinsip Strategi

Prinsip dari strategi ini didasarkan pada pengesahan kombinasi dari beberapa indikator teknis, yang terdiri dari komponen-komponen kunci berikut:

  1. Sistem persyaratan masuk

    • Harga harus melewati 48 siklus EMA, naik jika naik, turun jika turun
    • RSI harus mengkonfirmasi intensitas arah (<60 pada multipel, <40 pada kosong)
    • Garis MACD harus melewati garis sinyal untuk mengkonfirmasi arah momentum
    • Harga harus mendekati area support/resistance sebelumnya
    • RSI menunjukkan sinyal deviasi di puncak/lembah ke-5
    • High Time Frame mengkonfirmasi ini adalah posisi kedua
  2. Manajemen Posisi Dinamis

    • Risiko awal dibatasi 1-3% dari akun
    • Ukuran posisi mengikuti rasio DCA 1-2-6 untuk menambah posisi
    • Stop loss pertama ditetapkan pada posisi 1-3% dari titik masuk, dengan jumlah mata uang
    • Pembaruan Stop Loss ke Posisi 1.3% dari titik masuk setelah semua DCA telah dikerahkan
  3. Mekanisme Keuntungan Cerdas

    • Tutup posisi 25% saat harga mencapai keuntungan 0,5%
    • Tutup posisi 50% ketika harga mencapai 1% keuntungan
    • Setelah keuntungan kedua, stop loss pindah ke posisi aman

Analisis mendalam kode menunjukkan bahwa strategi ini juga mencakup sistem identifikasi lembah puncak cerdas untuk mendeteksi deviasi dari pola dengan melacak harga dan 5 titik fluktuasi terbaru RSI. Sistem konfirmasi frame waktu tinggi dengan menganalisis titik dukungan dan resistensi pada grafik garis matahari untuk menghindari sinyal palsu pada frame waktu rendah.

Keunggulan Strategis

Dari analisis lebih dalam tentang kode strategi ini, kita dapat menyimpulkan keuntungan yang menonjol sebagai berikut:

  1. Sistem Konfirmasi Multi-Level: Dengan sinergi dari beberapa indikator teknis, kemungkinan sinyal palsu dikurangi secara signifikan, meningkatkan peluang perdagangan. Penggunaan kombinasi EMA, RSI, MACD dan Brin Belt memastikan kualitas tinggi titik masuk.

  2. Manajemen Uang yang CerdasMetode dengan rasio 1-2-6 DCA memanfaatkan biaya rata-rata volatilitas pasar dan membatasi lubang risiko secara keseluruhan. Risiko awal dibatasi pada 1-3% dari akun, memastikan bahwa bahkan dalam skenario terburuk tidak akan terjadi kerugian bencana.

  3. Perlindungan Stop Loss DinamisMekanisme Stop Loss disesuaikan dengan perkembangan perdagangan, terutama ketika stop loss dipindahkan ke posisi aman setelah mengambil sebagian dari keuntungan, yang secara efektif menyeimbangkan kebutuhan untuk melindungi keuntungan dan memungkinkan ruang istirahat perdagangan.

  4. Strategi untuk mendapatkan keuntungan secara bertahapDengan menutup posisi 25% dan 50% pada titik keuntungan 0,5% dan 1%, strategi ini dapat mengunci sebagian dari keuntungan, sementara mempertahankan posisi untuk menangkap pergerakan pasar yang lebih besar, mencapai keseimbangan antara risiko dan imbal hasil.

  5. Konfirmasi kerangka waktu tinggi: Menggunakan support dan resistance bit pada frame waktu yang lebih tinggi untuk memfilter sinyal perdagangan, mengurangi efek dari noise dan false breaks yang sering terjadi pada frame waktu yang lebih rendah.

Risiko Strategis

Meskipun strategi ini dirancang dengan baik, ada beberapa faktor risiko yang perlu diperhatikan:

  1. Parameter SensitivitasKinerja strategi sangat tergantung pada pengaturan beberapa parameter, termasuk siklus EMA, RSI threshold, dan level DCA. Perubahan kecil pada parameter ini dapat menyebabkan perbedaan yang signifikan dalam hasil perdagangan, yang perlu dioptimalkan dan diukur kembali dengan hati-hati.

  2. Risiko Ketidakstabilan BesarMeskipun ada mekanisme DCA, harga dapat dengan cepat melampaui semua stop loss yang ditetapkan dalam situasi pasar yang sangat berfluktuasi, menyebabkan kerugian yang lebih besar dari yang diharapkan. Untuk risiko ini, pertimbangkan untuk menggunakan ukuran posisi awal yang lebih ketat atau menghentikan perdagangan selama fluktuasi tinggi.

  3. Efek tumpang tindih dari kerugian berkelanjutan: Meskipun risiko pada setiap transaksi terbatas, kerugian berturut-turut dapat menyebabkan penurunan yang signifikan pada kurva modal. Disarankan untuk menerapkan kontrol risiko keseluruhan tambahan, seperti batas kerugian maksimum harian atau mingguan.

  4. Kompleksitas RSI yang tidak dapat diidentifikasiDeteksi deviasi RSI dalam kode bergantung pada keakuratan data historis dan mungkin tidak cukup dapat diandalkan dalam kondisi pasar tertentu. Penggunaan metode statistik yang lebih canggih dapat dipertimbangkan untuk mengkonfirmasi sinyal deviasi.

  5. Bergantung pada likuiditas pasarDalam pasar yang kurang likuiditas, sejumlah besar pesanan DCA dapat menghadapi masalah slippage yang mempengaruhi efektivitas keseluruhan strategi.

Arah optimasi strategi

Berdasarkan analisis mendalam dari kode, berikut adalah beberapa arah di mana strategi ini dapat dioptimalkan:

  1. Pengaturan parameter dinamisAdaptasi: mekanisme penyesuaian parameter dinamis yang dapat diperkenalkan berdasarkan volatilitas pasar. Misalnya, secara otomatis meningkatkan persyaratan penurunan RSI selama periode fluktuasi tinggi, atau menyesuaikan panjang EMA untuk menyesuaikan diri dengan siklus pasar yang berbeda.

  2. Penguatan deviasi deteksiDeteksi deviasi RSI saat ini relatif sederhana dan dapat meningkatkan akurasi dengan memperkenalkan algoritma yang lebih kompleks, seperti menggunakan konversi Fisher RSI atau menambahkan konfirmasi volume. Ini akan mengurangi sinyal misreport dan meningkatkan akurasi strategi.

  3. Optimalisasi Pendapatan CerdasKeuntungan tetap saat ini dapat ditingkatkan menjadi keuntungan dinamis berdasarkan volatilitas pasar. Misalnya, menetapkan tujuan keuntungan yang lebih tinggi selama fluktuasi tinggi dan tujuan yang lebih rendah selama fluktuasi rendah untuk menyesuaikan dengan perubahan kondisi pasar.

  4. Pengelolaan dana yang lebih baikRasio dan titik pemicu DCA dapat dioptimalkan, menyesuaikan dengan struktur pasar dan dinamika intensitas tren saat ini. Misalnya, rasio DCA yang lebih agresif digunakan dalam tren yang kuat, dan lebih konservatif dalam tren yang lemah.

  5. Optimalisasi waktu transaksiIni dapat dilakukan dengan menganalisis data historis untuk menentukan jendela waktu perdagangan yang optimal.

Meringkaskan

Strategi DCA Breakthrough Dynamic Stop adalah sistem perdagangan short-line yang dirancang dengan baik yang menggabungkan beberapa alat analisis teknis dengan teknologi manajemen uang yang canggih. Dengan bekerja sama dengan indikator seperti EMA, RSI, MACD, dan Brinks, strategi ini dapat mengidentifikasi titik masuk dengan probabilitas tinggi, sambil menggunakan metode DCA yang terstruktur dan mekanisme stop loss / stop loss yang dinamis untuk mengelola risiko dan mengunci keuntungan.

Meskipun strategi ini memiliki keunggulan yang jelas, termasuk kontrol risiko yang ketat, sistem konfirmasi multi-level, dan mekanisme keuntungan cerdas, pengguna masih perlu waspada terhadap sensitivitas parameter dan risiko yang ditimbulkan oleh fluktuasi pasar yang tajam. Dengan menerapkan langkah-langkah optimasi yang disarankan, seperti penyesuaian parameter dinamis, peningkatan deteksi deviasi, dan pengoptimalan keuntungan cerdas, strategi ini diharapkan untuk meningkatkan stabilitas dan profitabilitas lebih lanjut.

Bagi para pedagang, strategi ini paling cocok diterapkan di pasar dengan likuiditas yang cukup, dan harus dilakukan retrospeksi sejarah dan optimasi parameter yang memadai sebelum digunakan. Dengan implementasi yang cermat dan penyesuaian pemantauan yang berkelanjutan, sistem perdagangan bertingkat ini dapat menjadi senjata yang kuat dalam toolkit pedagang garis pendek.

Kode Sumber Strategi
/*backtest
start: 2024-04-11 00:00:00
end: 2025-04-10 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Scalping Strategy with DCA - V2", overlay=true, margin_long=100, margin_short=100)

// Input parameters
emaLength = input.int(48, title="EMA Length", minval=1, group="Main Indicators")
rsiLength = input.int(14, title="RSI Length", minval=1, group="Main Indicators")
macdShortLength = input.int(12, title="MACD Short Length", minval=1, group="Main Indicators")
macdLongLength = input.int(30, title="MACD Long Length", minval=1, group="Main Indicators")
macdSignalLength = input.int(9, title="MACD Signal Length", minval=1, group="Main Indicators")
bbLength = input.int(20, title="Bollinger Bands Length", group="Main Indicators")
bbMult = input.float(2.0, title="Bollinger Bands Multiplier", group="Main Indicators")

// Risk management parameters
initialRiskPercent = input.float(1.0, title="Initial Risk % of Account", minval=0.1, maxval=3.0, step=0.1, group="Risk Management")
stopLossPercent = input.float(1.5, title="Stop Loss % (Unboosted)", minval=0.5, maxval=3.0, step=0.1, group="Risk Management")
fixedSLPercent = input.float(1.3, title="Fixed SL % after full DCA", minval=0.1, maxval=5.0, step=0.1, group="Risk Management")
takeProfitPercent1 = input.float(0.5, title="First Take Profit % (25% Volume)", minval=0.1, group="Risk Management")
takeProfitPercent2 = input.float(1.0, title="Second Take Profit % (50% Volume)", minval=0.1, group="Risk Management")

// DCA parameters
enableDCA = input.bool(true, title="Enable DCA", group="DCA Settings")
dcaLevel1 = input.float(1.0, title="DCA Level 1 % Drop", minval=0.1, group="DCA Settings")
dcaLevel2 = input.float(2.0, title="DCA Level 2 % Drop", minval=0.1, group="DCA Settings")

// Higher Timeframe parameters
higherTF = input.timeframe("D", title="Higher Timeframe for Confirmation", group="Advanced Settings")
useHTFConfirmation = input.bool(true, title="Use Higher Timeframe Confirmation", group="Advanced Settings")

// Debug parameters
showLabels = input.bool(true, title="Show Entry/Exit Labels", group="Visual")
showSL = input.bool(true, title="Show Stop Loss Lines", group="Visual")
showTP = input.bool(true, title="Show Take Profit Lines", group="Visual")

// Calculate indicators
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
[macdLine, signalLine, _] = ta.macd(close, macdShortLength, macdLongLength, macdSignalLength)
[middle, upper, lower] = ta.bb(close, bbLength, bbMult)

// Variables for tracking peaks and troughs
var priceHighs = array.new_float(0)
var priceLows = array.new_float(0)
var rsiHighs = array.new_float(0)
var rsiLows = array.new_float(0)

// Track last 5 peaks and troughs for both price and RSI
pivot_high = ta.pivothigh(high, 2, 2)
if not na(pivot_high)
    array.push(priceHighs, pivot_high)
    if array.size(priceHighs) > 5
        array.shift(priceHighs)

pivot_low = ta.pivotlow(low, 2, 2)
if not na(pivot_low)
    array.push(priceLows, pivot_low)
    if array.size(priceLows) > 5
        array.shift(priceLows)

rsi_pivot_high = ta.pivothigh(rsi, 2, 2)
if not na(rsi_pivot_high)
    array.push(rsiHighs, rsi_pivot_high)
    if array.size(rsiHighs) > 5
        array.shift(rsiHighs)

rsi_pivot_low = ta.pivotlow(rsi, 2, 2)
if not na(rsi_pivot_low)
    array.push(rsiLows, rsi_pivot_low)
    if array.size(rsiLows) > 5
        array.shift(rsiLows)

// Check for RSI divergence
rsiDivergenceBullish = array.size(priceLows) >= 5 and array.size(rsiLows) >= 5 and array.get(priceLows, array.size(priceLows) - 1) < array.get(priceLows, array.size(priceLows) - 5) and array.get(rsiLows, array.size(rsiLows) - 1) > array.get(rsiLows, array.size(rsiLows) - 5)

rsiDivergenceBearish = array.size(priceHighs) >= 5 and array.size(rsiHighs) >= 5 and array.get(priceHighs, array.size(priceHighs) - 1) > array.get(priceHighs, array.size(priceHighs) - 5) and array.get(rsiHighs, array.size(rsiHighs) - 1) < array.get(rsiHighs, array.size(rsiHighs) - 5)

// Check if price is near previous high/low (Rule #4)
isNearPrevHigh = array.size(priceHighs) >= 2 and math.abs(high - array.get(priceHighs, array.size(priceHighs) - 2)) / array.get(priceHighs, array.size(priceHighs) - 2) < 0.01
isNearPrevLow = array.size(priceLows) >= 2 and math.abs(low - array.get(priceLows, array.size(priceLows) - 2)) / array.get(priceLows, array.size(priceLows) - 2) < 0.01

// Higher timeframe confirmation (Rule #10)
// Get pivot points from higher timeframe
htf_is_pivot_low = request.security(syminfo.tickerid, higherTF, not na(ta.pivotlow(low, 2, 2)), barmerge.gaps_off, barmerge.lookahead_off)
htf_is_pivot_high = request.security(syminfo.tickerid, higherTF, not na(ta.pivothigh(high, 2, 2)), barmerge.gaps_off, barmerge.lookahead_off)

// Count pivots in higher timeframe to check if this is the 2nd pivot
var htf_pivot_low_count = 0
var htf_pivot_high_count = 0

if htf_is_pivot_low
    htf_pivot_low_count := htf_pivot_low_count + 1
    htf_pivot_low_count := math.min(htf_pivot_low_count, 10)  // Prevent unlimited counting

if htf_is_pivot_high
    htf_pivot_high_count := htf_pivot_high_count + 1
    htf_pivot_high_count := math.min(htf_pivot_high_count, 10)  // Prevent unlimited counting

// Reset counts after a while to maintain relevance
if not htf_is_pivot_low and not htf_is_pivot_high and bar_index % 100 == 0
    htf_pivot_low_count := 0
    htf_pivot_high_count := 0

// Check if this is the 2nd pivot in higher timeframe
isHTFSecondPivotLow = htf_is_pivot_low and htf_pivot_low_count == 2
isHTFSecondPivotHigh = htf_is_pivot_high and htf_pivot_high_count == 2

// Check crossing of Bollinger Bands
crossUpperBand = ta.crossover(close, upper)
crossLowerBand = ta.crossunder(close, lower)

// Entry conditions refined with higher timeframe confirmation
longCondition = close > ema and close[1] <= ema[1] and rsi > 60 and macdLine > signalLine and isNearPrevLow and rsiDivergenceBullish and (not useHTFConfirmation or isHTFSecondPivotLow)
shortCondition = close < ema and close[1] >= ema[1] and rsi < 40 and macdLine < signalLine and isNearPrevHigh and rsiDivergenceBearish and (not useHTFConfirmation or isHTFSecondPivotHigh)

// Additional entry conditions when price crosses Bollinger Bands (Rule #11)
longBBCondition = crossLowerBand and rsi < 30
shortBBCondition = crossUpperBand and rsi > 70

// Calculate position sizes for DCA
initialSize = strategy.equity * initialRiskPercent / 100 / 9  // Initial sizing according to the 1-2-6 rule
dca1Size = initialSize * 2
dca2Size = initialSize * 6

// Calculate SL in money terms (Rule #3)
slMoneyAmount = strategy.equity * initialRiskPercent / 100 * stopLossPercent / 100

// Variables to track DCA levels
var float longEntryPrice = 0.0
var float shortEntryPrice = 0.0
var int longDCACount = 0
var int shortDCACount = 0
var float stopLossLevel = 0.0
var float takeProfit1Level = 0.0
var float takeProfit2Level = 0.0
var float slMoneyValue = 0.0

// Close partial positions at take profit levels
if strategy.position_size > 0
    if close >= takeProfit1Level and takeProfit1Level > 0 and strategy.position_size == initialSize + (longDCACount > 0 ? dca1Size : 0) + (longDCACount > 1 ? dca2Size : 0)
        strategy.order("Long TP1", strategy.short, qty=strategy.position_size * 0.25)
        if showLabels
            label.new(bar_index, high, "TP1 (25%)", color=color.green, textcolor=color.white, style=label.style_label_down)
    
    if close >= takeProfit2Level and takeProfit2Level > 0 and strategy.position_size > initialSize * 0.25
        strategy.order("Long TP2", strategy.short, qty=strategy.position_size * 0.5)
        stopLossLevel := longEntryPrice  // Move SL to breakeven after TP2
        if showLabels
            label.new(bar_index, high, "TP2 (50%) & SL→BE", color=color.green, textcolor=color.white, style=label.style_label_down)

if strategy.position_size < 0
    if close <= takeProfit1Level and takeProfit1Level > 0 and math.abs(strategy.position_size) == initialSize + (shortDCACount > 0 ? dca1Size : 0) + (shortDCACount > 1 ? dca2Size : 0)
        strategy.order("Short TP1", strategy.long, qty=math.abs(strategy.position_size) * 0.25)
        if showLabels
            label.new(bar_index, low, "TP1 (25%)", color=color.red, textcolor=color.white, style=label.style_label_up)
    
    if close <= takeProfit2Level and takeProfit2Level > 0 and math.abs(strategy.position_size) > initialSize * 0.25
        strategy.order("Short TP2", strategy.long, qty=math.abs(strategy.position_size) * 0.5)
        stopLossLevel := shortEntryPrice  // Move SL to breakeven after TP2
        if showLabels
            label.new(bar_index, low, "TP2 (50%) & SL→BE", color=color.red, textcolor=color.white, style=label.style_label_up)

// DCA Logic
if enableDCA and strategy.position_size > 0 and longDCACount < 2
    if close < longEntryPrice * (1 - dcaLevel1/100) and longDCACount == 0
        strategy.entry("Long DCA1", strategy.long, qty=dca1Size)
        longDCACount := 1
        if showLabels
            label.new(bar_index, low, "DCA1", color=color.blue, textcolor=color.white, style=label.style_label_up)
    
    if close < longEntryPrice * (1 - dcaLevel2/100) and longDCACount == 1
        strategy.entry("Long DCA2", strategy.long, qty=dca2Size)
        longDCACount := 2
        // Update SL to fixed percentage after full DCA (Rule #6)
        stopLossLevel := longEntryPrice * (1 - fixedSLPercent/100)
        if showLabels
            label.new(bar_index, low, "DCA2 & SL Update", color=color.blue, textcolor=color.white, style=label.style_label_up)

if enableDCA and strategy.position_size < 0 and shortDCACount < 2
    if close > shortEntryPrice * (1 + dcaLevel1/100) and shortDCACount == 0
        strategy.entry("Short DCA1", strategy.short, qty=dca1Size)
        shortDCACount := 1
        if showLabels
            label.new(bar_index, high, "DCA1", color=color.purple, textcolor=color.white, style=label.style_label_down)
    
    if close > shortEntryPrice * (1 + dcaLevel2/100) and shortDCACount == 1
        strategy.entry("Short DCA2", strategy.short, qty=dca2Size)
        shortDCACount := 2
        // Update SL to fixed percentage after full DCA (Rule #6)
        stopLossLevel := shortEntryPrice * (1 + fixedSLPercent/100)
        if showLabels
            label.new(bar_index, high, "DCA2 & SL Update", color=color.purple, textcolor=color.white, style=label.style_label_down)

// Entry with initial position
if longCondition or longBBCondition
    strategy.close("Short")
    strategy.entry("Long", strategy.long, qty=initialSize)
    longEntryPrice := close
    longDCACount := 0
    shortDCACount := 0
    
    // Set SL based on money value (not percentage)
    slMoneyValue := slMoneyAmount
    // Convert to price level - simplified version
    stopLossLevel := close * (1 - stopLossPercent/100)
    
    takeProfit1Level := close * (1 + takeProfitPercent1/100)
    takeProfit2Level := close * (1 + takeProfitPercent2/100)
    if showLabels
        label.new(bar_index, low, "LONG", color=color.green, textcolor=color.white, style=label.style_label_up)

if shortCondition or shortBBCondition
    strategy.close("Long")
    strategy.entry("Short", strategy.short, qty=initialSize)
    shortEntryPrice := close
    longDCACount := 0
    shortDCACount := 0
    
    // Set SL based on money value (not percentage)
    slMoneyValue := slMoneyAmount
    // Convert to price level - simplified version
    stopLossLevel := close * (1 + stopLossPercent/100)
    
    takeProfit1Level := close * (1 - takeProfitPercent1/100)
    takeProfit2Level := close * (1 - takeProfitPercent2/100)
    if showLabels
        label.new(bar_index, high, "SHORT", color=color.red, textcolor=color.white, style=label.style_label_down)

// Stop Loss
if strategy.position_size > 0 and low <= stopLossLevel
    strategy.close("Long")
    if showLabels
        label.new(bar_index, low, "SL", color=color.red, textcolor=color.white, style=label.style_label_up)

if strategy.position_size < 0 and high >= stopLossLevel
    strategy.close("Short")
    if showLabels
        label.new(bar_index, high, "SL", color=color.red, textcolor=color.white, style=label.style_label_down)

// Market cap and holder % check can't be done directly in TradingView, but we display a reminder
if strategy.position_size != 0 and bar_index % 100 == 0
    label.new(bar_index, close, "Remember: Only trade coins with large market cap and >7% holder ratio", 
              color=color.yellow, textcolor=color.black, style=label.style_label_left)

// Plot indicators - these must be at the global scope in Pine Script v6
plot(ema, color=color.blue, title="48 EMA")
plot(upper, color=color.red, title="Upper BB")
plot(lower, color=color.green, title="Lower BB")
plot(middle, color=color.yellow, title="Middle BB")

// Plot stop loss and take profit levels - conditions need to be part of the plot function in v6
plotSL = showSL and stopLossLevel > 0 ? stopLossLevel : na
plot(plotSL, color=color.red, style=plot.style_circles, linewidth=2, title="Stop Loss")

// TP for long positions
plotTP1Long = showTP and strategy.position_size > 0 and takeProfit1Level > 0 ? takeProfit1Level : na
plot(plotTP1Long, color=color.green, style=plot.style_circles, linewidth=1, title="TP1 Long")

plotTP2Long = showTP and strategy.position_size > 0 and takeProfit2Level > 0 ? takeProfit2Level : na
plot(plotTP2Long, color=color.green, style=plot.style_circles, linewidth=2, title="TP2 Long")

// TP for short positions
plotTP1Short = showTP and strategy.position_size < 0 and takeProfit1Level > 0 ? takeProfit1Level : na
plot(plotTP1Short, color=color.green, style=plot.style_circles, linewidth=1, title="TP1 Short")

plotTP2Short = showTP and strategy.position_size < 0 and takeProfit2Level > 0 ? takeProfit2Level : na
plot(plotTP2Short, color=color.green, style=plot.style_circles, linewidth=2, title="TP2 Short")

// Additional table with strategy information
if barstate.islastconfirmedhistory
    var table infoTable = table.new(position=position.top_right, columns=2, rows=5, bgcolor=color.new(color.black, 70), frame_width=1)
    
    table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 0, "Scalping with DCA", text_color=color.white)
    
    table.cell(infoTable, 0, 1, "Initial Risk:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 1, str.tostring(initialRiskPercent, "#.##") + "% of account", text_color=color.white)
    
    table.cell(infoTable, 0, 2, "DCA Ratio:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 2, "1-2-6", text_color=color.white)
    
    table.cell(infoTable, 0, 3, "SL After DCA:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 3, str.tostring(fixedSLPercent, "#.##") + "%", text_color=color.white)
    
    table.cell(infoTable, 0, 4, "REMINDERS:", bgcolor=color.new(color.red, 90), text_color=color.white)
    table.cell(infoTable, 1, 4, "Only trade coins with market cap and >7% holder ratio", text_color=color.white)