Strategie für das solide gleitende Durchschnittssystem

Schriftsteller:ChaoZhang, Datum: 2023-11-24 15:11:18
Tags:

img

Übersicht

Diese Strategie ist ein gleitendes Durchschnittssystem, das auf 4 SMMAs (Smoothed Moving Average) mit verschiedenen Perioden und 1 EMA-Indikator basiert. Sie kombiniert mehrere technische Analysewerkzeuge, um eine Handelsstrategie durch Trendbeurteilung zu bilden. Diese Strategie eignet sich hauptsächlich für den Intraday-Handel mit 15-minütigen Anleihen mit hohem Hebelwert EURUSD.

Strategieprinzip

Die Strategie verwendet 4 SMMAs mit unterschiedlichen Parametern (3, 6, 9, 50) und 1 EMA (200), um ein mehrstufiges gleitendes Durchschnittssystem aufzubauen. Der SMMA-Indikator kann effektiv Marktlärm filtern und die Trendrichtung bestimmen. Der EMA-Indikator erkennt langfristige Trends. Die spezifische Handelslogik ist:

Wenn der kurzfristige gleitende Durchschnitt (z. B. 3-Perioden-SMMA) über den längerfristigen gleitenden Durchschnitt (z. B. 200-Perioden-EMA) kreuzt, wird ein Kaufsignal generiert. Wenn der kurzfristige gleitende Durchschnitt unter den längerfristigen gleitenden Durchschnitt kreuzt, wird ein Verkaufssignal generiert. Durch die Anordnung mehrerer gleitender Durchschnitte wird die Trendrichtung bestimmt.

Darüber hinaus legt die Strategie auch Stop-Profit- und Stop-Loss-Punkte zur Risikokontrolle fest.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die mehrstufige gleitende Durchschnittsstruktur kann die Trendrichtung effektiv bestimmen und falsche Signale reduzieren.

  2. Der SMMA-Indikator filtert effektiv Marktlärm und der EMA-Indikator erkennt langfristige Trends.

  3. Es eignet sich für Konten mit hohem Leverage, um den Handelsgewinn zu erhöhen.

  4. Die Stop-Profit- und Stop-Loss-Punkte sind so eingestellt, dass die Risiken wirksam kontrolliert werden.

  5. Optimiert die Handelsvarianten (EURUSD) und -zyklen (15 Minuten), um sie günstiger zu machen.

Risikoanalyse

Die Strategie birgt außerdem folgende Risiken:

  1. Die große Anzahl gleitender Durchschnitte kann kurzfristige Umkehrmöglichkeiten verpassen.

  2. Hohe Hebelwirkung verstärkt Verluste und gleichzeitig Gewinne.

  3. Wenn der gleitende Durchschnitt ein Signal erzeugt, kann der kurzfristige Trend bereits umgekehrt sein.

  4. Der EURUSD-Wechselkurs kann heftige Schwankungen erleben, was größere Risiken mit sich bringt.

Als Reaktion auf diese Risiken können wir die Hebelwirkung angemessen anpassen, die Parameter des gleitenden Durchschnitts optimieren, andere Indikatoren einführen, um eine Trendumkehr zu beurteilen, usw. zur Optimierung.

Optimierungsrichtlinien

Zu den wichtigsten Optimierungsschwerpunkten dieser Strategie gehören:

  1. Die Leistung verschiedener Sorten und Zyklen zu bewerten und die optimalen Parameter auszuwählen.

  2. Verschiedene Kombinationen und Mengen gleitender Durchschnitte testen.

  3. Erhöhung der Volumen- oder Volatilitätsindikatoren zur Bestimmung kurzfristiger Umkehrpunkte.

  4. Erhöhung der dynamischen Anpassung des Stop-Profit- und Stop-Loss-Bereichs.

  5. Hinzufügen des ENU-Indikators zur Bestimmung des Umkehrpunktes.

Durch vielseitige Tests und Optimierungen können die Stabilität und Rentabilität der Strategie erheblich verbessert werden.

Zusammenfassung

Diese gleitende Durchschnittsstrategie integriert die Vorteile von gleitenden Durchschnittsindikatoren, um ein robustes Trendbeurteilungssystem zu bilden. Sie optimiert Handelsvarietäten und -zyklen und eignet sich sehr gut für den Intraday-Handel mit hoher Hebelwirkung. Durch Parameteranpassung und Optimierungstests kann diese Strategie zu einer effizienten und zuverlässigen Algorithmus-Handelsstrategie werden.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("Money maker EURUSD 15min" )
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 


startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)




len = input(3, minval=1, title="Length")
src = input(hl2, title="Source")
smma = 0.0
sma1 = sma(src, len)
smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len

len2 = input(6, minval=1, title="Length")
src2 = input(hl2, title="Source")
smma2 = 0.0
sma2 = sma(src2, len2)
smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2

len3 = input(9, minval=1, title="Length")
src3 = input(hl2, title="Source")
smma3 = 0.0
sma3 = sma(src3, len3)
smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3

len4 = input(50, minval=1, title="Length")
src4 = input(close, title="Source")
smma4 = 0.0
sma4 = sma(src4, len4)
smma4 := na(smma4[1]) ? sma4  : (smma4[1] * (len4 - 1) + src4) / len4

len5 = input(200, minval=1, title="Length")
src5 = input(close, title="Source")
out5 = ema(src5, len5)

timeinrange(res, sess) => time(res, sess) != 0
london=timeinrange(timeframe.period, "0300-1045")
londonEntry=timeinrange(timeframe.period, "0300-0845")

extraEntry =timeinrange(timeframe.period, "0745-1030")

time_cond = true
//time_cond2 = time >= startDate and time <= finishDate and extraEntry

//

longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond
shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond


//longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2
//shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2

//longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond
//shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond



tp=input(300,title="tp")
sl=input(300,title="sl")

strategy.initial_capital  = 50000

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk %")/100           //risk % per trade


    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000           //Set min. lot size

dataL = (close-out5)*100000
dataS = (out5-close)*100000

minDistanceL = (smma4 - out5)*100000
minDistanceS= (out5 - smma4)*100000


strategy.entry("long",1,1,when=longCond )
strategy.exit("closelong","long", profit=tp,loss=sl)
    
strategy.entry("short",0,1,when=shortCond )
strategy.exit("closeshort","short", profit=tp,loss=sl)



strategy.close_all(when = not london, comment="london finish")
//strategy.close_all(when = not extraEntry, comment="london finish")



// maxEntry=input(2,title="max entries")
// strategy.risk.max_intraday_filled_orders(maxEntry)



Mehr