Handelsstrategie mit doppeltem gleitenden Durchschnitt und Crossover


Erstellungsdatum: 2023-10-13 15:40:49 zuletzt geändert: 2023-10-13 15:40:49
Kopie: 0 Klicks: 404
1
konzentrieren Sie sich auf
1166
Anhänger

Überblick

Die Strategie ist einfach und direkt und eignet sich für den mittelfristigen Handel.

Strategieprinzip

Die Strategie berechnet die schnellen und langsamen Durchschnittslinien, indem sie Parameter wie die schnelle Durchschnittslinie, die langsame Durchschnittslinie und den Typ der Durchschnittslinie eingibt. Kaufen Sie, wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie durchbricht, und verkaufen Sie, wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie durchbricht.

Die Kernlogik der Strategie lautet:

  1. Eingabeparameter: schnelle durchschnittliche Periode maLen1, langsame durchschnittliche Periode maLen2, durchschnittliche Typ maTypeChoice

  2. Fast-Meanline maValue1 und Slow-Meanline maValue2 berechnet auf Basis der Eingabeparameter

  3. Vergleichen Sie die Größenverhältnisse zwischen zwei Gleichlinien und definieren Sie die Kauf- und Verkaufskonditionen:

    • Kaufbedingungen: maValue1 mit maValue2

    • Verkaufsbedingungen: maValue1 unter maValue2

  4. Beim Kauf und Verkauf von Gegenständen, bei denen entsprechende Transaktionen durchgeführt werden

  5. Die Größe der Mittellinie wird visuell dargestellt und in verschiedenen Farben unterteilt

  6. Senden von Kauf- und Verkaufssignalen

Strategische Vorteile

  • Vermeiden Sie, dass Sie von einer einzigen Gleichschwingung irregeführt werden

  • Die Mittellinienparameter sind anpassbar für unterschiedliche Periodenoperationen

  • Die Logik ist einfach, unkompliziert und leicht zu verstehen.

  • Benutzerdefinierte Kauf- und Verkaufssignale, die den Zeitpunkt des Handels in Echtzeit bestimmen

  • Visualisierung der Kursentwicklung, um einen intuitiven Handelsindikator zu bilden

  • Die optimale Kombination von Parametern durch Parameteroptimierung

  • Für die Rückmessung von Optimumparametern oder für den Handel auf der Festplatte

Strategisches Risiko

  • Durchschnittliche Kreuzungen sind leicht zu falschen Signalen und sollten in Kombination mit Trends und Formen beurteilt werden

  • Bei Binärschwankungen kann es leicht sein, häufige Positionen zu eröffnen, was zu Kostenverlusten führt.

  • Falsche Parameter können zu häufigen oder unfrequenten Transaktionen führen

  • Ein unerwartetes Ereignis könnte zu einer dramatischen Situation führen, die nicht aufgehalten werden kann.

  • Kurzzeitindikatoren können bei einem Durchbruch der Großen Zyklus ausfallen

  • Es ist nicht automatisch, es muss regelmäßig überwacht werden.

Die Risiken können auf folgende Weise gelöst werden:

  • Der Trend-Indikator ist ein Trend-Indikator, der den Handel mit Schwankungen verhindert.

  • In Kombination mit Formalzeichen bestätigt Signalwirksamkeit

  • Optimierung der Parameter, um die Handelsfrequenz auf ein vernünftiges Niveau zu bringen

  • Setzen Sie einen Stop-Loss-Haltpunkt, um Einzelschäden zu kontrollieren

  • Stabilität der Parameter für mehrere Zeiträume überprüfen

  • Zeit- oder Signalfilter, um falsche Durchbrüche zu vermeiden

Richtung der Strategieoptimierung

  • Verschiedene Durchschnittsparameter testen, um die optimalen Parameter zu finden

  • Verschiedene Durchschnittslinien-Typen testen, um die genaueste Durchschnittslinie zu wählen, die ein Signal erzeugt

  • Der Trend-Indikator ist ein Trend-Indikator, mit dem sich ein Trend-Untrust-Trading vermeiden lässt.

  • Der richtige Zeitpunkt für den Einstieg wird durch die Kombination von schwankenden Indikatoren bestimmt.

  • Hinzufügen von Zeit- oder Signalfiltern, um falsche Signale zu reduzieren

  • Slide-Point-Kontrollen zur Optimierung der Festplatten-Trading-Effekte

  • Stabilität in mehreren Sorten und mehreren Zyklen

  • Einzug in die automatische Stop-Loss-Strategie

  • Technologien wie maschinelles Lernen zur Verbesserung der Rückdaten

Zusammenfassen

Die Doppel-Even-Cross-Strategie ist eine sehr typische Technische Kennziffer-Strategie. Sie nutzt das Prinzip der schnellen und langsamen Gleich-Linien-Kreuzung, um ein Handelssignal zu erzeugen, das durch Parameteroptimierung gute Rückmeldungsergebnisse erzielt. Die Strategie birgt jedoch auch einige Risiken, die mit anderen Technischen Kennzahlen wie Trends, Formen und anderen zu verifizieren sind, um die Fehlsignalrate zu verringern.

Strategiequellcode
/*backtest
start: 2023-10-05 00:00:00
end: 2023-10-05 22:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// © sehweijun
//study( title="Arch1tect's New Toy", shorttitle="Arch1tect's New Toy", overlay=true, resolution="")
// strategy( title="Arch1tect's New Toy (Strategy Tester Version)", shorttitle="Arch1tect's New Toy (Strategy Tester Version)", overlay=true, initial_capital = 100000, commission_value=0.07, commission_type=strategy.commission.cash_per_contract)

maTypeChoice = input( "EMA", title="MA Type", options=["EMA", "WMA", "SMA"] )
maSrc = input( close, title="MA Source" )
maLen1 = input( 15, minval=1, title="MA Length" )
maLen2 = input( 95, minval=1, title="MA Length" )

maValue1 = if ( maTypeChoice == "EMA" )
    ema( maSrc, maLen1 )
else if ( maTypeChoice == "WMA" )
    wma( maSrc, maLen1 )
else if ( maTypeChoice == "SMA" )
    sma( maSrc, maLen1 )
else
    0
    
maValue2 = if ( maTypeChoice == "EMA" )
    ema( maSrc, maLen2 )
else if ( maTypeChoice == "WMA" )
    wma( maSrc, maLen2 )
else if ( maTypeChoice == "SMA" )
    sma( maSrc, maLen2 )
else
    0

buySignal = crossover( maValue1, maValue2 )
sellSignal = crossunder( maValue1, maValue2 )

mainMAColour = ( maValue1 > maValue2 ) ? color.green : color.red 

plot( maValue1, title="Arch1tect's New Toy", color=mainMAColour, offset=0, linewidth=4 )
//plot( maValue2, title="Arch1tect's Filter", color=color.black, offset=0, linewidth=2 )

var color buyCandleColour = #00ff0a
var color sellCandleColour = #ff1100

barcolor( buySignal ? buyCandleColour : sellSignal ? sellCandleColour : na, title="Signal Bar Colour" )
bgcolor( color=buySignal ? buyCandleColour : sellSignal ? sellCandleColour : na, transp=85, title="Signal Background Colour")

alertcondition( buySignal or sellSignal, title="Signal change!", message="Signal change!")
alertcondition( buySignal, title="Buy signal!", message="Buy signal!")
alertcondition( sellSignal, title="Sell signal!", message="Sell signal!")

// Strategy Tester
stratTesterOn    = input( title="Strategy Tester [ON/OFF]", group="Strategy Tester", type=input.bool, defval=true)
entryTime        = input( "2200-1200", title = "Daily trading time session (in Exchange GMT)", group="Strategy Tester", type = input.session )
startTime        = input( "2200-2201", title = "Start Time", group="Strategy Tester", type = input.session )
maxDailyLoss     = input( 2500, title = "Max daily loss", group="Strategy Tester", type = input.integer )
maxTotalDrawdown = input( 12000, title = "Max daily loss", group="Strategy Tester", type = input.integer )
contractSize     = input( 1, title = "Contract size", group="Strategy Tester", type = input.integer )

tradeOnStartSess = input( title="First trade on session start [ON/OFF]", group="Strategy Tester", type=input.bool, defval=true)

fixedTPSL        = input( title="Fixed TP/SL PIPS [ON/OFF]", group="Strategy Tester", type=input.bool, defval=false)
fixedTPValue     = input ( 10.00, minval=0.01, type=input.float, title="TP", group="Strategy Tester" )
fixedSLValue     = input ( 10.00, minval=0.01, type=input.float, title="SL", group="Strategy Tester" )

fromDay          = input(defval = 1,    title = "From Day", group="Date Range", type = input.integer, minval = 1, maxval = 31)
fromMonth        = input(defval = 1,    title = "From Month", group="Date Range", type = input.integer, minval = 1, maxval = 12)
fromYear         = input(defval = 2020, title = "From Year", group="Date Range", type = input.integer, minval = 1970)
thruDay          = input(defval = 1,    title = "Thru Day", group="Date Range", type = input.integer, minval = 1, maxval = 31)
thruMonth        = input(defval = 1,    title = "Thru Month", group="Date Range", type = input.integer, minval = 1, maxval = 12)
thruYear         = input(defval = 2112, title = "Thru Year", group="Date Range", type = input.integer, minval = 1970)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// strategy.risk.max_intraday_loss( maxDailyLoss, strategy.cash )
// strategy.risk.max_drawdown( maxTotalDrawdown, strategy.cash )

isTime(_position) =>
    range = time( timeframe.period, _position + ':1234567' )
bgcolor( color=isTime( entryTime ) and stratTesterOn and window() ? color.yellow : na, title="Daily trading time session (in Exchange GMT)", transp=75 )

if ( stratTesterOn and window() )
    if ( buySignal and isTime( entryTime ) )
        if ( not fixedTPSL )
            strategy.close_all()
            strategy.entry( "Buy", strategy.long, contractSize )
        
        if ( fixedTPSL and strategy.position_size == 0 )
            strategy.entry( "Buy", strategy.long, contractSize )
            strategy.exit( "TP/SL", "Buy", stop=close[0]-fixedSLValue, limit=close[0]+fixedTPValue )
        
    if ( sellSignal and isTime( entryTime ))
        if ( not fixedTPSL )
            strategy.close_all()
            strategy.entry( "Sell", strategy.short, contractSize )
        
        if ( fixedTPSL and strategy.position_size == 0  )
            strategy.entry( "Sell", strategy.short, contractSize )
            strategy.exit( "TP/SL", "Sell", stop=close[0]+fixedSLValue, limit=close[0]-fixedTPValue )
    
    if ( isTime( startTime ) and tradeOnStartSess and strategy.position_size == 0 )
        if ( maValue1 > maValue2 )
            strategy.entry( "Buy", strategy.long, contractSize )
            
            if ( fixedTPSL )
                strategy.exit( "TP/SL", "Buy", stop=close[0]-fixedSLValue, limit=close[0]+fixedTPValue )
        else
            strategy.entry( "Sell", strategy.short, contractSize ) 
            
            if ( fixedTPSL )
                strategy.exit( "TP/SL", "Sell", stop=close[0]+fixedSLValue, limit=close[0]-fixedTPValue )
    
    strategy.close_all( when=not isTime( entryTime ) )

plot( strategy.equity )