Strategi perdagangan kuantitatif MACD ganda adalah strategi perdagangan kuantitatif yang diimplementasikan dengan menggunakan indikator MACD jangka waktu ganda. Ini berjalan panjang ketika indikator MACD mingguan membentuk salib emas dan menutup posisi ketika indikator MACD harian membentuk salib kematian. Ketika posisi kosong, jika indikator MACD harian membentuk salib emas lainnya, posisi panjang baru dapat dibuka.
Strategi perdagangan kuantitatif Dual MACD menggunakan kombinasi indikator MACD mingguan dan harian untuk menentukan sinyal masuk dan keluar.
Pertama, ketika garis MACD dari indikator MACD mingguan melintasi garis sinyal, sinyal beli dihasilkan dan posisi panjang dibuka. Kemudian ketika garis MACD dari indikator MACD harian melintasi di bawah garis sinyal, sinyal jual dihasilkan dan posisi ditutup.
Ketika posisi kosong, jika garis MACD dari indikator MACD harian melintasi di atas garis sinyal lagi, posisi panjang baru dibuka kembali.
Perhatikan bahwa hanya death cross dari MACD harian yang akan menutup posisi, tetapi pembukaan kembali hanya diizinkan ketika garis MACD dari MACD mingguan berada di atas garis sinyal, dalam
Strategi perdagangan kuantitatif Dual MACD menggabungkan analisis kerangka waktu ganda, yang dapat secara efektif menyaring sinyal palsu dan meningkatkan kualitas sinyal.
Kerangka waktu mingguan menilai arah tren utama, yang membantu menghindari perdagangan yang bertentangan.
Kerangka waktu harian menentukan waktu masuk dan keluar, yang dapat tepat waktu menangkap peluang perdagangan jangka pendek.
Mekanisme
Parameter indikator MACD dapat disesuaikan dan dapat dioptimalkan sesuai dengan varietas dan kondisi pasar yang berbeda.
Mengintegrasikan mengambil keuntungan, stop loss, trailing stop loss fungsi untuk secara efektif mengendalikan risiko.
Strategi perdagangan kuantitatif Dual MACD juga memiliki beberapa risiko, terutama termasuk:
Indikator MACD cenderung menghasilkan sinyal palsu dan persilangan yang sering, membutuhkan konfirmasi dari indikator lain.
Tren utama yang diidentifikasi dalam kerangka waktu mingguan/bulan mungkin berbalik, trailing stop loss diperlukan.
Parameter perlu terus dioptimalkan dan disesuaikan sesuai dengan varietas dan kondisi pasar.
Tidak bisa terlalu mengandalkan hasil backtest, kinerja live mungkin berbeda dari backtest.
Solusi yang sesuai:
Gabungkan dengan indikator lain untuk membangun sistem strategi dengan optimasi logika.
Atur stop loss yang wajar untuk menghindari melebihi kerugian maksimum yang dapat ditoleransi.
Terus-menerus mengoptimalkan parameter untuk menemukan kombinasi optimal.
Mulai trading langsung dari modal minimum untuk memvalidasi stabilitas.
Strategi perdagangan kuantitatif Dual MACD memiliki ruang untuk optimasi lebih lanjut:
Memperkenalkan Bollinger Bands, KDJ dan indikator lainnya untuk membangun strategi gabungan multi-indikator dan meningkatkan kualitas sinyal.
Masukkan indikator volume perdagangan untuk menghindari breakout palsu dengan volume yang tidak cukup.
Menggunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis dan mencapai penyesuaian dinamis.
Penyesuaian risiko strategi lebih lanjut, seperti menambahkan metode stop loss lanjutan seperti rasio profit & loss.
Strategi uji kebugaran & optimasi untuk menghindari masalah overfit.
Strategi perdagangan kuantitatif Dual MACD mengintegrasikan analisis kerangka waktu ganda untuk menentukan tren utama dan bawahan dan memberikan permainan penuh untuk keuntungan dari setiap indikator. Masih ada potensi besar untuk optimasi strategi, dan diharapkan untuk lebih meningkatkan kinerja strategi dengan memperkenalkan indikator lain, optimasi parameter otomatis melalui pembelajaran mesin, dll. Verifikasi perdagangan langsung adalah langkah yang sangat penting dan dasar penting untuk lebih menyempurnakan strategi.
/*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)