Chiến lược này kết hợp chỉ số động lực MACD và chỉ số xu hướng DMI để đi dài khi các điều kiện được đáp ứng.
Các mục của chiến lược này dựa trên các chỉ số MACD và DMI:
Khi cả hai điều kiện được đáp ứng cùng một lúc, đi dài.
Có hai tiêu chuẩn cho việc ra khỏi vị trí:
Chiến lược này tổng hợp nhiều chỉ số để đánh giá xu hướng và điều kiện thị trường, và can thiệp vào các tình huống có xác suất tương đối lớn. Các điều kiện thu lợi nhuận cũng được thiết kế tối ưu để đảm bảo lợi nhuận nhất định trong khi xem xét tính linh hoạt trong việc khóa lợi nhuận. Thông qua điều chỉnh tham số và quản lý rủi ro hơn nữa, chiến lược này có thể trở thành một hệ thống giao dịch định lượng ổn định.
/*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())