
Die Strategie kombiniert MACD-Dynamik- und DMI-Trend-Indikatoren, um mehrere Handlungen zu machen, wenn sie qualifiziert sind. Ihre Exits haben eine feste Stop-Option und einen benutzerdefinierten volatilen Trailing Stop, um den Gewinn zu sperren.
Die Einträge der Strategie basieren auf den MACD- und DMI-Indikatoren:
Wenn die beiden oben genannten Bedingungen erfüllt sind, wird eine zusätzliche Position eröffnet.
Position exits haben zwei Kriterien:
Diese Strategie kombiniert mehrere Indikatoren, um Markttrends und -bedingungen zu beurteilen. Sie greift bei wahrscheinlichen Gewinnszenarien ein. Die Stop-Off-Bedingungen sind optimiert und berücksichtigen die Flexibilität der Gewinnschließung, während sie einen gewissen Gewinn garantieren. Durch die Anpassung der Parameter und die weitere Risikomanagement kann die Strategie zu einem quantifizierten Handelssystem mit stabilen Ausgängen werden.
/*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())