
Strategi perdagangan kuantitatif MACD ganda adalah strategi perdagangan kuantitatif yang diimplementasikan dengan menggunakan indikator MACD dua frame waktu. Strategi ini membuka posisi lebih banyak ketika indikator MACD berputar terbentuk dan menutup posisi ketika indikator MACD berputar terbentuk. Ketika posisi kosong, jika indikator MACD berputar terbentuk lagi, Anda dapat membuka posisi lebih banyak lagi.
Strategi perdagangan kuantitatif MACD ganda menggunakan kombinasi indikator MACD mingguan dan MACD harian untuk menilai sinyal masuk dan keluar.
Pertama, ketika MACD mingguan melewati garis sinyal, sinyal beli dihasilkan, maka posisi dibuka lebih banyak; kemudian MACD harian melewati garis sinyal dan menghasilkan sinyal jual, maka posisi kosong.
Ketika posisi kosong, jika MACD hari MACD indikator lagi melewati jalur sinyal, maka posisi dibuka kembali. Artinya, garpu MACD hari MACD indikator menjadi kondisi untuk membuka posisi lagi.
Perlu dicatat bahwa forks mati MACD harian hanya akan dihapus, tetapi posisi harus dibuka kembali di dalam jendela perdagangan bergulir di mana MACD mingguan berada di atas garis sinyal.
Strategi perdagangan kuantitatif MACD ganda yang menggabungkan analisis frame waktu ganda dapat secara efektif menyaring sinyal palsu dan meningkatkan kualitas sinyal. Secara khusus, ada beberapa keuntungan utama:
Kerangka waktu mingguan untuk menilai arah tren utama membantu menghindari perdagangan berlawanan arah.
Kerangka waktu siang hari menentukan waktu masuk dan keluar, sehingga dapat menangkap peluang perdagangan jangka pendek.
Mekanisme penutupan jendela perdagangan forex dapat menghindari terlalu sering membuka posisi kosong karena penyesuaian jangka pendek.
Parameter indikator MACD dapat disesuaikan dan dapat dioptimalkan sesuai dengan varietas dan lingkungan pasar yang berbeda.
Integrasi Stop, Stop Loss, dan Stop Loss Mobile dapat secara efektif mengendalikan risiko.
Strategi perdagangan kuantitatif MACD ganda juga memiliki beberapa risiko, terutama:
Indikator MACD mudah menghasilkan sinyal palsu dan sering berselisih, perlu kombinasi dengan indikator lain untuk konfirmasi.
Tren utama dalam penilaian kerangka waktu minggu-bulan mungkin akan berbalik dan perlu dihentikan pada waktunya.
Parameter perlu terus dioptimalkan dan disesuaikan sesuai dengan varietas dan kondisi pasar yang berbeda.
Jangan terlalu bergantung pada hasil pengujian ulang, disk mungkin berbeda dengan pengujian ulang.
Solusi yang sesuai:
Ini digunakan dalam kombinasi dengan indikator lain untuk membangun sistem strategi yang dioptimalkan secara logis.
Tetapkan stop loss yang wajar untuk menghindari kerugian melebihi kerugian maksimum yang dapat ditanggung.
Perbaikan terus menerus untuk mencari kombinasi optimal.
Ini adalah salah satu strategi yang paling efektif untuk memulai investasi dengan modal minimal dan memastikan bahwa strategi Anda stabil.
Strategi perdagangan kuantitatif MACD ganda memiliki ruang untuk optimasi lebih lanjut:
Anda dapat memasukkan indikator lain seperti Brinline, KDJ, dan lain-lain untuk membangun strategi kombinasi multi-indikator dan meningkatkan kualitas sinyal.
Untuk menghindari terjadinya penembusan palsu yang terjadi karena kenaikan harga namun volume transaksi yang tidak mencukupi, indikator volume transaksi dapat digabungkan.
Parameter dapat dioptimalkan secara otomatis dengan menggunakan metode pembelajaran mesin, untuk menyesuaikan parameter secara dinamis.
Ada beberapa penyesuaian risiko lebih lanjut yang dapat dilakukan terhadap strategi, seperti menambahkan metode stop loss yang lebih tinggi seperti rasio untung rugi.
Tes kecocokan strategi dan penyesuaian optimasi untuk menghindari masalah kecocokan.
Strategi perdagangan kuantitatif MACD ganda mengintegrasikan analisis kerangka waktu ganda untuk menilai tren utama dan kedua, untuk memanfaatkan keunggulan masing-masing indikator. Ada banyak ruang untuk pengoptimalan strategi, dan ada harapan untuk meningkatkan efektivitas strategi lebih lanjut dengan memperkenalkan indikator lain, menggunakan pembelajaran mesin untuk pengoptimalan parameter, dan lain-lain.
/*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)