Die Strategie basiert auf der Kreuzung von schnellen und langsamen Moving Averages als Kauf- und Verkaufssignale und gehört zu den Trend-Tracking-Strategien. Die Erträge werden durch automatische Anpassung der Moving Average-Parameter und die dynamische Anpassung an die Markttrends maximiert.
Berechnung des schnellen und des langsamen Durchschnitts. Die Parameter des schnellen Durchschnitts sind 21 und des langsamen Durchschnitts sind 34
Wenn eine schnelle bewegliche Durchschnittslinie über eine langsame bewegliche Durchschnittslinie verläuft, zeigt dies eine Aufwärtsbewegung und gibt ein Kaufsignal aus.
Wenn die schnelle, bewegliche Durchschnittslinie unter der langsamen, beweglichen Durchschnittslinie durchschritten wird, zeigt dies eine Abwärtsbewegung an und gibt ein Verkaufssignal aus.
Profitieren Sie von Trends, indem Sie die Längeparameter der Moving Average automatisch anpassen, um sie dynamisch an Markttrends anzupassen.
Die Umsetzung der Strategie ist einfach, klar und verständlich.
Es ist eine sehr gute Möglichkeit, die Marktentwicklung zu verfolgen, und es gibt großes Potenzial, davon zu profitieren.
Die Parameter können dynamisch angepasst werden, um sich an den Wandel der Praxis anzupassen.
Konfigurierbare mobile Mittellinien-Algorithmen, um die Flexibilität der Strategie zu erhöhen.
Das ist eine sehr flexible Anwendung, die sich frei konfigurieren lässt und mit der man kaufen und verkaufen kann.
Die Strategie der mobilen Durchschnittslinie führt zu häufigen Transaktionen und hohen Transaktionskosten
Bei starken Schwankungen kann der Moving Average eine Verzögerung verursachen, wodurch der optimale Kauf- und Verkaufszeitpunkt verpasst werden kann.
Die Optimierung der Moving Average Parameter und der Frequenz der Anpassung ist notwendig, da eine falsche Konfiguration die Strategie zum Scheitern bringen kann.
Es ist notwendig, die Stop-Loss-Kontrollen streng einzuhalten, um zu verhindern, dass sich die Verluste ausweiten.
Wenn sich der Trend umkehrt, kann es zu großen Verlusten kommen.
Optimierung der Moving Average Parameter, um sie schneller und zeitnah auf Trendänderungen einzufangen.
Ein zusätzliches Stop-Loss-Verfahren und eine strenge Kontrolle der Einzelschäden.
Es ist wichtig, dass die Trends nicht rückgängig gemacht werden.
Optimierung der Strategie zur mobilen Gleichgewichtsanpassung, um sie intelligenter und automatisierter zu gestalten.
Hinzugefügt wurde ein Parameter-Optimierungsmodul, um automatische Optimierungen mit Hilfe von maschinellen Lernmethoden durchzuführen.
Die Strategie hat den Vorteil, dass die Handelsregeln einfach sind, leicht zu implementieren und Trends effektiv zu erfassen. Es besteht jedoch ein gewisses Risiko, dass die Parameterkonfiguration und die Stop-Loss-Logik kontinuierlich optimiert werden müssen, um die Strategie stabiler und zuverlässiger zu machen. Insgesamt hat die Strategie großes Verbesserungspotenzial und sollte tiefgehend untersucht und angewendet werden.
/*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)