Handelsstrategie mit doppelten gleitenden Durchschnittswerten

Schriftsteller:ChaoZhang, Datum: 2024-02-29 14:54:25
Tags:

img

Übersicht

Die Dual Moving Average Channel Trading Strategie ist eine Trend-Trading-Strategie, die Crossovers zwischen Doppel Moving Averages verfolgt. Die Strategie verwendet den Exponential Moving Average (EMA) und den Weighted Moving Average (WMA) als Handelssignalindikatoren. Wenn die kurzfristige EMA über die langfristige WMA überschreitet, geht die Strategie lang.

Strategie Logik

Die Handelssignale dieser Strategie stammen aus dem goldenen Kreuz und dem Todeskreuz zwischen der 10-Perioden-kurzfristigen EMA und der 20-Perioden-langfristigen WMA. Wenn die kurzfristige EMA über die langfristige WMA überschreitet, bedeutet dies, dass sich der Markt umkehrt und somit lang geht. Wenn die kurzfristige EMA unter die langfristige WMA überschreitet, bedeutet dies, dass der Markt umkehrt und somit kurz geht.

Nach der Bestimmung der Handelsrichtung setzt die Strategie den Stop-Loss um 1 ATR-Periode unter oder über dem Einstiegspreis mit zwei Take-Profits - der erste Take-Profit wird um 1 ATR über oder unter dem Einstiegspreis und der zweite Take-Profit um 2 ATRs über oder unter dem Einstiegspreis festgelegt.

Die Trailing Stop Loss Logik - wird aktiviert, sobald der höchste Preis oder der niedrigste Preis die erste Gewinnspanne erreicht hat.

Vorteil

Die Strategie nutzt die doppelte Glättungsgeräuschreduktionsfunktion von gleitenden Durchschnitten, um zufällige Schwankungen auf dem Markt effektiv auszufiltern und mittelfristige bis langfristige Trendsignale zu identifizieren, um so zu vermeiden, in Whipsaws gefangen zu werden. Darüber hinaus erhöhen die zweistufigen Take-Gewinne die Gewinnzone der Strategie und maximieren den Gewinn. Der Trailing-Stop-Mechanismus ermöglicht es der Strategie auch, Gewinne zu erzielen und Verluste zu reduzieren.

Risiken

Bei den gleitenden Durchschnitten selbst besteht eine größere Verzögerung, wodurch die Gefahr besteht, dass Signale fehlen.

Die Stop-Loss-Einstellung ist ein wichtiger Bestandteil der Strategie. Wenn der Stop-Loss zu klein ist, ist er anfällig für Marktlärm. Wenn der Stop-Loss zu groß ist, kann es nicht gelingen, Risiken effektiv zu kontrollieren.

Wenn der Markt zudem heftig schwankt, kann der Trailing-Stop möglicherweise nicht sehr gut zum Schutz dienen.

Optimierungsrichtlinien

  1. Test EMAs und WMAs mit verschiedenen Parametern, um die optimale Parameterkombination zu finden.

  2. Bei der Auswahl von Fixpunkten oder ATR-Mehrfach-Stop-Loss wird auf der Grundlage verschiedener Produktmerkmale und Handelsstile gedacht.

  3. Prüfung der Wirkung des Teilstands und des Vollstands.

  4. Einführung anderer Indikatoren für die Signalfilterung zur Unterstützung der EMA und der WMA, um die Signalqualität zu verbessern.

Zusammenfassung

Im Allgemeinen ist die Dual Moving Average Channel-Handelsstrategie relativ robust und funktioniert gut in Trending-Märkten. Durch die Optimierung von Parametern, Stop-Loss-Mechanismen und die Verbesserung der Signalqualität kann die tatsächliche Handelsleistung dieser Strategie weiter verbessert werden. Dies ist eine vielversprechende Strategieidee, die eine eingehende Forschung und Anwendung im tatsächlichen Handel wert ist.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 3h
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/
// © gpadihar

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
start_month   = input(title='Start month'  ,defval=1)
start_day     = input(title='Start day'    ,defval=1)
start_hour    = input(title='Start hour'   ,defval=0)
start_minute  = input(title='Start minute' ,defval=0)
end_time      = input(title='set end time?',defval=false)
end_year      = input(title='end year'     ,defval=3019)
end_month     = input(title='end month'    ,defval=12)
end_day       = input(title='end day'      ,defval=31)
end_hour      = input(title='end hour'     ,defval=23)
end_minute    = input(title='end minute'   ,defval=59)

// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema        = ema(close,ema_period)
wma        = wma(close,wma_period)

// Entry Condition
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)



Mehr