Strategi Trend BB KC secara beransur-ansur

Penulis:ChaoZhang, Tarikh: 2024-01-26 15:10:41
Tag:

img

Ringkasan

Strategi ini menggunakan gabungan Bollinger Bands dan isyarat Saluran Keltner untuk mengenal pasti trend pasaran. Bollinger Bands adalah alat analisis teknikal yang menentukan saluran berdasarkan julat turun naik harga. Isyarat Saluran Keltner menggabungkan turun naik harga dan trend untuk menentukan tahap sokongan atau rintangan. Strategi ini menggunakan kelebihan kedua-dua penunjuk dengan menilai sama ada persilangan emas berlaku antara Bollinger Bands dan Saluran Keltner untuk mencari peluang panjang dan pendek.

Prinsip Strategi

  1. Hitung Bollinger Bands tengah, atas, dan bawah dalam tempoh 20 tempoh. Lebar band ditakrifkan sebagai 2 penyimpangan standard.
  2. Mengira saluran Keltner tengah, atas, dan bawah dalam 20 tempoh. Lebar saluran ditakrifkan sebagai 2.2 kali julat sebenar.
  3. Apabila garis atas Saluran Keltner melintasi di atas garis atas Bollinger Band dan jumlahnya lebih besar daripada purata bergerak 10 tempohnya, pergi panjang.
  4. Apabila garis bawah Saluran Keltner melintasi di bawah garis bawah Bollinger Band dan jumlahnya lebih besar daripada purata bergerak 10 tempoh, pergi pendek.
  5. Tutup semua kedudukan jika tiada isyarat keluar yang mencetuskan selepas 20 bar sejak masuk.
  6. Tetapkan stop loss 1.5% untuk perdagangan panjang dan -1.5% stop loss untuk perdagangan pendek. Tetapkan stop trailing 2% untuk perdagangan panjang dan -2% stop trailing untuk perdagangan pendek.

Strategi ini terutamanya bergantung kepada Bollinger Bands untuk menilai julat turun naik dan momentum. Saluran Keltner berfungsi sebagai alat pengesahan kerana ciri-ciri yang sama tetapi parameter yang berbeza. Menggunakan kedua-dua penunjuk ini bersama-sama meningkatkan ketepatan isyarat. Menggabungkan jumlah dagangan juga membantu menapis isyarat yang tidak sah.

Analisis Kekuatan

  1. Menggunakan kelebihan gabungan Bollinger Bands dan Saluran Keltner untuk meningkatkan ketepatan isyarat.
  2. Penapisan mengikut jumlah dagangan mengurangkan isyarat yang tidak sah daripada sentuhan garis yang kerap.
  3. Kawalan risiko yang berkesan daripada mekanisme stop loss dan trailing stop yang diprogram.
  4. Keluar cepat dan kehilangan yang terhad daripada mengambil keuntungan paksa selepas isyarat yang tidak sah.

Analisis Risiko

  1. Kedua-dua Bollinger Band dan Saluran Keltner adalah berdasarkan purata bergerak dan turun naik.
  2. Tiada mekanisme gabungan bermakna beberapa berhenti keluar boleh membawa kepada kerugian yang terlalu besar.
  3. Isyarat pembalikan sering berlaku. tweak parameter boleh menyebabkan peluang trend terlepas.

Memperluaskan julat stop loss atau menambah penunjuk pengesahan seperti MACD dapat mengurangkan risiko daripada isyarat palsu.

Arahan pengoptimuman

  1. Kesan parameter ujian pada pulangan strategi, seperti panjang, kelipatan penyimpangan piawai dan lain-lain.
  2. Tambah penunjuk lain untuk pengesahan isyarat, contohnya KDJ, MACD.
  3. Gunakan pembelajaran mesin untuk pengoptimuman parameter automatik.

Ringkasan

Strategi ini menggabungkan Bollinger Bands dan Saluran Keltner untuk mengenal pasti trend, yang disahkan oleh jumlah dagangan. Penambahbaikan lanjut seperti pengoptimuman parameter dan menambah penunjuk akan memperkukuhkannya untuk lebih banyak rejim pasaran.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jensenvilhelm

//@version=5
strategy("BB and KC Strategy", overlay=true)

// Define the input parameters for the strategy, these can be changed by the user to adjust the strategy
kcLength = input.int(20, "KC Length", minval=1) // Length for Keltner Channel calculation
kcStdDev = input.float(2.2, "KC StdDev") // Standard Deviation for Keltner Channel calculation
bbLength = input.int(20, "BB Length", minval=1) // Length for Bollinger Bands calculation
bbStdDev = input.float(2, "BB StdDev") // Standard Deviation for Bollinger Bands calculation
volumeLength = input.int(10, "Volume MA Length", minval=1) // Length for moving average of volume calculation
stopLossPercent = input.float(1.5, "Stop Loss (%)") // Percent of price for Stop loss 
trailStopPercent = input.float(2, "Trail Stop (%)") // Percent of price for Trailing Stop
barsInTrade = input.int(20, "Bars in trade before exit", minval = 1) // Minimum number of bars in trade before considering exit

// Calculate Bollinger Bands and Keltner Channel
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bbLength, bbStdDev) // Bollinger Bands calculation
[kc_middle, kc_upper, kc_lower] = ta.kc(close, kcLength, kcStdDev) // Keltner Channel calculation

// Calculate moving average of volume
vol_ma = ta.sma(volume, volumeLength) // Moving average of volume calculation

// Plotting Bollinger Bands and Keltner Channels on the chart
plot(bb_upper, color=color.red) // Bollinger Bands upper line
plot(bb_middle, color=color.blue) // Bollinger Bands middle line
plot(bb_lower, color=color.red) // Bollinger Bands lower line
plot(kc_upper, color=color.rgb(105, 255, 82)) // Keltner Channel upper line
plot(kc_middle, color=color.blue) // Keltner Channel middle line
plot(kc_lower, color=color.rgb(105, 255, 82)) // Keltner Channel lower line

// Define entry conditions: long position if upper KC line crosses above upper BB line and volume is above MA of volume
// and short position if lower KC line crosses below lower BB line and volume is above MA of volume
longCond = ta.crossover(kc_upper, bb_upper) and volume > vol_ma // Entry condition for long position
shortCond = ta.crossunder(kc_lower, bb_lower) and volume > vol_ma // Entry condition for short position

// Define variables to store entry price and bar counter at entry point
var float entry_price = na // variable to store entry price
var int bar_counter = na // variable to store bar counter at entry point

// Check entry conditions and if met, open long or short position
if (longCond)
    strategy.entry("Buy", strategy.long) // Open long position
    entry_price := close // Store entry price
    bar_counter := 1 // Start bar counter
if (shortCond)
    strategy.entry("Sell", strategy.short) // Open short position
    entry_price := close // Store entry price
    bar_counter := 1 // Start bar counter

// If in a position and bar counter is not na, increment bar counter
if (strategy.position_size != 0 and na(bar_counter) == false)
    bar_counter := bar_counter + 1 // Increment bar counter

// Define exit conditions: close position if been in trade for more than specified bars
// or if price drops by more than specified percent for long or rises by more than specified percent for short
if (bar_counter > barsInTrade) // Only consider exit after minimum bars in trade
    if (bar_counter >= barsInTrade)
        strategy.close_all() // Close all positions
    // Stop loss and trailing stop
    if (strategy.position_size > 0)
        strategy.exit("Sell", "Buy", stop=entry_price * (1 - stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for long position
    else if (strategy.position_size < 0)
        strategy.exit("Buy", "Sell", stop=entry_price * (1 + stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for short position


Lebih lanjut