Strategi ini menggabungkan penunjuk momentum MACD dan penunjuk trend DMI untuk pergi lama apabila syarat dipenuhi. Keluarannya menetapkan keuntungan yang tetap dan hentian volatiliti tersuai untuk mengunci keuntungan.
Entri strategi ini bergantung kepada penunjuk MACD dan DMI:
Apabila kedua-dua syarat dipenuhi pada masa yang sama, pergi panjang.
Terdapat dua standard untuk keluar kedudukan:
Strategi ini menghimpunkan pelbagai penunjuk untuk menilai trend dan keadaan pasaran, dan campur tangan dalam situasi dengan kebarangkalian yang agak besar.
/*backtest start: 2024-01-29 00:00:00 end: 2024-02-28 00:00:00 period: 2h basePeriod: 15m 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/ //@version=4 strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1) // Works better on 3h, 1h, 2h, 4h //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2021, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => true // DMI and MACD inputs and calculations [pos_dm, neg_dm, avg_dm] = dmi(14, 14) [macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9) Take_profit= ((input (3))/100) longTakeProfit = strategy.position_avg_price * (1 + Take_profit) length = input(20, "Length", minval = 2) src = input(close, "Source") factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25) volStop(src, atrlen, atrfactor) => var max = src var min = src var uptrend = true var stop = 0.0 atrM = nz(atr(atrlen) * atrfactor, tr) max := max(max, src) min := min(min, src) stop := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src) uptrend := src - stop >= 0.0 if uptrend != nz(uptrend[1], true) max := src min := src stop := uptrend ? max - atrM : min + atrM [stop, uptrend] [vStop, uptrend] = volStop(src, length, factor) closeLong = close > longTakeProfit or crossunder(close, vStop) //Entry strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window()) //Exit strategy.close("long", when = closeLong and window())