Trend nach der Strategie des adaptiven gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 23.10.2023
Tags:

Übersicht

Diese Strategie erzeugt Handelssignale, die auf dem Crossover zwischen schnellen und langsamen gleitenden Durchschnitten basieren, die zu den Trendfolgestrategien gehören.

Strategie Logik

  1. Berechnen Sie die schnellen und langsamen gleitenden Durchschnitte.

  2. Wenn der schnelle MA den langsamen MA überschreitet, zeigt er einen Aufwärtstrend an und erzeugt ein Kaufsignal.

  3. Wenn der schnelle MA unter den langsamen MA überschreitet, zeigt er einen Abwärtstrend an und erzeugt ein Verkaufssignal.

  4. Durch die automatische Anpassung der Länge der gleitenden Durchschnitte passt sich die Strategie dynamisch an den Markttrend an, um Gewinne zu verfolgen.

Analyse der Vorteile

  1. Die Strategie ist einfach und klar, leicht verständlich und umsetzbar.

  2. Es kann Markttrends mit großem Gewinnpotenzial effektiv verfolgen.

  3. Die dynamische Anpassung der Parameter passt sich den Veränderungen der Marktbedingungen an.

  4. Anpassbare MA-Algorithmen erhöhen die Flexibilität der Strategie.

  5. Flexible Kauf- und Verkaufslogik.

Risikoanalyse

  1. Häufiger Handel führt zu höheren Transaktionskosten.

  2. Bei flüchtigen Märkten können die MA-Verzögerungen die besten Einstiegs- und Ausstiegspunkte verpassen.

  3. Unangemessener MA-Parameter und Anpassungsfrequenzoptimierung verursachen Strategieversagen.

  4. Strenge Stop-Loss-Verpflichtungen zur Begrenzung von Verlusten.

  5. Eine Umkehrung des Trends kann zu riesigen schwimmenden Verlusten führen.

Optimierungsrichtlinien

  1. Optimierung der MA-Parameter für eine bessere Erkennung von Trendänderungen.

  2. Hinzufügen von Stop-Loss-Logik, um Einzelhandelsverluste zu kontrollieren.

  3. Hinzufügen von Trendbeurteilungsindikatoren, um Trendumkehrverluste zu vermeiden.

  4. Verbesserung der MA-Anpassungsstrategie, um sie intelligenter und automatisierter zu gestalten.

  5. Zusätzliche Optimierungsmodule für Parameter mit maschinellem Lernen.

Zusammenfassung

Die Strategie Logik ist einfach und klar, generiert Trades basierend auf schnellen und langsamen MAs Crossover. Es erfasst effektiv Trends, hat aber Risiken. Kontinuierliche Optimierung der Parameter, Stop-Loss-Logik ist erforderlich, um die Strategie robuster zu machen. Insgesamt hat die Strategie ein großes Potenzial für Verbesserungen und lohnt sich zu recherchieren und anzuwenden.


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

//
// @version=4
// © Ehsan Haghpanah, (ehsanha)
// Algorithmic Trading Research
//
// eha Moving Averages Strategy, 
// A simple strategy based on crossing Moving Averages of 
// different lengths (a fast moving average and slow one)
//

strategy(title = "eha Moving Averages Strategy", shorttitle = "eha MA Strategy", overlay = true)

// 
// -- strategy parameter(s)
// moving averages parameter(s)
var _fastMA_len  = input(title = "Fast MA Length",  defval = 21,    type = input.integer, minval = 1, step = 1)
var _slowMA_len  = input(title = "Slow MA Length",  defval = 34,    type = input.integer, minval = 1, step = 1)
var _ma_algo_id  = input(title = "MA Algorithm",    defval = "SMA", options = ["SMA", "EMA", "WMA"])
// backtesting date and time range parameter(s)
var _startYear   = input(defval = 2020, title = "Start Year",  type = input.integer, minval = 1976)
var _startMonth  = input(defval = 1,    title = "Start Month", type = input.integer, minval = 1, maxval = 12)
var _startDay    = input(defval = 1,    title = "Start Day",   type = input.integer, minval = 1, maxval = 31)
var _closeYear   = input(defval = 2020, title = "Close Year",  type = input.integer, minval = 1984)
var _closeMonth  = input(defval = 9,    title = "Close Month", type = input.integer, minval = 1, maxval = 12)
var _closeDay    = input(defval = 1,    title = "Close Day",   type = input.integer, minval = 1, maxval = 31)

//
// -- function(s) and calculation(s)
// checks whether current time is in backtesting time range
start_t = timestamp(_startYear, _startMonth, _startDay, 00, 00)     // backtesting range start time, (00, 00); (hour, minute)
close_t = timestamp(_closeYear, _closeMonth, _closeDay, 23, 59)     // backtesting range close time, (23, 59); (hour, minute)
isInRange() => true
//
// calculates moving average based on provided algorithm, source and length
// alg : moving average algorithm
// len : length
// ser : series
calcMA(alg, len, ser) =>
    (len == 0) ? ser : ((alg == "SMA") ? sma(ser, len) : ((alg == "EMA") ? ema(ser, len) : (alg == "WMA" ? wma(ser, len) : na)))

//
// -- strategy logic and calculation(s)
ma_fast  = calcMA(_ma_algo_id, _fastMA_len, close)
ma_slow  = calcMA(_ma_algo_id, _slowMA_len, close)
cross_ov = crossover (ma_fast, ma_slow) // returns true if fastMA crosses over slowMA
cross_un = crossunder(ma_fast, ma_slow) // returns true if slowMA crosses over fastMA

//
// -- strategy execution logic
// opens a long position whenever the time is in range and crosses over
strategy.entry("ID", comment = "-", long = strategy.long, when = isInRange() and cross_ov)
// closes the position whenever the time is in range and crosses under
strategy.close("ID", comment = "-", when = isInRange() and cross_un)

//
// -- drawing and visualization
co_fast = color.new(color.gray, 25)
co_slow = color.new(color.gray, 75)
// drawing moving average(s)
plot(ma_fast, color = co_fast, linewidth = 2, style = plot.style_line)
plot(ma_slow, color = co_slow, linewidth = 3, style = plot.style_line)

Mehr