Supertrend dwi-cetusan strategi pengambilan untung bergerak berbilang langkah

ATR ST TP
Tarikh penciptaan: 2024-06-21 14:36:35 Akhirnya diubah suai: 2024-06-21 14:36:35
Salin: 1 Bilangan klik: 698
1
fokus pada
1617
Pengikut

Supertrend dwi-cetusan strategi pengambilan untung bergerak berbilang langkah

Gambaran keseluruhan

Strategi ini menggunakan dua parameter yang berbeza untuk menilai trend pasaran dan melakukan perdagangan berbilang arah mengikut arah trend. Inti strategi ini adalah menggunakan mekanisme berhenti bergerak berbilang langkah untuk mengunci keuntungan secara beransur-ansur dengan menetapkan beberapa sasaran berhenti, sambil mengekalkan beberapa kedudukan untuk menangkap keadaan yang lebih besar.

Prinsip Strategi

  1. Indikator Supertrend Ganda: Strategi menggunakan dua parameter yang menetapkan indikator Supertrend yang berbeza untuk menilai trend. Apabila kedua-dua indikator menunjukkan trend naik pada masa yang sama, mencetuskan beberapa isyarat; Apabila kedua-dua indikator menunjukkan trend menurun pada masa yang sama, mencetuskan isyarat kosong.

  2. Berpindah Stop: Strategi menetapkan 4 sasaran berhenti yang boleh disesuaikan. Setiap sasaran mempunyai peratusan berhenti dan peratusan kedudukan yang sesuai. Sebagai contoh, sasaran berhenti pertama mungkin ditetapkan untuk menebus 12% kedudukan apabila keuntungan 6% dan sasaran kedua mungkin menebus 8% kedudukan apabila keuntungan 12% dan sebagainya.

  3. Arah perdagangan yang fleksibel: Strategi ini membolehkan pengguna memilih untuk berdagang hanya dengan lebih, hanya dengan lebih atau dua arah untuk menyesuaikan diri dengan keadaan pasaran dan keutamaan perdagangan yang berbeza.

  4. Hentian dinamik: Walaupun tiada tetapan hentian dinamik yang jelas dalam kod, strategi ini akan secara automatik melonggarkan kedudukan apabila indikator Supertrend berbalik, yang sebenarnya berfungsi sebagai hentian dinamik.

Kelebihan Strategik

  1. Pengendalian risiko yang dioptimumkan: mekanisme hentian bergerak pelbagai langkah meningkatkan kadar risiko-keuntungan strategi. Dengan mengunci keuntungan secara beransur-ansur, strategi dapat mengurangkan risiko penarikan balik sambil mengekalkan ruang untuk kenaikan.

  2. Mengurangkan isyarat palsu: Penggunaan petunjuk Supertrend berganda mengurangkan kesan isyarat palsu dengan ketara, meningkatkan ketepatan dan kebolehpercayaan perdagangan.

  3. Kebolehan beradaptasi: Strategi ini dapat menyesuaikan arah perdagangan dan parameter berhenti secara fleksibel mengikut keutamaan pengguna dan keadaan pasaran, sesuai untuk pelbagai jenis perdagangan dan tempoh masa.

  4. Tingkat automasi yang tinggi: Strategi sepenuhnya automatik, tidak memerlukan campur tangan manusia dari masuk, berhenti dan keluar, mengurangkan kemungkinan kesan emosi dan kesilapan operasi.

  5. Fleksibiliti Pengurusan Wang: Dengan menetapkan peratusan hentian yang berbeza, strategi dapat mewujudkan pengurusan wang yang fleksibel, yang dapat menjamin penguncian keuntungan yang cepat, tetapi juga membolehkan kedudukan yang tersisa terus mendapat keuntungan.

Risiko Strategik

  1. Sensitiviti parameter: Prestasi strategi sangat bergantung pada parameter Supertrend dan parameter Stop. Parameter yang tidak sesuai boleh menyebabkan perdagangan berlebihan atau kehilangan peluang penting.

  2. Kepercayaan trend: Sebagai strategi trend-following, ia mungkin sering masuk dan keluar dalam pasaran yang bergolak, menyebabkan kos dagangan yang tidak perlu.

  3. Risiko slippage: Dalam keadaan yang pantas, pelaksanaan multi-langkah berhenti mungkin dipengaruhi oleh slippage, dan harga pelaksanaan sebenarnya mungkin menyimpang dari jangkaan.

  4. Risiko overoptimisasi: Strategi mempunyai banyak parameter yang boleh disesuaikan, mudah jatuh ke dalam perangkap overoptimisasi, yang menyebabkan hasil pengemasan kembali berbeza dengan prestasi cakera hidup.

Arah pengoptimuman strategi

  1. Memperkenalkan penapis turun naik: pertimbangkan untuk menggabungkan ATR atau petunjuk turun naik lain, mengurangkan frekuensi perdagangan semasa turun naik rendah, meningkatkan kebolehpasaran strategi dalam keadaan pasaran yang berbeza.

  2. Penyesuaian parameter dinamik: Penyesuaian parameter Supertrend dan sasaran hentian secara dinamik boleh diterokai menggunakan algoritma penyesuaian untuk menyesuaikan diri dengan perubahan pasaran.

  3. Menambah mekanisme penutupan kerugian: Walaupun Supertrend menawarkan fungsi penutupan kerugian secara terbalik, penambahan mekanisme penutupan kerugian yang lebih fleksibel seperti penjejakan penutupan kerugian boleh dipertimbangkan untuk mengawal risiko lebih lanjut.

  4. Gabungan dengan penunjuk teknikal lain: Anda boleh mempertimbangkan untuk memperkenalkan penunjuk teknikal lain seperti RSI, MACD, dan lain-lain untuk meningkatkan ketepatan masuk dan keluar melalui resonasi pelbagai penunjuk.

  5. Pengurusan wang yang dioptimumkan: Anda boleh meneroka strategi pengurusan wang yang lebih kompleks, seperti menyesuaikan saiz kedudukan secara dinamik mengikut keuntungan akaun, untuk menyeimbangkan risiko dan keuntungan dengan lebih baik.

  6. Pengoptimuman pengembalian: melakukan pengembalian yang lebih menyeluruh, termasuk analisis prestasi dalam tempoh masa yang berbeza, dalam keadaan pasaran yang berbeza, untuk mencari senario penggunaan strategi terbaik dan tetapan parameter.

ringkaskan

Strategi berhenti bergerak berbilang langkah ini adalah berdasarkan kepada indikator Supertrend ganda, yang menyeimbangkan risiko dan keuntungan melalui mekanisme berhenti berbilang langkah yang fleksibel. Kelebihan utama strategi ini adalah keupayaan pengendalian risiko yang sangat baik dan kepekaan terhadap trend. Walau bagaimanapun, pengguna perlu memberi perhatian kepada parameter yang ditetapkan dan kesan persekitaran pasaran semasa penerapannya. Dengan pengoptimuman dan penyempurnaan lanjut, strategi ini berpotensi menjadi sistem perdagangan automatik yang kuat dan dipercayai.

Kod sumber strategi
/*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))