Strategi dagangan henti untung dan henti rugi dinamik piramid adaptif berdasarkan purata pergerakan volum

HMA MACD ATR RSI OBV VMA
Tarikh penciptaan: 2024-04-12 16:19:20 Akhirnya diubah suai: 2024-04-12 16:19:20
Salin: 1 Bilangan klik: 651
1
fokus pada
1617
Pengikut

Strategi dagangan henti untung dan henti rugi dinamik piramid adaptif berdasarkan purata pergerakan volum

Gambaran keseluruhan

Strategi ini menggabungkan pelbagai petunjuk teknikal seperti Hull Moving Average (HMA), Moving Average Convergence Spread Indicator (MACD), Average True Range (ATR), Relative Strength Index (RSI), Energy Wave (OBV) dan Volume Moving Average untuk mengenal pasti trend pasaran dan peluang masuk yang berpotensi melalui analisis komprehensif indikator-indikator ini. Strategi ini juga menggunakan kaedah pengurusan risiko seperti penambahan kedudukan piramid, stop loss bergerak dan stop loss bergerak, berusaha untuk menangkap peluang trend sambil mengawal risiko dengan ketat.

Prinsip Strategi

  1. Mengira HMA, MACD, ATR, RSI, OBV dan purata bergerak jumlah transaksi
  2. Keadaan kosong berdasarkan persilangan garis laju MACD, hubungan OBV dengan purata bergeraknya, tahap RSI dan perbandingan lalu lintas dengan garis rata-rata
  3. Tetapkan jumlah maksimum kenaikan pangkat piramid dan peratusan setiap kenaikan pangkat, kenaikan pangkat secara beransur-ansur apabila trend berterusan
  4. Menyesuaikan tahap hentian dan hentian mengikut ATR secara dinamik, dan melindungi keuntungan dengan strategi hentian bergerak
  5. Pengendalian dinamik terhadap kedudukan memegang berdasarkan jumlah kedudukan yang dibuka setiap kali berdasarkan kepentingan, nisbah risiko dan ATR akaun
  6. Garis pelarasan stop loss pada carta untuk menunjukkan kawalan risiko secara visual

Kelebihan Strategik

  1. Keputusan gabungan pelbagai petunjuk, meningkatkan kebolehpercayaan isyarat: Strategi ini mengambil kira pelbagai faktor seperti harga, trend, momentum dan jumlah transaksi, meningkatkan kebolehpercayaan isyarat perdagangan melalui pengesahan bersama beberapa petunjuk.
  2. Pengurusan kedudukan yang sesuai, kawalan dinamik risiko: Berdasarkan faktor-faktor seperti hak dan kepentingan akaun, nisbah risiko dan ATR, strategi boleh menyesuaikan jumlah kedudukan secara dinamik setiap kali dibuka, mengurangkan kedudukan secara automatik apabila turun naik pasaran meningkat, sehingga dapat mengawal risiko dengan berkesan.
  3. Peningkatan simpanan piramid, memanfaatkan peluang trend: Setelah trend ditubuhkan, strategi meningkatkan keuntungan strategi dengan mengambil bahagian dalam keadaan trend secara beransur-ansur.
  4. Hentikan kerugian dinamik, kawalan kerugian tepat pada masanya dan perlindungan keuntungan: Strategi menyesuaikan tahap hentikan kerugian secara langsung mengikut perubahan ATR, berhenti tepat pada masanya apabila trend berbalik, sambil terus melindungi keuntungan yang telah diperoleh melalui strategi hentikan kerugian bergerak, berkesan mengurangkan penarikan balik strategi.
  5. Grafik intuitif menunjukkan pemantauan dan keputusan yang mudah: Strategi memetakan petunjuk utama dan garisan stop loss pada carta, yang membolehkan peniaga memantau pergerakan pasaran dan pelaksanaan strategi secara intuitif, memberikan asas untuk menyesuaikan strategi tepat pada masanya.

Risiko Strategik

  1. Risiko pengoptimuman parameter: Strategi ini mengandungi beberapa parameter, dan jika parameter dipilih dengan tidak betul, ia boleh menyebabkan prestasi strategi tidak baik. Oleh itu, dalam aplikasi sebenar, parameter perlu dioptimumkan dan diuji untuk memastikan kestabilan strategi.
  2. Risiko perubahan keadaan pasaran: Strategi diukur dan dioptimumkan berdasarkan data sejarah, tetapi keadaan pasaran mungkin berubah, menyebabkan perbezaan besar antara prestasi strategi di masa depan dan prestasi sejarah. Oleh itu, prestasi strategi perlu dinilai secara berkala dan disesuaikan jika perlu.
  3. Risiko peristiwa Swan Hitam: Keadaan pasaran yang melampau (seperti kejatuhan ribut) mungkin menyebabkan strategi mengalami penarikan balik yang lebih besar. Untuk menangani risiko ini, anda boleh mempertimbangkan untuk memasukkan lebih banyak langkah kawalan risiko ke dalam strategi, seperti menetapkan had penarikan balik maksimum dan berhenti berdagang apabila had itu dicapai.
  4. Risiko overfit: Jika parameter strategi terlalu rumit, mungkin terdapat overfit, iaitu strategi berfungsi dengan baik pada data sejarah, tetapi tidak berfungsi dengan baik dalam aplikasi sebenar. Untuk mengelakkan overfit, strategi boleh dinilai dengan kaedah seperti cross-validation.

Arah pengoptimuman strategi

  1. Pengoptimuman parameter dinamik: Pertimbangkan kaedah menggunakan pembelajaran mesin dan lain-lain untuk menyesuaikan parameter strategi dalam masa nyata mengikut perubahan keadaan pasaran, meningkatkan kemampuan strategi untuk menyesuaikan diri.
  2. Kebolehgunaan pelbagai pasaran dan pelbagai jenis: memperluaskan strategi ke lebih banyak pasaran dan varieti, meningkatkan kestabilan strategi dengan menyebarkan pelaburan.
  3. Gabungan analisis asas: berdasarkan analisis teknikal, masukkan pertimbangan faktor asas seperti ekonomi makro, trend industri, meningkatkan keseluruhan strategi.
  4. Menambah analisis sentimen pasaran: memperkenalkan penunjuk sentimen pasaran, seperti indeks panik, untuk menangkap perubahan ekstrem dalam sentimen pasaran, memberikan lebih banyak peluang perdagangan untuk strategi.
  5. Mengoptimumkan langkah-langkah kawalan risiko: Meningkatkan lagi sistem kawalan risiko, seperti memperkenalkan mekanisme penyesuaian penyesuaian strategi hentikan kerugian, meningkatkan keupayaan pengurusan risiko strategi.

ringkaskan

Strategi ini mempunyai beberapa kestabilan dan kebolehan keuntungan dengan menggunakan kombinasi pelbagai petunjuk, pengurusan kedudukan yang sesuai, penambahan simpanan piramid, dan hentian kerugian dinamik, serta mengawal risiko dengan ketat sambil menangkap peluang trend. Tetapi strategi ini juga mempunyai risiko pengoptimuman parameter, perubahan persekitaran pasaran, dan peristiwa black swan, yang perlu terus dioptimumkan dan disempurnakan dalam aplikasi sebenar.

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