Sumber daya yang dimuat... Pemuatan...

Strategi Take-Profit Double Supertrend Multi-Step Trailing

Penulis:ChaoZhang, Tanggal: 2024-06-21 14:36:35
Tag:ATRSTTP

img

Gambaran umum

Ini adalah strategi multi-step trailing take-profit yang didasarkan pada indikator Supertrend ganda. Strategi ini menggunakan dua indikator Supertrend dengan parameter yang berbeda untuk menentukan tren pasar dan mengeksekusi perdagangan panjang atau pendek sesuai. Inti dari strategi ini terletak pada mekanisme multi-step trailing take-profit, yang menetapkan beberapa target keuntungan untuk secara progresif mengunci keuntungan sambil menjaga sebagian posisi terbuka untuk menangkap pergerakan pasar yang lebih besar. Pendekatan ini bertujuan untuk mengurangi risiko sambil memaksimalkan potensi keuntungan.

Prinsip Strategi

  1. Indikator Supertrend Ganda: Strategi ini menggunakan dua indikator Supertrend dengan pengaturan parameter yang berbeda untuk mengidentifikasi tren. Sinyal panjang dipicu ketika kedua indikator menunjukkan tren naik, sementara sinyal pendek dipicu ketika keduanya menunjukkan tren turun. Mekanisme konfirmasi ganda ini secara efektif mengurangi sinyal palsu.

  2. Multi-Step Trailing Take-Profit: Strategi ini menetapkan 4 target take-profit yang dapat disesuaikan. Setiap target memiliki persentase keuntungan dan rasio penutupan posisi yang sesuai. Misalnya, target pertama mungkin menutup 12% dari posisi dengan keuntungan 6%, yang kedua mungkin menutup 8% dengan keuntungan 12%, dan sebagainya. Mekanisme ini memungkinkan penguncian keuntungan secara bertahap sambil menjaga bagian dari posisi terbuka untuk mendapatkan keuntungan dari pergerakan pasar yang berkelanjutan.

  3. Arah Perdagangan Fleksibel: Pengguna dapat memilih untuk berdagang hanya panjang, hanya pendek, atau kedua arah, beradaptasi dengan lingkungan pasar yang berbeda dan preferensi perdagangan.

  4. Stop-Loss Dinamis: Meskipun tidak ada pengaturan stop-loss eksplisit dalam kode, strategi secara otomatis menutup posisi ketika indikator Supertrend berbalik, secara efektif bertindak sebagai stop-loss dinamis.

Keuntungan Strategi

  1. Manajemen Risiko yang Dioptimalkan: Mekanisme mengambil keuntungan yang diikuti dengan beberapa langkah sangat meningkatkan rasio risiko-balasan strategi. Dengan secara progresif mengunci keuntungan, strategi dapat mengurangi risiko penarikan sambil mempertahankan potensi kenaikan.

  2. Mengurangi sinyal palsu: Penggunaan indikator Supertrend ganda secara signifikan mengurangi dampak sinyal palsu, meningkatkan akurasi dan keandalan perdagangan.

  3. Adaptabilitas tinggi: Strategi dapat menyesuaikan arah perdagangan dan parameter mengambil keuntungan secara fleksibel berdasarkan preferensi pengguna dan kondisi pasar, membuatnya cocok untuk berbagai instrumen perdagangan dan kerangka waktu.

  4. Tingkat Otomatisasi Tinggi: Strategi sepenuhnya otomatis, dari masuk ke mengambil keuntungan dan keluar, meminimalkan dampak emosi dan kesalahan operasional.

  5. Manajemen Modal Fleksibel: Dengan menetapkan rasio mengambil keuntungan yang berbeda, strategi mencapai manajemen modal yang fleksibel, memastikan realisasi keuntungan parsial yang cepat sementara memungkinkan posisi yang tersisa untuk terus mendapatkan keuntungan dari pergerakan pasar.

Risiko Strategi

  1. Sensitivitas Parameter: Kinerja strategi sangat tergantung pada pengaturan indikator Supertrend dan parameter take-profit. Parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang penting.

  2. Trend Dependency: Sebagai strategi trend-mengikuti, mungkin sering masuk dan keluar di pasar bergolak, menyebabkan biaya perdagangan yang tidak perlu.

  3. Risiko slippage: Di pasar yang bergerak cepat, eksekusi multi-step take profit dapat dipengaruhi oleh slippage, sehingga harga eksekusi yang sebenarnya menyimpang dari harapan.

  4. Risiko over-optimization: Dengan beberapa parameter yang dapat disesuaikan, strategi cenderung terlalu dioptimalkan, yang berpotensi menyebabkan perbedaan yang signifikan antara hasil backtesting dan kinerja perdagangan langsung.

Arah Optimasi Strategi

  1. Memperkenalkan Penyaringan Volatilitas: Pertimbangkan untuk memasukkan ATR atau indikator volatilitas lainnya untuk mengurangi frekuensi perdagangan selama periode volatilitas rendah, meningkatkan kemampuan strategi untuk beradaptasi dengan kondisi pasar yang berbeda.

  2. Penyesuaian Parameter Dinamis: Jelajahi menggunakan algoritma adaptif untuk menyesuaikan parameter Supertrend dan target take-profit secara dinamis untuk beradaptasi lebih baik dengan perubahan pasar.

  3. Meningkatkan Mekanisme Stop-Loss: Sementara pembalikan Supertrend memberikan beberapa fungsi stop-loss, pertimbangkan untuk menambahkan mekanisme stop-loss yang lebih fleksibel, seperti trailing stop, untuk pengendalian risiko yang lebih baik.

  4. Mengintegrasikan Indikator Teknis Tambahan: Pertimbangkan untuk memasukkan indikator teknis lain seperti RSI atau MACD untuk meningkatkan akurasi masuk dan keluar melalui pertemuan multi-indikator.

  5. Mengoptimalkan Manajemen Modal: Menjelajahi strategi manajemen modal yang lebih canggih, seperti menyesuaikan ukuran posisi secara dinamis berdasarkan kinerja akun, untuk lebih menyeimbangkan risiko dan imbalan.

  6. Optimasi Backtesting: Melakukan backtesting yang lebih komprehensif, termasuk analisis kinerja di berbagai kerangka waktu dan kondisi pasar, untuk mengidentifikasi skenario aplikasi dan pengaturan parameter optimal strategi.

Kesimpulan

Strategi mengambil keuntungan ini, berdasarkan indikator Supertrend ganda, mencapai keseimbangan antara risiko dan imbalan melalui mekanisme mengambil keuntungan multi-langkah yang fleksibel. Keuntungan utama strategi ini terletak pada kemampuan manajemen risiko yang sangat baik dan sensitivitas terhadap tren. Namun, pengguna perlu memperhatikan pengaturan parameter dan dampak lingkungan pasar saat menerapkannya. Melalui optimalisasi dan penyempurnaan lebih lanjut, strategi ini memiliki potensi untuk menjadi sistem perdagangan otomatis yang kuat dan andal. Dalam aplikasi praktis, dianjurkan agar pedagang melakukan backtesting dan perdagangan kertas yang menyeluruh, dan melakukan penyesuaian parameter yang sesuai berdasarkan instrumen perdagangan tertentu dan kondisi pasar.


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

//@version=5
strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true )

// this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings. 
// The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals.


// User inputs for take profit settings
// Grouping Take Profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings")

takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings")

numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")

// Grouping Trade Direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction")

// Grouping Supertrend settings
atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings")
factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings")

atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings")
factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings")


// Function to calculate Supertrend
supertrend(factor, atrPeriod) =>
    [a, direction] = ta.supertrend(factor, atrPeriod)
    direction

// Calculate Double Supertrend
supertrend1 = supertrend(factor1, atrPeriod1)
supertrend2 = supertrend(factor2, atrPeriod2)

// Entry conditions
longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both")

// Exit conditions
longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both")

// Variables to store the highest and lowest prices during the trade
var float highestPrice = na
var float lowestPrice = na

// Get the entry price from open trades
entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)

// Reset highestPrice or lowestPrice when entering new trades
if (longCondition and strategy.position_size <= 0)
    highestPrice := na // Reset the highest price
    strategy.entry("My Long Entry Id", strategy.long) // Enter long position
    strategy.close("My Short Entry Id", "Short Exit") // Close short position if any

if (shortCondition and strategy.position_size >= 0)
    lowestPrice := na // Reset the lowest price
    strategy.entry("My Short Entry Id", strategy.short) // Enter short position
    strategy.close("My Long Entry Id", "Long Exit") // Close long position if any

// Exit trades based on conditions
if (longExitCondition and strategy.position_size > 0)
    strategy.close("My Long Entry Id", "Long Exit") // Exit long position

if (shortExitCondition and strategy.position_size < 0)
    strategy.close("My Short Entry Id", "Short Exit") // Exit short position

if (strategy.position_size > 0)
    // Update the highest price for long positions
    highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)

    // Step 1
    if (useTakeProfit and numberOfSteps >= 1)
        strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
    // Step 2
    if (useTakeProfit and numberOfSteps >= 2)
        strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
    // Step 3
    if (useTakeProfit and numberOfSteps >= 3)
        strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
    // Step 4
    if (useTakeProfit and numberOfSteps == 4)
        strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))

if (strategy.position_size < 0)
    // Update the lowest price for short positions
    lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low)

    // Step 1
    if (useTakeProfit and numberOfSteps >= 1)
        strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
    // Step 2
    if (useTakeProfit and numberOfSteps >= 2)
        strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
    // Step 3
    if (useTakeProfit and numberOfSteps >= 3)
        strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
    // Step 4
    if (useTakeProfit and numberOfSteps == 4)
        strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))


Berkaitan

Lebih banyak