Momentum-Trend-Folgende Strategie

Schriftsteller:ChaoZhang, Datum: 2024-03-11 10:53:50
Tags:

img

Übersicht

Diese Strategie kombiniert den Aroon-Indikator und das Absolute Strength Histogramm (ASH), um Markttrends und potenzielle Handelschancen zu identifizieren.

Strategie Logik

Die Strategie verwendet zwei Parameter für den Aroon-Indikator:

  • Long-Positionen: Aroon-Perioden sind 56 (oben) und 20 (unten)
  • Kurze Positionen: Erhöhungszeiten von 17 (oben) und 55 (unten)

Der ASH wird mit einer Länge von 9 Balken berechnet, wobei der Schlusskurs als Datenquelle verwendet wird.

Die Strategie enthält spezifische Ein- und Ausstiegsregeln:

  1. Long Entry: Eine Long-Position wird eingeleitet, wenn der Aroon-Indikator die untere Schwelle überschreitet und einen potenziellen Aufwärtstrend anzeigt.
  2. Long Exit: Eine Long-Position wird geschlossen, wenn der Aroon unter die untere Schwelle zurücktritt.
  3. Short Entry: Eine Short-Position wird eingeleitet, wenn der Aroon unter die obere Schwelle überschreitet und einen potenziellen Abwärtstrend signalisiert.
  4. Short Exit: Eine Short-Position wird geschlossen, wenn der Aroon die obere Schwelle zurückschreitet.

Analyse der Vorteile

Der Hauptvorteil dieser Strategie ist die Synergie aus der Kombination der beiden Indikatoren.

Die Verwendung von zwei Aroon-Parametern ermöglicht eine flexible Anpassung an sich ändernde Marktbedingungen.

Risikoanalyse

Die wichtigsten Einschränkungen stammen von den Indikatoren selbst. Aroon kämpft während der Bereichsgebundenen Märkte und kann falsche Signale erzeugen.

Die langen/kurzen Perioden von Aroon und die Länge von ASH müssten optimiert werden, um die idealen Kombinationen zu finden.

Verbesserungsrichtlinien

Zusätzliche Filter könnten hinzugefügt werden, z. B. Preisbruch oder steigende Volumina, um falsche Signale bei unsicheren Bedingungen zu vermeiden.

Es könnten verschiedene Parameterkombinationen und Gewichte getestet werden, um optimale Einstellungen zu finden.

Schlussfolgerung

Die Strategie verbindet effektiv die Stärken von Aroon und ASH zur doppelten Bestätigung von Trends und Wendepunkten.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © IkkeOmar

//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)


// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Inputs for longs 

length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)

// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)

// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)




// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long

upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short

// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length



// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))


// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'


// Check if the close time of the current bar falls inside the date range
inDateRange = true

longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange

shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange

// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false

var long_signal = false
var short_signal = false

if longCondition
    long_signal := true
if longCloseCondition
    long_signal := false
    
if shortCondition
    short_signal := true
if shortCloseCondition
    short_signal := false

// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
    strategy.entry("long", strategy.long, when = longCondition)
    in_long_trade := true
    in_short_trade := false

    
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
    // strategy.close("short", when = longCondition)
    strategy.entry("long", strategy.long, when = longCondition)
    in_short_trade := false
    in_long_trade := true
    
    
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
    // strategy.close("long", when = shortCondition)
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
    if short_signal
        strategy.entry("short", strategy.short, when = short_signal)
        in_long_trade := false
        in_short_trade := true
    else
        strategy.close("long", when = longCloseCondition)
        in_long_trade := false
        in_short_trade := false

// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
    if long_signal
        strategy.entry("long", strategy.long, when = long_signal)
        in_short_trade := false
        in_long_trade := true
    else
        strategy.close("short", when = shortCloseCondition)
        in_short_trade := false
        in_long_trade := false






Mehr