Strategi dagangan kuantitatif MACD berganda adalah strategi dagangan kuantitatif yang dilaksanakan menggunakan penunjuk MACD jangka masa berganda. Ia menjadi panjang apabila penunjuk MACD mingguan membentuk salib emas dan menutup kedudukan apabila penunjuk MACD harian membentuk salib kematian. Apabila kedudukan kosong, jika penunjuk MACD harian membentuk salib emas yang lain, kedudukan panjang baru boleh dibuka.
Strategi perdagangan kuantitatif Dual MACD menggunakan gabungan penunjuk MACD mingguan dan harian untuk menentukan isyarat kemasukan dan keluar.
Pertama, apabila garis MACD penunjuk MACD mingguan melintasi di atas garis isyarat, isyarat beli dihasilkan dan kedudukan panjang dibuka. Kemudian apabila garis MACD penunjuk MACD harian melintasi di bawah garis isyarat, isyarat jual dihasilkan dan kedudukan ditutup.
Apabila kedudukan kosong, jika garis MACD penunjuk MACD harian melintasi di atas garis isyarat lagi, kedudukan panjang baru dibuka semula.
Perhatikan bahawa hanya garis kematian MACD harian yang akan menutup kedudukan, tetapi pembukaan semula hanya dibenarkan apabila garis MACD MACD mingguan berada di atas garis isyarat, dalam
Strategi perdagangan kuantitatif Dual MACD menggabungkan analisis jangka masa berganda, yang dapat menapis isyarat palsu dengan berkesan dan meningkatkan kualiti isyarat.
Jangka masa mingguan menilai arah trend utama, yang membantu mengelakkan perdagangan yang bertentangan.
Jangka masa harian menentukan masa masuk dan keluar, yang boleh menangkap peluang perdagangan jangka pendek tepat pada masanya.
Mekanisme
Parameter penunjuk MACD boleh diselaraskan dan boleh dioptimumkan mengikut pelbagai jenis dan keadaan pasaran.
Mengintegrasikan mengambil keuntungan, hentikan kerugian, fungsi hentikan kerugian untuk mengawal risiko dengan berkesan.
Strategi perdagangan kuantitatif Dual MACD juga mempunyai beberapa risiko, terutamanya termasuk:
Indikator MACD cenderung menghasilkan isyarat palsu dan persilangan yang kerap, memerlukan pengesahan dari penunjuk lain.
Trend utama yang dikenal pasti dalam jangka masa mingguan / bulanan mungkin berbalik, perlu menghentikan kerugian.
Parameter memerlukan pengoptimuman dan penyesuaian berterusan mengikut jenis dan keadaan pasaran.
Tidak boleh terlalu bergantung pada hasil backtest, prestasi langsung mungkin berbeza dari backtest.
Penyelesaian yang sepadan:
Gabungkan dengan penunjuk lain untuk membina sistem strategi dengan pengoptimuman logik.
Tetapkan stop loss yang munasabah untuk mengelakkan melebihi kerugian maksimum yang boleh diterima.
Terus mengoptimumkan parameter untuk mencari kombinasi yang optimum.
Mulakan perdagangan langsung dari modal minimum untuk mengesahkan kestabilan.
Strategi perdagangan kuantitatif MACD Dual mempunyai ruang untuk pengoptimuman lanjut:
Memperkenalkan Bollinger Bands, KDJ dan penunjuk lain untuk membina strategi gabungan pelbagai penunjuk dan meningkatkan kualiti isyarat.
Memasukkan penunjuk jumlah dagangan untuk mengelakkan pecah palsu dengan jumlah yang tidak mencukupi.
Menggunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter secara automatik dan mencapai pelarasan dinamik.
Penyesuaian risiko strategi yang lebih lanjut, seperti menambah kaedah stop loss lanjutan seperti nisbah keuntungan & kerugian.
Ujian kecergasan strategi & pengoptimuman untuk mengelakkan masalah terlalu sesuai.
Strategi dagangan kuantitatif MACD berganda mengintegrasikan analisis bingkai masa berganda untuk menentukan trend utama dan bawahan dan memberikan permainan penuh kepada kelebihan setiap penunjuk. Masih ada potensi besar untuk pengoptimuman strategi, dan dijangka dapat meningkatkan prestasi strategi dengan memperkenalkan penunjuk lain, pengoptimuman parameter automatik melalui pembelajaran mesin, dll. Pengesahan dagangan langsung adalah langkah yang sangat diperlukan dan asas penting untuk menyempurnakan lagi 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)