
Strategi dagangan kuantitatif MACD berganda adalah strategi dagangan kuantitatif yang dilaksanakan menggunakan indikator MACD dua bingkai masa. Strategi ini membuka kedudukan lebih banyak apabila indikator MACD berputar membentuk garpu emas, dan menutup posisi apabila indikator MACD berputar membentuk garpu mati. Apabila kedudukan kosong, jika indikator MACD berputar membentuk garpu emas lagi, anda boleh membuka kedudukan lebih banyak lagi.
Strategi dagangan kuantitatif MACD berganda menggunakan gabungan indikator MACD mingguan dan indikator MACD harian untuk menilai isyarat masuk dan keluar.
Pertama, apabila MACD mingguan di atas talian MACD melintasi garis isyarat menghasilkan isyarat beli, maka ia membuka lebih banyak kedudukan; kemudian apabila MACD di bawah talian MACD pada hari itu melintasi garis isyarat menghasilkan isyarat jual, maka ia melintasi kedudukan kosong.
Apabila kedudukan kosong, jika garis MACD penunjuk MACD hari ini melintasi garis isyarat lagi, maka kedudukan dibuka semula. Iaitu, garpu emas penunjuk MACD hari ini menjadi syarat untuk membuka kedudukan lagi.
Perlu diperhatikan bahawa, garpu mati MACD harian akan dipadamkan, tetapi ia mesti dibuka semula di dalam jendela dagangan yang lebih tinggi di mana MACD mingguan berada di atas garis isyarat.
Strategi dagangan kuantitatif MACD berganda yang digabungkan dengan analisis bingkai masa berganda dapat menyaring isyarat palsu dengan berkesan dan meningkatkan kualiti isyarat. Secara khusus, ia mempunyai beberapa kelebihan utama:
Kerangka masa mingguan membantu untuk menilai arah trend utama dan mengelakkan perdagangan berlawanan arah.
Kerangka waktu siang menentukan masa masuk dan keluar, untuk menangkap peluang perdagangan jangka pendek tepat pada masanya.
Mekanisme penutupan tetingkap dagangan forex dapat mengelakkan terlalu kerap membuka dan melonggarkan kedudukan kerana penyesuaian jangka pendek.
Parameter penunjuk MACD boleh disesuaikan dan boleh dioptimumkan mengikut pelbagai jenis dan keadaan pasaran.
Mengintegrasikan fungsi hentian, hentian, dan hentian bergerak, dapat mengawal risiko dengan berkesan.
Strategi perdagangan kuantitatif dua MACD juga mempunyai risiko tertentu, terutamanya:
Indeks MACD mudah menghasilkan isyarat palsu dan sering bersalin, yang perlu digabungkan dengan indikator lain untuk pengesahan.
Trend utama dalam penghakiman jangka masa mingguan mungkin bertukar dan perlu dihentikan dengan segera.
Parameter perlu terus dioptimumkan dan disesuaikan mengikut pelbagai jenis dan keadaan pasaran.
Tidak boleh terlalu bergantung pada hasil tinjauan semula, yang mungkin berbeza dengan tinjauan semula.
Penyelesaian:
Ia boleh digunakan dengan kombinasi lain untuk membina sistem strategi yang dioptimumkan secara logik.
Tetapkan markah stop loss yang munasabah untuk mengelakkan kerugian melebihi maksimum yang boleh diterima.
Sentiasa mengoptimumkan parameter, mencari kombinasi parameter terbaik.
Bermula dengan modal minimum, pastikan strategi anda stabil.
Strategi perdagangan kuantitatif MACD berganda mempunyai ruang untuk pengoptimuman yang lebih lanjut:
Indikator lain seperti Brinline, KDJ dan lain-lain boleh diperkenalkan untuk membina strategi kombinasi pelbagai indikator dan meningkatkan kualiti isyarat.
Ia boleh digabungkan dengan petunjuk jumlah transaksi untuk mengelakkan kenaikan harga tetapi jumlah transaksi yang tidak mencukupi.
Parameter boleh dioptimumkan secara automatik menggunakan kaedah pembelajaran mesin, untuk menyesuaikan parameter secara dinamik.
Anda boleh membuat penyesuaian risiko lebih lanjut untuk strategi anda, seperti menambah kaedah stop-loss yang lebih tinggi seperti rasio keuntungan dan kerugian.
Pemeriksaan kesesuaian strategi dan penyesuaian pengoptimuman, mengelakkan masalah kesesuaian.
Strategi dagangan kuantitatif MACD berganda mengintegrasikan analisis bingkai masa berganda untuk menilai trend utama dan kedua, untuk memanfaatkan kelebihan indikator masing-masing. Ruang pengoptimuman strategi masih besar, diharapkan dapat meningkatkan keberkesanan strategi dengan memperkenalkan indikator lain, menggunakan pembelajaran mesin untuk pengoptimuman parameter dan sebagainya.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-01-11 05:20:00
period: 1d
basePeriod: 1h
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/
// © maxits
// Long Position: Weekly Macd line crosses above Signal line
// [Trading Window Macd Line > Signal Line] (Weekly)
// Close Position: Daily Macd Line crosses above Daily Signal line.
// Re Entry Condition: Macd line crosses above Signal line only if [Trading Window MacdLine > Sgnal Line] (Weekly)
//@version=4
strategy("Dual MACD Strategy",
shorttitle="Dual Macd Tester",
overlay=false,
initial_capital=1000,
default_qty_value=20,
default_qty_type=strategy.percent_of_equity,
commission_value=0.1,
pyramiding=0)
// Define user inputs
i_time = input(defval = timestamp("01 May 2018 13:30 +0000"), title = "Start Time", type = input.time) // Starting time for Backtesting
f_time = input(defval = timestamp("9 Sep 2021 13:30 +0000"), title = "Finish Time", type = input.time) // Finishing time for Backtesting
sep1 = input(false, title="------ Profit & Loss ------")
enable_TP = input(true, title="Enable Just a Profit Level?")
enable_SL = input(false, title="Enable Just a S.Loss Level?")
enable_TS = input(true, title=" Enable Only Trailing Stop")
long_TP_Input = input(30.0, title='Take Profit %', type=input.float, minval=0)/100
long_SL_Input = input(1.0, title='Stop Loss %', type=input.float, minval=0)/100
long_TS_Input = input(5.0, title='Trailing Stop %', type=input.float, minval=0)/100
cl_low_Input = input(low, title="Trailing Stop Source")
long_TP = strategy.position_avg_price * (1 + long_TP_Input)
long_SL = strategy.position_avg_price * (1 - long_SL_Input)
long_TS = cl_low_Input * (1 - long_TS_Input)
sep2 = input(false, title="------ Macd Properties ------")
d_res = input(title="Short Term TimeFrame", type=input.resolution, defval="D") // Daily Time Frame
w_res = input(title="Long Term TimeFrame", type=input.resolution, defval="W") // Weekly Time Frame
src = input(close, title="Source") // Indicator Price Source
fast_len = input(title="Fast Length", type=input.integer, defval=12) // Fast MA Length
slow_len = input(title="Slow Length", type=input.integer, defval=26) // Slow MA Length
sign_len = input(title="Sign Length", type=input.integer, defval=9) // Sign MA Length
d_w = input(title="Daily or Weekly?", type=input.bool, defval=true) // Plot Daily or Weekly MACD
// Color Plot for Macd
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
// BG Color
bg_color = color.rgb(127, 232, 34, 75)
// Daily Macd
[d_macdLine, d_singleLine, d_histLine] = security(syminfo.tickerid, d_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución
plot(d_w ? d_macdLine : na, color=color.blue)
plot(d_w ? d_singleLine : na, color=color.orange)
plot(d_w ? d_histLine : na, style=plot.style_columns,
color=(d_histLine>=0 ? (d_histLine[1] < d_histLine ? col_grow_above : col_fall_above) :
(d_histLine[1] < d_histLine ? col_grow_below : col_fall_below)))
// Weekly Macd
[w_macdLine, w_singleLine, w_histLine] = security(syminfo.tickerid, w_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución
plot(d_w ? na : w_macdLine, color=color.blue)
plot(d_w ? na : w_singleLine, color=color.orange)
plot(d_w ? na : w_histLine, style=plot.style_columns,
color=(w_histLine>=0 ? (w_histLine[1] < w_histLine ? col_grow_above : col_fall_above) :
(w_histLine[1] < w_histLine ? col_grow_below : col_fall_below)))
///////////////////////////////// Entry Conditions
inTrade = strategy.position_size != 0 // Posición abierta
notInTrade = strategy.position_size == 0 // Posición Cerrada
start_time = true
trading_window = w_macdLine > w_singleLine // Weekly Macd Signal enables a trading window
bgcolor(trading_window ? bg_color : na)
buy_cond = crossover (w_macdLine, w_singleLine)
sell_cond = crossunder(d_macdLine, d_singleLine)
re_entry_cond = crossover (d_macdLine, d_singleLine) and trading_window
// Entry Exit Conditions
trailing_stop = 0.0 // Code for calculating Long Positions Trailing Stop Loss
trailing_stop := if (strategy.position_size != 0)
stopValue = long_TS
max(trailing_stop[1], stopValue)
else
0
if (buy_cond and notInTrade and start_time)
strategy.entry(id="First Entry", long=strategy.long, comment="First Long")
if (sell_cond and inTrade)
strategy.close(id="First Entry", comment="Close First Long")
if (re_entry_cond and notInTrade and start_time)
strategy.entry(id="Further Entry", long=strategy.long, comment="Further Entry")
if (sell_cond and inTrade)
strategy.close(id="Further Entry", comment="Close First Long")
if enable_TP
if (enable_TS and not enable_SL)
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP, stop = trailing_stop)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = trailing_stop)
else
if (enable_SL and not enable_TS)
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP, stop = long_SL)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = long_SL)
else
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP)
else
if not enable_TP
if (enable_TS and not enable_SL)
strategy.exit("Long TP & TS FiEn", "First Entry", stop = trailing_stop)
strategy.exit("Long TP & TS FuEn", "Further Entry", stop = trailing_stop)
else
if (enable_SL and not enable_TS)
strategy.exit("Long TP & TS FiEn", "First Entry", stop = long_SL)
strategy.exit("Long TP & TS FuEn", "Further Entry", stop = long_SL)
plot(enable_TP ? long_TP : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(enable_SL ? long_SL : na, title="SL Level", color=color.red, style=plot.style_linebr, linewidth=2)
plot(enable_TS and trailing_stop ? trailing_stop : na, title="TS Level", color=color.red, style=plot.style_linebr, linewidth=2)