Strategi Dagangan Stop Loss dan Take Profit Berkualiti Piramida Berasaskan Volume MA

Penulis:ChaoZhang, Tarikh: 2024-04-12 16:19:20
Tag:HMAMACDATRRSIOBVVMA

img

Ringkasan

Strategi ini menggabungkan pelbagai penunjuk teknikal, termasuk Hull Moving Average (HMA), Moving Average Convergence Divergence (MACD), Average True Range (ATR), Relative Strength Index (RSI), On-Balance Volume (OBV), dan Volume Moving Average. Dengan menganalisis secara komprehensif penunjuk ini, strategi ini bertujuan untuk mengenal pasti trend pasaran dan peluang masuk yang berpotensi.

Prinsip Strategi

  1. Mengira penunjuk seperti HMA, MACD, ATR, RSI, OBV, dan Purata Bergerak Volume
  2. Menentukan keadaan panjang dan pendek berdasarkan persilangan garis MACD, hubungan antara OBV dan purata bergerak, tahap RSI dan perbandingan jumlah dengan purata bergerak
  3. Tetapkan bilangan maksimum kedudukan piramid dan peratusan setiap kedudukan tambahan, secara beransur-ansur meningkatkan kedudukan seperti trend berterusan
  4. Sesuaikan secara dinamik tahap stop loss dan mengambil keuntungan berdasarkan ATR dan mengamalkan strategi stop loss untuk melindungi keuntungan
  5. Mengira saiz kedudukan untuk setiap entri berdasarkan ekuiti akaun, peratusan risiko, dan ATR, mencapai pengurusan kedudukan dinamik
  6. Menggambar stop loss dan mengambil garis tahap keuntungan pada carta untuk memaparkan kawalan risiko secara visual

Kelebihan Strategi

  1. Gabungan pelbagai penunjuk untuk meningkatkan kebolehpercayaan isyarat: Strategi ini secara komprehensif mempertimbangkan faktor-faktor seperti harga, trend, momentum, dan jumlah, dan mengesahkan isyarat perdagangan melalui beberapa penunjuk, dengan itu meningkatkan kebolehpercayaan isyarat perdagangan.
  2. Pengurusan kedudukan adaptif untuk kawalan risiko dinamik: Berdasarkan faktor-faktor seperti ekuiti akaun, peratusan risiko, dan ATR, strategi dapat menyesuaikan saiz kedudukan secara dinamik untuk setiap entri, secara automatik mengurangkan kedudukan apabila turun naik pasaran meningkat, mengawal risiko dengan berkesan.
  3. Piramida untuk sepenuhnya menangkap peluang trend: Selepas trend ditubuhkan, strategi secara beransur-ansur meningkatkan kedudukan melalui piramida, memaksimumkan penyertaan dalam pergerakan trend dan meningkatkan keuntungan strategi.
  4. Hentikan kerugian dinamik dan ambil keuntungan untuk kawalan kerugian yang tepat pada masanya dan perlindungan keuntungan: Strategi menyesuaikan tahap hentikan kerugian dan mengambil keuntungan dalam masa nyata berdasarkan perubahan ATR, dengan segera menghentikan kerugian apabila trend berbalik, sambil terus melindungi keuntungan melalui strategi hentikan kerugian, secara berkesan mengurangkan pengeluaran strategi.
  5. Paparan carta intuitif untuk pemantauan dan pengambilan keputusan yang mudah: Strategi memetakan penunjuk utama dan garis paras stop loss / mengambil keuntungan pada carta, yang membolehkan peniaga untuk memantau pergerakan pasaran dan pelaksanaan strategi secara intuitif, menyediakan asas untuk penyesuaian strategi yang tepat pada masanya.

Risiko Strategi

  1. Risiko pengoptimuman parameter: Strategi melibatkan beberapa parameter, dan pemilihan parameter yang tidak betul boleh menyebabkan prestasi strategi yang buruk. Oleh itu, dalam aplikasi praktikal, parameter perlu dioptimumkan dan diuji untuk memastikan ketahanan strategi.
  2. Risiko perubahan persekitaran pasaran: Strategi diuji dan dioptimumkan berdasarkan data sejarah, tetapi keadaan pasaran boleh berubah, menyebabkan prestasi masa depan strategi berbeza dengan prestasi sejarahnya.
  3. Risiko peristiwa black swan: Pergerakan pasaran yang melampau (seperti kenaikan atau kejatuhan tajam) boleh menyebabkan strategi mengalami penurunan yang ketara. Untuk menangani risiko ini, langkah kawalan risiko tambahan boleh dipertimbangkan, seperti menetapkan ambang pengeluaran maksimum dan menghentikan perdagangan sebaik ambang tercapai.
  4. Risiko overfitting: Jika parameter strategi terlalu kompleks, overfitting mungkin berlaku, di mana strategi berfungsi dengan baik pada data sejarah tetapi tidak baik dalam aplikasi sebenar.

Arahan Pengoptimuman Strategi

  1. Pengoptimuman parameter dinamik: Pertimbangkan untuk menggunakan kaedah seperti pembelajaran mesin untuk menyesuaikan parameter strategi dalam masa nyata berdasarkan perubahan keadaan pasaran, meningkatkan kebolehsesuaian strategi.
  2. Kebolehgunaan pelbagai pasaran dan pelbagai aset: Luaskan strategi ke lebih banyak pasaran dan aset untuk meningkatkan ketahanan strategi melalui pelaburan yang pelbagai.
  3. Gabungan dengan analisis asas: Sebagai tambahan kepada analisis teknikal, memasukkan pertimbangan mengenai trend makroekonomi dan industri untuk meningkatkan komprehensi strategi.
  4. Penggabungan analisis sentimen pasaran: Memperkenalkan penunjuk sentimen pasaran, seperti indeks ketakutan, untuk menangkap perubahan ekstrem dalam sentimen pasaran dan menyediakan lebih banyak peluang perdagangan untuk strategi.
  5. Pengoptimuman langkah-langkah kawalan risiko: Meningkatkan lagi sistem kawalan risiko, seperti memperkenalkan mekanisme penyesuaian adaptif untuk strategi stop loss, untuk meningkatkan keupayaan pengurusan risiko strategi.

Ringkasan

Dengan menggunakan kaedah seperti kombinasi pelbagai penunjuk, pengurusan kedudukan adaptif, piramid, dan stop loss dinamik dan mengambil keuntungan, strategi ini bertujuan untuk menangkap peluang trend sambil mengawal risiko dengan ketat, menunjukkan tahap ketahanan dan keuntungan yang tertentu. Walau bagaimanapun, strategi ini juga menghadapi risiko seperti pengoptimuman parameter, perubahan dalam keadaan pasaran, dan peristiwa angsa hitam, yang memerlukan pengoptimuman dan penambahbaikan yang berterusan dalam aplikasi praktikal.


/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Enhanced Trading Strategy v5 with Visible SL/TP", overlay=true)

// Input settings
hma_length = input(9, title="HMA Length")
fast_length = input(12, title="MACD Fast Length")
slow_length = input(26, title="MACD Slow Length")
siglen = input(9, title="Signal Smoothing")
atr_length = input(14, title="ATR Length")
rsi_length = input(14, title="RSI Length")
obv_length = input(10, title="OBV Length")
volume_ma_length = input(10, title="Volume MA Length")

// Pyramiding inputs
max_pyramid_positions = input(3, title="Max Pyramid Positions")
pyramid_factor = input(0.5, title="Pyramid Factor")

// Risk and Reward Management Inputs
risk_per_trade = input(1.0, title="Risk per Trade (%)")
atr_multiplier_for_sl = input(1.5, title="ATR Multiplier for Stop Loss")
atr_multiplier_for_tp = input(3.0, title="ATR Multiplier for Take Profit")
trailing_atr_multiplier = input(2.0, title="ATR Multiplier for Trailing Stop")

// Position sizing functions
calc_position_size(equity, risk_pct, atr) =>
    pos_size = (equity * risk_pct / 100) / (atr_multiplier_for_sl * atr)
    pos_size

calc_pyramid_size(current_size, max_positions) =>
    pyramid_size = current_size * (max_positions - strategy.opentrades) / max_positions
    pyramid_size

// Pre-calculate lengths for HMA
half_length = ceil(hma_length / 2)
sqrt_length = round(sqrt(hma_length))

// Calculate indicators
hma = wma(2 * wma(close, half_length) - wma(close, hma_length), sqrt_length)
my_obv = cum(close > close[1] ? volume : close < close[1] ? -volume : 0)
obv_sma = sma(my_obv, obv_length)
[macd_line, signal_line, _] = macd(close, fast_length, slow_length, siglen)
atr = atr(atr_length)
rsi = rsi(close, rsi_length)
vol_ma = sma(volume, volume_ma_length)

// Conditions
long_condition = crossover(macd_line, signal_line) and my_obv > obv_sma and rsi > 50 and volume > vol_ma
short_condition = crossunder(macd_line, signal_line) and my_obv < obv_sma and rsi < 50 and volume > vol_ma

// Strategy Entry with improved risk-reward ratio
var float long_take_profit = na
var float long_stop_loss = na
var float short_take_profit = na
var float short_stop_loss = na

if (long_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Long", strategy.long, qty = size)
    long_stop_loss := close - atr_multiplier_for_sl * atr
    long_take_profit := close + atr_multiplier_for_tp * atr
    
if (short_condition)
    size = calc_position_size(strategy.equity, risk_per_trade, atr)
    strategy.entry("Short", strategy.short, qty = size)
    short_stop_loss := close + atr_multiplier_for_sl * atr
    short_take_profit := close - atr_multiplier_for_tp * atr

// Drawing the SL/TP lines
// if (not na(long_take_profit))
//     line.new(bar_index[1], long_take_profit, bar_index, long_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], long_stop_loss, bar_index, long_stop_loss, width = 2, color = color.red)

// if (not na(short_take_profit))
//     line.new(bar_index[1], short_take_profit, bar_index, short_take_profit, width = 2, color = color.green)
//     line.new(bar_index[1], short_stop_loss, bar_index, short_stop_loss, width = 2, color = color.red)

// Pyramiding logic
if (strategy.position_size > 0)
    if (close > strategy.position_avg_price * (1 + pyramid_factor))
        strategy.entry("Long Add", strategy.long, qty = calc_pyramid_size(strategy.position_size, max_pyramid_positions))

if (strategy.position_size < 0)
    if (close < strategy.position_avg_price * (1 - pyramid_factor))
        strategy.entry("Short Add", strategy.short, qty = calc_pyramid_size(-strategy.position_size, max_pyramid_positions))

// Trailing Stop
strategy.exit("Trailing Stop Long", "Long", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)
strategy.exit("Trailing Stop Short", "Short", trail_points = atr * trailing_atr_multiplier, trail_offset = atr * trailing_atr_multiplier)

// Plots
plot(hma, title="HMA", color=color.blue)
plot(obv_sma, title="OBV SMA", color=color.orange)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)
plotshape(long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="Long")
plotshape(short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="Short")


Berkaitan

Lebih lanjut