Strategi Dagangan Risiko Terkawal MACD

Penulis:ChaoZhang, Tarikh: 2023-10-26 15:51:34
Tag:

img

Ringkasan

Strategi ini merancang strategi perdagangan jangka panjang yang mengawal risiko setiap perdagangan berdasarkan penunjuk MACD. Berbanding dengan strategi flipping panjang-pendek tradisional, strategi ini lebih memberi tumpuan kepada mengawal risiko setiap perdagangan. Dengan mengira stop loss yang munasabah dan mengambil tahap keuntungan dan menetapkan saiz kedudukan yang sesuai, ia mengehadkan kerugian maksimum untuk setiap perdagangan. Ini dapat mengawal penarikan secara berkesan dan mencapai keuntungan yang stabil dalam jangka panjang.

Prinsip-prinsip

Strategi ini mula-mula mengira garis MACD dan garis isyarat penunjuk MACD. Apabila garis MACD melintasi di atas garis isyarat, ia ditentukan sebagai isyarat beli. Untuk menapis pecah palsu, strategi memerlukan barsince ((crossover ((macd_line, signal_line)) <= 5, yang bermaksud pecah berlaku dalam 5 bar yang paling baru. Ia juga memerlukan kedua-dua garis MACD dan isyarat berada di bawah 0, yang menunjukkan keadaan oversold, dan penutupan berada di atas garis WMA, yang menunjukkan trend menaik. Apabila syarat di atas dipenuhi, kedudukan panjang dibuka.

Untuk setiap perdagangan, strategi mengira tahap stop loss dan mengambil keuntungan yang munasabah. Stop loss ditetapkan pada paras terendah dari 3 bar yang paling baru. Take profit ditetapkan pada harga masuk ditambah 4 kali jarak antara stop loss dan harga masuk.

Kuncinya adalah bahawa strategi mengira saiz kedudukan tertentu berdasarkan risiko maksimum yang berpatutan. Parameter modal_risiko menetapkan peratusan jumlah modal yang boleh hilang untuk setiap perdagangan. Saiz kedudukan dalam USD kemudian dikira berdasarkan julat stop loss. Ia kemudian ditukar kepada kontrak untuk pelaksanaan.

Risiko setiap perdagangan dikawal dalam 1% daripada jumlah modal, yang dapat mengawal pengeluaran secara berkesan.

Kelebihan

  • Kawalan risiko adalah keutamaan, risiko setiap perdagangan boleh dikawal
  • Ukuran kedudukan yang dioptimumkan untuk memaksimumkan penggunaan modal
  • Strategi Stop Loss berkesan mengawal pengeluaran
  • Keuntungan yang munasabah membolehkan potensi keuntungan yang tinggi

Risiko dan Penambahbaikan

  • MACD mempunyai lag, mungkin terlepas perubahan trend yang cepat
  • Tetapan stop loss atau mengambil keuntungan yang tidak betul boleh mengurangkan keuntungan atau meningkatkan risiko
  • Frekuensi perdagangan yang tinggi boleh meningkatkan kos transaksi

Peningkatan yang mungkin:

  • Menggabungkan penunjuk lain untuk menentukan trend, mengelakkan kelewatan MACD
  • Mengoptimumkan algorithm stop loss dan mengambil keuntungan untuk menjadi lebih fleksibel
  • Ringankan kekerapan dagangan untuk mengurangkan kos urus niaga

Ringkasan

Strategi ini menentukan arah trend menggunakan MACD, dan mengambil kawalan risiko sebagai keutamaan untuk berdagang dengan saiz kedudukan yang dioptimumkan. Kuncinya adalah kawalan risiko dan saiz kedudukan, yang dapat mencapai keuntungan yang stabil dalam jangka panjang. Tetapi MACD mempunyai beberapa kelemahan, dan mekanisme stop loss / take profit memerlukan pengoptimuman lanjut. Mengoptimumkan penggunaan penunjuk, tetapan stop loss / take profit, dan mengurangkan kekerapan perdagangan dapat menjadikan strategi lebih kuat.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD )

capital_risk    = input( 1.0, "% capital risk per trade" ) / 100
r_exit          = input( 4.0, "Take Profit in 'R'" )
wma_length      = input( 150, 'WMA Bias Length' )

[macd_line, signal_line, hist ] = macd(close, 12, 26, 9)

w_line = wma( close, wma_length )

golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0

float stop = na
float tp = na

// For a stop, use a recent low 
stop := golong ? lowest(low, 3)[1] : stop[1]
range = abs(close - stop)
tp := golong ? close + (r_exit * range) : tp[1]


// This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity`
how_much_willing_to_lose = strategy.equity * capital_risk
// Spread the risk across the stop range 
position_size_in_usd = how_much_willing_to_lose / (range / close)
// Sized specified in base contract
position_size_in_contracts = position_size_in_usd / close

// Enter the position
if golong
    strategy.entry("long", strategy.long, qty=position_size_in_contracts)
    strategy.exit("long exit","long", stop=stop, limit=tp)

// experimental exit strategy
// hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' )
// if hist < 0 and hist_strength == 'strong' and falling( hist, 8 )
//     strategy.close("long")


plot( strategy.equity,  color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )

Lebih lanjut