MACD-Trend folgt kurzfristiger Strategie


Erstellungsdatum: 2023-12-19 11:16:44 zuletzt geändert: 2023-12-19 11:16:44
Kopie: 0 Klicks: 605
1
konzentrieren Sie sich auf
1621
Anhänger

MACD-Trend folgt kurzfristiger Strategie

Überblick

Die MACD-Trend-Tracking-Short-Strategie ist eine Short-Trading-Strategie, die den Moving Average, den MACD-Indikator und den Williams-Indikator kombiniert. Die Strategie verwendet verschiedene Kombinationen von drei Indikatoren, um die Ein- und Ausstiegsbedingungen für mehrere freie Positionen zu bilden, um die tendenziellen Eigenschaften der Short-Preise zu erfassen.

Strategieprinzip

Die wichtigste Transaktionslogik der Strategie basiert auf folgenden Punkten:

  1. Wenn der Preis über die Exponential Moving Average (EMA) -Mittellinie geht, ist er hoch, wenn der Preis über die Exponential Moving Average (EMA) geht, ist er unter;

  2. Wenn die MACD-Schnelllinie höher ist als die Langlinie, dann ist sie höher, wenn die Schnelllinie niedriger ist als die Langlinie, dann ist sie niedriger.

  3. Der Rapid-Moving-Average des William-Index ist höher als der Slow-Moving-Average, und der Rapid-Moving-Average ist niedriger als der Slow-Moving-Average.

  4. Die Einreise wird durch eine Kombination aus diesen drei Faktoren beurteilt.

  5. Das Spiel wird im Umkehrschluss beurteilt.

Durch die Kombination von EMA-Bewertungen über die Richtung des großen Trends und MACD-Bewertungen über die kurzfristige Preisdynamik kann die Strategie die Trendmerkmale der Preise an guten Einstiegspunkten erfassen und so profitieren. Der William-Index kann verwendet werden, um die Überkauf-Überverkaufssituation der Sorte weiter zu überprüfen und falsche Durchbrüche zu vermeiden.

Strategische Vorteile

Diese Kombination von mehreren Indikatoren ist eine typische Kurzlinie-Trendverfolgungsstrategie mit folgenden Vorteilen:

  1. Drei Indikatoren, die sich gegenseitig verifizieren, um die Wahrscheinlichkeit von Falschmeldungen zu verringern.

  2. Die EMA beurteilt die Richtung des Hauptrends, die MACD beurteilt die Dynamik der kurzen Linie als stark.

  3. Der William-Index vermeidet es, bei starken Schwankungen zu verfolgen.

  4. Die Rückwärtsindikator-Kombination entscheidet über den Ausstieg und ist eng mit der Risikokontrolle verbunden.

Strategisches Risiko

Die wichtigsten Risiken der Strategie sind:

  1. Die Komplexität der Mehrindikator-Kombination und die Schwierigkeit, die Parameter zu optimieren;

  2. Es werden häufig kurze Verbindungen eingerichtet, was zu hohen Transaktionskosten führen kann.

  3. Es ist unmöglich, den tatsächlichen Trendwendepunkt richtig zu beurteilen, und es besteht die Gefahr, Verluste zu erleiden.

Die Strategie besteht hauptsächlich darin, die optimale Kombination von Parametern in Bezug auf die Optimierung und den Stop-Loss zu finden und die geeigneten Stop-Loss-Levels festzulegen, um den maximalen Verlust eines einzelnen Handels zu kontrollieren.

Richtung der Strategieoptimierung

Die Strategie kann vor allem in folgenden Bereichen optimiert werden:

  1. Es ist wichtig, dass Sie sich mit den folgenden Parametern auseinandersetzen, um die besten Parameter zu finden:

  2. Es ist wichtig, mehr Daten zu erhalten, um Hilfsentscheidungen zu treffen, z. B. über die Anzahl der Umsätze.

  3. Einrichtung von dynamischen oder tragbaren Stop-Losses zur Stärkung der Risikokontrolle;

  4. Die Analyse der tatsächlichen Trendwende wird in Kombination mit einem maschinellen Lernmodell durchgeführt.

Zusammenfassen

Die MACD-Trend-Tracking-Strategien nutzen die Vorteile der kombinierten Anwendung mehrerer Indikatoren, um die Risiken bei der Beurteilung von Short-Line-Trends zu kontrollieren. Durch die Optimierung der Parameter, die Einstellung der Stop-Loss-Level und die Einführung von mehr Datenquellen kann die Strategie die Gewinnquote und die Gewinnquote weiter verbessern. Diese Strategie ist es wert, weiter ausgebaut und eingehender untersucht zu werden.

Strategiequellcode
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
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/
// © platsn

//@version=5
strategy("MACD Willy Strategy", overlay=true, pyramiding=1, initial_capital=10000) 

// ******************** Trade Period **************************************
startY = input(title='Start Year', defval=2011, group = "Trading window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Trading window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Trading window")
finishY = input(title='Finish Year', defval=2050, group = "Trading window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Trading window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Trading window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
// t1 = time(timeframe.period, "0945-1545:23456") 
// window = time >= timestart and time <= timefinish and t1 ? true : false 
// t2 = time(timeframe.period, "0930-1555:23456")
// window2 = time >= timestart and time <= timefinish and t2 ? true : false 

leverage = input.float(1, title="Leverage (if applicable)", step=0.1, group = "Trading Options")
reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options")
reinvest_percent = input.float(defval=20, title = "Reinvest percentage", group="Trading Options")
// entry_lookback = input.int(defval=10, title="Lookback period for entry condition", group = "Trading Options")

// -------------------------------------------- Data Source --------------------------------------------

src = input(title="Source", defval=close)

// ***************************************************************************************************** Daily ATR *****************************************************
atrlen = input.int(14, minval=1, title="ATR period", group = "Daily ATR")
iPercent = input.float(5, minval=1, maxval=100, step=0.1, title="% ATR to use for SL / PT", group = "Daily ATR")
 
percentage = iPercent * 0.01
datr = request.security(syminfo.tickerid, "1D", ta.rma(ta.tr, atrlen))
datrp = datr * percentage

// plot(datr,"Daily ATR")
// plot(datrp, "Daily % ATR")

//*********************************************************** VIX volatility index ****************************************

VIX = request.security("BTC_USDT:swap", timeframe.period, close)
vix_thres = input.float(20.0, "VIX Threshold for entry", step=0.5, group="VIX Volatility Index")

// ************************************************ Volume ******************************************************

vol_len = input(50, 'Volume MA Period')
avg_vol = ta.sma(volume, vol_len)

//-------------------------------------------------------- Moving Average ------------------------------------

emalen1 = input.int(200, minval=1, title='EMA', group= "Moving Averages")
ema1 = ta.ema(src, emalen1)

// ------------------------------------------ MACD ------------------------------------------
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// ---------------------------------------- William %R --------------------------------------
w_length = input.int(defval=34, minval=1)
w_upper = ta.highest(w_length)
w_lower = ta.lowest(w_length)

w_output = 100 * (close - w_upper) / (w_upper - w_lower)

fast_period = input(defval=5, title='Smoothed %R Length')
slow_period = input(defval=13, title='Slow EMA Length')

w_fast_ma = ta.wma(w_output,fast_period)
w_slow_ma = ta.ema(w_output,slow_period)



// ------------------------------------------------ Entry Conditions ----------------------------------------

L_entry1 = close > ema1 and hist > 0 and w_fast_ma > w_slow_ma 
S_entry1 = close < ema1 and hist < 0 and w_fast_ma < w_slow_ma 

// -------------------------------------------------- Entry -----------------------------------------------
strategy.initial_capital = 50000
profit = strategy.netprofit
trade_amount = math.floor(strategy.initial_capital*leverage / close) 

if strategy.netprofit > 0 and reinvest
    trade_amount := math.floor((strategy.initial_capital+(profit*reinvest_percent*0.01))*leverage / close) 
else
    trade_amount := math.floor(strategy.initial_capital*leverage/ close) 


if L_entry1 //and window
    strategy.entry("Long", strategy.long, trade_amount)

if S_entry1 //and window
    strategy.entry("Short", strategy.short, trade_amount)

// --------------------------------------------------- Exit Conditions -------------------------------------

L_exit1 = hist < 0 and w_fast_ma < w_slow_ma and w_fast_ma < -20
S_exit1 = hist > 0 and w_fast_ma > w_slow_ma and w_fast_ma > -80

// ----------------------------------------------------- Exit ---------------------------------------------

if L_exit1 //and window2
    strategy.close("Long")
    
if S_exit1 //and window2
    strategy.close("Short")

// if time(timeframe.period, "1530-1600:23456")
//     strategy.close_all()