Die Strategie ermittelt die aktuelle Trendrichtung durch die Berechnung von Moving Averages für verschiedene Perioden und sendet ein Kauf- und Verkaufssignal in Verbindung mit dem RSI. Wenn ein kurzfristiger Moving Average einen langfristigen Moving Average überschreitet, wird der Trend als aufwärts betrachtet und ein Kauf ausgeführt.
Berechnen Sie einen einfachen gleitenden Durchschnitt für 10, 20, 50, 100 und 200 Tage.
Der 14-Tage-RSI wird berechnet.
Ein Kauf erfolgt, wenn der 10-Tage-SMA über dem 50-Tage-SMA liegt und der RSI größer als 30 ist und der 20-Tage-SMA höher oder gleich dem 100-Tage-SMA ist oder der 50-Tage-SMA höher oder gleich dem 100-Tage-SMA ist.
Setzen Sie den Stop-Loss-Preis für den Kaufpunkt mit 1 minus den Stop-Loss-Prozentsatz.
Der Verkauf erfolgt, wenn:
Die Strategie beurteilt die Richtung des Markttrends anhand von Moving Averages und setzt Stop-Losses, um das Risiko zu kontrollieren. Der RSI-Indikator wird verwendet, um falsche Durchbrüche zu filtern. Kaufen Sie auf kurzfristigen SMAs, wenn sie langfristige SMAs durchbrechen, was einen Aufwärtstrend anzeigt, und setzen Sie eine Stop-Line, wenn Sie Aktien halten.
Optimierung kann durch die Anpassung der Moving-Average-Periode, die Anpassung der Stop-Loss-Punkte und andere Methoden erfolgen. Es kann auch in Verbindung mit anderen Indikatoren in Betracht gezogen werden, um die Entscheidungsgenauigkeit zu verbessern.
Diese Strategie ist klar und konzipiert. Die Verwendung von Moving Averages, um Trends zu beurteilen, und die Einstellung von Stopps, um Risiken zu kontrollieren, ist eine typische Trend-Tracking-Strategie. Durch die Optimierung von Parametern und die Hinzufügung anderer Beurteilungskennzahlen kann die Strategie-Retesting- und Real-Time-Performance weiter verbessert werden.
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA_Script", overlay=true)
// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)
// Configure backtest start date with inputs
startDate=input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth=input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear=input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100)
// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))
// Calculate Relative Strength Index
rsiValue=rsi(close, 14)
// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)
MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)
MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)
MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1)
MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1)
// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low
// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >= MA100_Val) or (MA50_Val >= MA100_Val))
avg_price = (close + open)/2
// First Entry
if (afterStartDate)
strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)
plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')
// Determine trail stop loss prices
longStopPrice=0.0
longStopPrice :=if (strategy.position_size > 0)
stopValue=C_BodyHi * (1 - longTrailPerc)
max(stopValue, longStopPrice[1])
else
0
plot(longStopPrice, color=color.orange, linewidth=1)
bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)
// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')
id_val = ""
stop_val = close
condition = false
if sellCondition_1
id_val := "Exit By Stop Loss At 7%"
stop_val := entry_Point_1*0.93
condition := true
else if sellCondition_2
id_val := "Exit By Take Profit based on MA"
stop_val := close
condition := true
else if sellCondition_3
id_val := "Exit By Trailing Stop"
stop_val := longStopPrice
condition := true
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
//strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
//strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)