Martingale-Strategie mit erweitertem gleitenden Durchschnittsbereich für den Aktienhandel

Schriftsteller:ChaoZhang, Datum: 2023-11-02 17:16:08
Tags:

img

Übersicht

Diese Strategie identifiziert Trends, indem das Intervall zwischen gleitenden Durchschnitten erweitert wird. Wenn ein Aufwärtstrend identifiziert wird, baut sie allmählich Long-Positionen auf, um vom Trend zu profitieren. Gleichzeitig werden Stop-Loss-Punkte eingestellt, um Risiken zu kontrollieren.

Strategie Logik

  1. Es werden zwei gleitende Durchschnitte, EMA1 und EMA2, mit leicht unterschiedlichen Perioden, z. B. 55 und 89 gesetzt, wodurch ein größerer Bereich zwischen den MAs entsteht.

  2. Wenn der Kurs über die Ma überschreitet, signalisiert dies einen Aufwärtstrend, sodass sich die Long-Positionen allmählich aufbauen können.

  3. Wenn Sie eine Position eingegangen sind, fahren Sie mit dem Pyramidenspiel fort, wenn der Preis weiter steigt.

  4. Setzen Sie einen Stop-Loss-Punkt unterhalb der MA. Wenn der Preis unter den MA fällt, schließen Sie Lange, um den Stop-Loss zu stoppen. Der Stop-Loss schwimmt mit dem Einstiegspreis nach oben.

  5. Dies ermöglicht es Pyramidenpositionen, von einem Trend zu profitieren und gleichzeitig einen Stop-Loss festzulegen, um Risiken zu kontrollieren.

Analyse der Vorteile

  1. Der breitere MA-Bereich hilft, Trends deutlich zu erkennen.

  2. Pyramiden erzeugen höhere Renditen aus Trends.

  3. Dynamischer Stop-Loss macht Gewinne aus Trends und begrenzt Verluste.

  4. Geeignet für den langfristigen Trendhandel.

Risikoanalyse

  1. Der Trend muß richtig erkannt werden, sonst beschleunigen sich die Verluste.

  2. Das Pyramidenspiel muss kontrolliert werden, um Margin Call Risiken zu vermeiden.

  3. Der Stop-Loss muss vernünftigerweise eingestellt sein, zu breit kann den Verlust vergrößern, zu eng kann zu Whipsaws führen.

  4. Es muss Liquidität berücksichtigt werden, denn Vermögenswerte mit geringer Liquidität sind ungeeignet.

Optimierungsvorschläge

  1. Fügen Sie mehr Indikatoren wie RSI, KD hinzu, um Trends zu bestätigen und falsche Ausbrüche zu vermeiden.

  2. Optimierung der MA-Perioden auf der Grundlage der Vermögensmerkmale, um die besten Kombinationen zu finden.

  3. Untersuchen Sie optimale Pyramidenmodelle zur Kontrolle von Positionsgrößenrisiken.

  4. Betrachten Sie die Teilgewinnnahme, um Gewinne zu erzielen und Abzüge zu reduzieren.

  5. Setzen Sie einen Stop-Loss basierend auf der Volatilität der Vermögenswerte ein, um den Schutz auszugleichen und Whipsaws zu vermeiden.

Zusammenfassung

Diese Strategie identifiziert Trends mit einem breiteren MA-Bereich, Pyramidenpositionen, um von Trends zu profitieren, und setzt einen schwimmenden Stop-Loss zur Kontrolle von Risiken.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy(title='Super Simple Martingale Buying', shorttitle="Martingale v5",overlay=true, pyramiding = 10, initial_capital=1, calc_on_order_fills = true)


// Revision:        1
// Author:          @ToS_MavericK

// === INPUT SMA ===
EMA1  = input(55)
EMA2  = input(89)

Amount  = input(defval = 6, type = float, title = "Max open Orders", minval = 1, step = 1)
Multiplier  = input(defval = 2  , type = float, title = "Multiplier", minval = 1, step = 0.1)
BuyLvl  = input(defval = 1, type = float, title = "BuyLvl", minval = 0, step = 0.1)
Profit  = input(3)
DoubleUpLimit    = input(2)

// === INPUT BACKTEST RANGE ===
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear    = input(defval = 2019, title = "From Year", minval = 2012)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)

RSIFilter = input(false)
minRSI  = input(defval = 35,  title = "RSI", minval = 1, step = 1)
lengthRSI = input(14, minval=1)
src = input(close, title="RSI Source")

StochRSIFilter = input(false)
lengthStoch = input(14, minval=1)
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)

rsi = rsi(src, lengthRSI)
k = sma(stoch(rsi, rsi, rsi, lengthStoch), smoothK)
d = sma(k, smoothD)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)

buy  =  (rsi < minRSI or RSIFilter == false) and ((crossover(k,d) and k < 20) or StochRSIFilter == false) and ((close < vEMA1 * (1 - BuyLvl/100) and vEMA1 < vEMA2) or (close < vEMA2 * (1 - BuyLvl/100) and vEMA2 < vEMA1))

BuyPrice = strategy.position_avg_price * (1 - DoubleUpLimit/50)
SellPrice = strategy.position_avg_price * (1 + Profit/(100*strategy.opentrades))

// Exit first, due to the limit orders, which can be hit on the same bar
strategy.exit("EMA1", limit = SellPrice, when = window() and strategy.opentrades > 0)
strategy.close("EMA1",when = time > finish) // close positions at the end of the specified time period

// Normal entry
strategy.entry("EMA1", strategy.long,qty = strategy.equity/ (close * pow(2,Amount - 1)), when = window() and strategy.opentrades == 0 and buy)
// Martingale
strategy.entry("EMA1", strategy.long,qty = strategy.position_size, limit = strategy.position_avg_price * (1 - DoubleUpLimit/100), when = window() and strategy.opentrades == 1)
strategy.entry("EMA1", strategy.long,qty = strategy.position_size, limit = BuyPrice, when = window() and strategy.opentrades > 1 and strategy.opentrades < Amount)

plot(vEMA1, title = 'EMA1', color = orange, linewidth = 2, style = line)
plot(vEMA2, title = 'EMA2', color = yellow, linewidth = 2, style = line)
plot(BuyPrice[1], title = 'BuyPrice', color = red, linewidth = 2, style = line)
plot(SellPrice[1], title = 'SellPrice', color = green, linewidth = 2, style = line)

Mehr