
Dies ist eine Breakout-Trading-Strategie, die auf einer beweglichen Durchschnittslinie basiert. Sie erzeugt ein Handelssignal, wenn der Preis die Durchschnittslinie durchschreitet, indem er den durchschnittlichen Preis für einen bestimmten Zeitraum als Durchschnittslinie berechnet.
Die Strategie basiert hauptsächlich auf dem Moving Average-Indikator. Es verwendet die SMA-Funktion, um den durchschnittlichen Schlusskurs innerhalb eines bestimmten Zeitraums zu berechnen, um den Moving Average zu erhalten. Es erzeugt ein Kaufsignal, wenn der neueste Schlusskurs den Moving Average von unten nach oben durchbricht; es erzeugt ein Verkaufsignal, wenn der neueste Schlusskurs den Moving Average von oben nach unten durchbricht.
Konkret definiert es in der Strategie die Berechnungsquelle für den Moving Average (der aktuelle Schlusskurs) und die Dauer der Periode und erhält eine Serie von Moving Average-Daten. Dann setzt es zwei Bedingungen: Es wird ein Kauf-Order erstellt, wenn der Preis die Durchschnittslinie überschreitet. Es wird ein Verkauf-Order erstellt, wenn der Preis die Durchschnittslinie unterschreitet.
Dies ist eine einfache und praktische Strategie, um Trends zu verfolgen.
Obwohl die Strategie viele Vorteile hat, gibt es einige Risiken:
Um diese Risiken zu kontrollieren, können wir Filteroptimierungen in Kombination mit anderen Indikatoren durchführen, kurzfristige Trendbeurteilungen in den Großhandel einführen oder die optimale Kombination von Parametern mithilfe von Methoden des maschinellen Lernens finden.
Die Strategie kann vor allem in folgenden Bereichen optimiert werden:
Hinzufügen von anderen technischen Indikatoren, die das Handelssystem bilden und die Strategiegewinnrate verbessern. Zum Beispiel die Aufnahme von unterstützenden Indikatoren wie MACD, KD usw.
Einschließung von Stop-Loss-Mechanismen. Verwenden Sie Tracking-Stops oder Timed-Stops, um Gewinne zu sichern und Verluste zu vermeiden.
Optimierung der Parameter. Veränderung der Periodenparameter der beweglichen Mittelwerte, um die optimale Kombination von Parametern zu finden. Es können auch verschiedene Arten von beweglichen Mittelwerten getestet werden.
Mehr Machine-Learning-Beschlüsse. Die Verwendung von Random Forest, LSTM und anderen Algorithmen, die mehrere Faktoren kombinieren, um Trends zu bestimmen.
Optimierung der Ein- und Ausstiegslogik. Setzen Sie Trendfilterbedingungen, um eine Umkehrung am Ende des Trends zu vermeiden. Erwägen Sie die Verwendung von Batch-Plating-Logik.
Diese mobile Durchbruchstrategie ist im Allgemeinen sehr gut geeignet als Einstiegsstrategie für die Quantifizierung von Transaktionen. Die Idee ist einfach, leicht zu verstehen und zu bedienen und hat eine gewisse Wirkung im Einsatz. Gleichzeitig bleibt viel Raum für nachfolgende Tests und Optimierungen. Auf dieser Grundlage können wir mehr technische Kennzahlen und Modelle einführen und eine effektivere Quantifizierungsstrategie entwickeln.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-22 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// |-- Initialize Strategy Parameters:
strategy(
// |-- Strategy Title.
title='[Tutorial][RS]Working with orders',
// |-- if shorttitle is specified, it will overwrite the name on the chart window.
shorttitle='WwO',
// |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs.
overlay=true,
// |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity)
default_qty_type=strategy.cash,
// |-- Value to use for default trade size
default_qty_value=1000,
// |-- Default Account size
initial_capital=100000,
// |-- Account Currency parameter
currency=currency.USD
)
// |-- Strategy Profit/loss parameters:
profit = input(defval=5000, title='Take Profit')
loss = input(defval=5000, title='Stop Loss')
ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).')
percent = input(defval=50.0, title='Percentage of position to take profit.')
// |-- Signal Parameters:
// |
// |-- Moving Average input source and length parameters.
src = input(defval=close)
length = input(defval=100)
// |-- Moving Average Data series.
ma = sma(src, length)
// |-- Condition for triggering a buy(long) order(trade).
if crossover(src, ma)
// |-- Create the order.
strategy.order(id='Buy', long=true)
// |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio)
// |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss)
if crossunder(src, ma)
// |-- Create the order.
strategy.order(id='Sell', long=false)
// |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio)
// |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss)
// |-- Output Functions.
plot(series=ma, title='MA', color=black)