Sumber dimuat naik... memuat...

MA MACD BB Alat Ujian Kembali Strategi Dagangan Multi-Indikator

Penulis:ChaoZhang, Tarikh: 2024-06-03 09:49:08
Tag:MAMACDBB

img

Ringkasan

MA MACD BB Multi-Indicator Trading Strategy Backtesting Tool adalah platform pengembangan dan backtesting strategi perdagangan kuantitatif yang kuat. Alat ini menyokong tiga penunjuk teknikal yang biasa digunakan: Moving Average (MA), Moving Average Convergence Divergence (MACD), dan Bollinger Bands (BB). Pengguna boleh memilih salah satu daripada mereka sebagai penunjuk isyarat perdagangan utama. Pada masa yang sama, alat ini juga menyokong perdagangan panjang dan pendek. Pengguna boleh memilih untuk pergi panjang atau pendek mengikut trend pasaran. Dari segi pengurusan risiko, alat ini membolehkan pengguna menetapkan nisbah modal setiap transaksi dengan fleksibel untuk mengawal dengan lebih baik. Di samping itu, alat ini juga menyediakan analisis penunjuk risiko terperinci dan fungsi penjanaan isyarat untuk membantu pengguna memahami peluang perdagangan dengan lebih baik.

Prinsip Strategi

Prinsip utama strategi ini adalah menggunakan tiga penunjuk teknikal yang biasa (MA, MACD, dan BB) untuk mengenal pasti trend pasaran dan isyarat perdagangan.

  1. Apabila pengguna memilih MA sebagai penunjuk utama, strategi mengira purata bergerak tempoh yang ditentukan, dan menghasilkan isyarat beli dan jual masing-masing apabila harga melintasi di atas atau di bawah purata bergerak.
  2. Apabila pengguna memilih MACD sebagai penunjuk utama, strategi mengira nilai MACD dan garis isyarat, dan menghasilkan isyarat beli dan jual masing-masing apabila MACD melintasi di atas atau di bawah garis isyarat.
  3. Apabila pengguna memilih BB sebagai penunjuk utama, strategi mengira rel atas, tengah dan bawah Bollinger Band. Apabila harga memecahkan rel bawah, isyarat beli dihasilkan; apabila ia memecahkan rel atas, isyarat jual dihasilkan; dan apabila ia kembali ke dekat rel tengah, kedudukan ditutup.

Dalam dagangan sebenar, strategi secara automatik mengira saiz kedudukan setiap urus niaga berdasarkan arah dagangan yang dipilih pengguna (panjang atau pendek) dan tetapan pengurusan modal, dan kemudian melaksanakan operasi pembukaan dan penutupan yang sepadan mengikut isyarat.

Kelebihan Strategi

  1. Penunjuk fleksibel: Pengguna boleh memilih MA, MACD atau BB secara fleksibel sebagai penunjuk dagangan utama mengikut pilihan dan ciri pasaran mereka, menyesuaikan diri dengan gaya dagangan dan persekitaran pasaran yang berbeza.
  2. Perdagangan dua hala: Strategi ini menyokong kedua-dua perdagangan panjang dan pendek. Pengguna boleh memilih arah perdagangan dengan fleksibel mengikut trend pasaran, dan boleh mendapat keuntungan bukan sahaja di pasaran yang meningkat, tetapi juga mendapat peluang pendapatan di pasaran yang jatuh.
  3. Risiko yang boleh dikawal: Pengguna boleh menetapkan nisbah modal setiap urus niaga dengan fleksibel untuk mengawal eksposur risiko satu urus niaga. Pada masa yang sama, strategi secara automatik mengira saiz kedudukan setiap urus niaga berdasarkan baki akaun untuk mengelakkan mengambil risiko yang berlebihan.
  4. Isyarat yang jelas: Strategi ini menggunakan penunjuk teknikal biasa untuk menjana isyarat perdagangan yang objektif dan jelas, dan secara intuitif memaparkannya melalui carta, yang membolehkan pengguna mengenal pasti dengan jelas arah trend dan waktu perdagangan.
  5. Ujian belakang yang mudah: Pengguna boleh menggunakan alat ini untuk menguji semula data sejarah, menilai dan mengoptimumkan prestasi strategi dengan cepat, dan memberikan rujukan penting untuk perdagangan langsung.

Risiko Strategi

  1. Risiko pasaran: Mana-mana strategi perdagangan menghadapi risiko turun naik dan ketidakpastian pasaran, dan strategi ini tidak terkecuali.
  2. Risiko parameter: Prestasi strategi ini bergantung kepada parameter penunjuk yang dipilih oleh pengguna, seperti tempoh MA, tempoh garis cepat dan perlahan MACD, dan tempoh dan lebar BB. Tetapan parameter yang tidak sesuai boleh menyebabkan prestasi strategi yang buruk.
  3. Risiko overfitting: Jika pengguna terlalu mengoptimumkan parameter strategi dalam pengujian semula, ia boleh menyebabkan strategi menjadi terlalu khusus untuk data sejarah tertentu dan berfungsi dengan buruk di pasaran sebenar, iaitu, masalah overfitting berlaku.
  4. Risiko angsa hitam: Strategi ini terutamanya bergantung kepada penunjuk teknikal untuk menjana isyarat perdagangan. Jika pasaran mengalami perubahan asas utama atau peristiwa melampau, strategi mungkin tidak dapat bertindak balas tepat pada masanya, yang membawa kepada kerugian yang ketara.

Untuk mengurangkan risiko di atas, pengguna harus menetapkan parameter strategi dengan munasabah, menilai dan menyesuaikan strategi secara berkala, dan memantau dengan teliti trend pasaran, campur tangan secara manual apabila perlu.

Arah Pengoptimuman Strategi

  1. Pengoptimuman parameter dinamik: Pada masa ini, parameter indikator strategi tetap. Kita boleh mempertimbangkan untuk memperkenalkan mekanisme penyesuaian untuk menyesuaikan parameter secara dinamik mengikut perubahan keadaan pasaran untuk menyesuaikan diri dengan lebih baik dengan pasaran.
  2. Pengoptimuman isyarat gabungan: Pada masa ini, strategi ini terutamanya menjana isyarat perdagangan berdasarkan satu penunjuk.
  3. Pengoptimuman pengurusan kedudukan: Pada masa ini, strategi mengamalkan pengurusan kedudukan nisbah tetap. Kita boleh mempertimbangkan pengenalan kaedah yang lebih maju seperti formula Kelly atau strategi penyeimbangan dinamik untuk mengoptimumkan saiz kedudukan dan nisbah risiko-balasan.
  4. Pengoptimuman stop-loss: Pada masa ini, strategi tidak mempunyai logik stop-loss yang jelas.
  5. Pengoptimuman pelbagai pasaran: Pada masa ini, strategi hanya mensasarkan satu pasaran. Kita boleh mempertimbangkan untuk berkembang ke beberapa pasaran yang berkaitan atau pelengkap untuk memanfaatkan hubungan antara pasaran untuk meningkatkan kestabilan strategi dan keuntungan.

Arah pengoptimuman di atas terutamanya memberi tumpuan kepada meningkatkan kebolehsesuaian strategi, ketahanan, keuntungan, dan kawalan risiko dengan memperkenalkan kaedah yang lebih maju dan fleksibel untuk terus meningkatkan dan menyempurnakan prestasi strategi.

Ringkasan

MA MACD BB Multi-Indicator Trading Strategy Backtesting Tool adalah alat perdagangan kuantitatif yang kaya dengan ciri, fleksibel dan praktikal. Ia menangkap isyarat perdagangan melalui tiga penunjuk teknikal yang biasa, sambil menyokong perdagangan panjang dan pendek dan pengurusan risiko yang fleksibel, menyesuaikan diri dengan pasaran dan gaya perdagangan yang berbeza. Pengguna boleh menggunakan alat ini untuk menguji semula dan mengoptimumkan data sejarah, dan juga dapat menerapkannya untuk perdagangan langsung. Walaupun mana-mana strategi menghadapi risiko pasaran dan risiko model, melalui tetapan parameter yang munasabah, kawalan risiko yang ketat, dan pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka menjadi pembantu yang kuat untuk peniaga kuantitatif, mewujudkan pulangan yang stabil untuk mereka dalam jangka panjang.


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

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Future_Billi0naire_

//@version=5
strategy("MA MACD BB Backtester", overlay=true)

//@variable Input for Strategy
which_ta = input.string("MA", title="Select Indicator", options=["MACD", "BB", "MA"])
which_camp = input.string("Long", title="Select Long / Short", options=["Short", "Long"])

//@variable Input parameters for Risk Management
positionSize = input.float(100.0, title="Each position's capital allocation %", minval=0.0, maxval = 100.0) / 100

//@variable Input parameters for MACD
fast_length = input.int(12, title="MACD Fast Length")
slow_length = input.int(26, title="MACD Slow Length")
signal_smoothing = input.int(9, title="MACD Signal Smoothing")
macd_source = input.source(close, title="MACD Source")

//@variable Input parameters for Moving Average
ma_length = input.int(50, title="Moving Average Length")

//@variable Input parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_mult = input.float(2.0, title="Bollinger Bands Multiplier")

// Choosing the Strategy
int x = na
if which_ta == "MA"
    x := 1
else if which_ta == "MACD"
    x := 2
else if which_ta == "BB"
    x := 3

// Calculate MACD and Signal line
[macdLine, signalLine, _] = ta.macd(macd_source, fast_length, slow_length, signal_smoothing)

// Calculate Moving Average
ma = ta.sma(close, ma_length)

// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
dev = bb_mult * ta.stdev(close, bb_length)
upper = basis + dev
lower = basis - dev

// Plotting MACD and Signal lines
plot(x == 2 ? macdLine : na, color=color.blue, title="MACD Line")
plot(x == 2 ? signalLine : na, color=color.red, title="Signal Line")

// Plotting histogram
histogram = macdLine - signalLine
plot(x == 2 ? histogram : na, color=color.gray, style=plot.style_histogram, title="MACD Histogram")

// Plotting Moving Average
plot(x == 1 ? ma : na, color=color.orange, title="Moving Average")

// Plotting Bollinger Bands
plot(x == 3 ? upper : na, color=color.green, title="Upper Bollinger Band")
plot(x == 3 ? lower : na, color=color.red, title="Lower Bollinger Band")
plot(x == 3 ? basis : na, color=color.blue, title="Basis Bollinger Band")

// Generate buy signals
buySignalMACD = ta.crossover(macdLine, signalLine)
buySignalMA = ta.crossover(close, ma)
buySignalBB = close < lower
sellSignalBBExit = close > basis

// Generate sell signals
sellSignalMACD = ta.crossunder(macdLine, signalLine)
sellSignalMA = ta.crossunder(close, ma)
sellSignalBB = close > upper
buySignalBBExit = close < basis

// Plot buy signals on the chart
plotshape(series=buySignalMACD and x == 2 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMACD : na, title="Buy Signal MACD", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MACD")
plotshape(series=buySignalMA and x == 1 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMA : na, title="Buy Signal MA", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MA")
plotshape(series=buySignalBB and x == 3 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalBB : na, title="Buy Signal BB", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY BB")

// Plot sell signals on the chart
plotshape(series=sellSignalMACD and x == 2 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMACD : na, title="Sell Signal MACD", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MACD")
plotshape(series=sellSignalMA and x == 1 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMA : na, title="Sell Signal MA", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MA")
plotshape(series=sellSignalBB and x == 3 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalBB : na, title="Sell Signal BB", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL BB")

// Calculate stop loss and take profit levels
accountSize = strategy.equity
positionSizeAmount = accountSize * positionSize

// Calculate order size based on stop loss amount
orderSize = math.floor(positionSizeAmount / close)

// Enter long positions based on buy signals
if strategy.opentrades == 0
    if (buySignalMACD) and x == 2 and which_camp == "Long"
        strategy.entry("Buy MACD", strategy.long, qty=orderSize)
    if (buySignalMA) and x == 1 and which_camp == "Long"
        strategy.entry("Buy MA", strategy.long, qty=orderSize)
    if (buySignalBB) and x == 3 and which_camp == "Long"
        strategy.entry("Buy BB", strategy.long, qty=orderSize)

// Enter short positions based on sell signals
if strategy.opentrades == 0
    if (sellSignalMACD) and x == 2 and which_camp == "Short"
        strategy.entry("Sell MACD", strategy.short, qty=orderSize)
    if (sellSignalMA) and x == 1 and which_camp == "Short"
        strategy.entry("Sell MA", strategy.short, qty=orderSize)
    if (sellSignalBB) and x == 3 and which_camp == "Short"
        strategy.entry("Sell BB", strategy.short, qty=orderSize)

// Close positions based on exit signals
if (sellSignalMACD) and which_camp == "Long"
    strategy.close("Buy MACD")
if (sellSignalMA) and which_camp == "Long"
    strategy.close("Buy MA")
if (sellSignalBBExit) and which_camp == "Long"
    strategy.close("Buy BB")
if (buySignalMACD) and which_camp == "Short"
    strategy.close("Sell MACD")
if (buySignalMA) and which_camp == "Short"
    strategy.close("Sell MA")
if (buySignalBBExit) and which_camp == "Short"
    strategy.close("Sell BB")



Berkaitan

Lebih lanjut