Trend nach der auf EMA-Linien basierenden Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-05 14:21:18
Tags:

img

Übersicht

Diese Strategie basiert auf 3 EMA-Linien unterschiedlicher Perioden. Sie beurteilt die aktuelle Trendrichtung, indem sie feststellt, ob der Preis über den EMA-Linien liegt. Wenn die kurzfristige EMA-Linie über die langfristige EMA-Linie kreuzt, wird ein Kaufsignal generiert. Wenn die kurzfristige EMA-Linie unter die langfristige EMA-Linie kreuzt, wird ein Verkaufssignal generiert. Diese Strategie verfolgt den Trend und schließt Positionen rechtzeitig, wenn der Trend umkehrt.

Strategie Logik

Die Strategie verwendet 3 EMA-Linien, die jeweils 10-Tage-, 20-Tage- und 50-Tage-Linien sind.

  1. Wenn sowohl die 10-Tage-EMA als auch die 20-Tage-EMA über der 50-Tage-EMA liegen, wird sie als Aufwärtstrend definiert;

  2. Wenn sowohl die 10-Tage-EMA als auch die 20-Tage-EMA unter der 50-Tage-EMA liegen, wird sie als Abwärtstrend definiert;

  3. Wenn die kurzfristigen EMA-Linien (10- und 20-Tage-Linien) über die langfristige EMA-Linien (50-Tage-Linien) kreuzen, wird ein Kaufsignal generiert.

  4. Wenn die kurzfristigen EMA-Linien (10- und 20-Tage-Linien) unterhalb der langfristigen EMA-Linien (50-Tage-Linien) kreuzen, wird ein Verkaufssignal generiert.

  5. Halten Sie eine Long-Position während eines Aufwärtstrends und Halten Sie eine Short-Position während eines Abwärtstrends;

  6. Schließen Sie die aktuelle Richtungsposition, wenn sich der Trend umkehrt (kurzfristige EMA kreuzt langfristige EMA).

Die Strategie erzielt Gewinn, indem sie Positionen rechtzeitig schließt, um Gewinne zu erzielen, und zwischen Long- und Short-Positionen wechselt.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Die Vorschriften sind einfach und klar, leicht verständlich und umsetzbar;
  2. Die Verwendung von EMA-Linien zur Tendenzbestimmung verhindert die Beeinträchtigung durch kurzfristige Marktschwankungen;
  3. Die rechtzeitige Schließung von Positionen, um Trendläufe zu verfolgen, verhindert die Ausweitung von Verlusten;
  4. Es ist nicht notwendig, die Marktrichtung mit hoher Gewinnrate durch die Verfolgung von Trends vorherzusagen.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Auf den Märkten mit Bandbreitebegrenzung können sich EMA-Linien häufig überschneiden, was zu hohen Handelskosten durch häufige Eröffnungs- und Schließpositionen führt;

  2. Die Trendbestimmung durch die EMA kann nach der Preislücke scheitern und gute Einstiegsmöglichkeiten verpassen.

Um die Risiken zu optimieren, können einige Methoden angewendet werden:

  1. Die Regeln für offene Positionen können angemessen gelockert werden, wenn die EMAs nahe sind, um einen Überhandel zu vermeiden.

  2. Bestimmung des Trends durch Kombination anderer Indikatoren, um EMA-Fehler zu vermeiden.

Optimierungsrichtlinien

Die Strategie kann aus folgenden Gesichtspunkten optimiert werden:

  1. Optimierung von Parametern: Versuche verschiedene Kombinationen von EMA-Perioden, um die optimalen Parameter zu finden;

  2. Optimierung der Handelskosten: Optimierung der Regeln für offene Positionen, um unnötigen häufigen Handel zu verringern;

  3. Optimierung der Stop-Loss-Strategie: Ein angemessenes Stop-Loss-Niveau zur Kontrolle einzelner Verluste;

  4. Verwenden Sie MACD, KDJ und andere Indikatoren, um den optimalen Eintrittszeitpunkt zu bestimmen.

Zusammenfassung

Im Allgemeinen ist diese Strategie ziemlich einfach und praktisch. Sie verwendet EMA, um die Trendrichtung mit einer richtigen Stop-Loss-Strategie zu bestimmen, um Risiken effektiv zu kontrollieren. Es gibt auch Möglichkeiten zur Optimierung. Durch die Kombination von Parameteroptimierung, Stop-Loss-Strategie und anderen Indikatoren kann die Leistung dieser Strategie weiter verbessert werden.


/*backtest
start: 2024-01-28 00:00:00
end: 2024-01-31 04:00:00
period: 45m
basePeriod: 5m
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/
// © mattehalen

//@version=4
//study("EMA 10,20 59",overlay=true)
strategy("EMA 10,20 59",overlay=true)
infoBox     = input(true, title="infoBox", type=input.bool)
infoBox2    = input(false, title="infoBox2", type=input.bool)
BuySellSignal_Bool = input(false, title="Buy & SellSignal", type=input.bool)
infoBoxSize = input(title="infoBoxSize", defval=size.large, options=[size.auto, size.tiny, size.small, size.normal, size.large, size.huge])
ema1Value   = input(10)
ema2Value   = input(20)
ema3Value   = input(59)
maxLoss = input(3000)
ema1        = ema(close,ema1Value)
ema2        = ema(close,ema2Value)
ema3        = ema(close,ema3Value)
objcnt      = 0
buyTitle    = tostring(close[1])
myProfit    = float(0)

plot(ema1,title="ema1",color=color.red,linewidth=2)
plot(ema2,title="ema2",color=color.green,linewidth=2)
plot(ema3,title="ema3",color=color.black,linewidth=2)

Buytrend = (ema1 and ema2 > ema3) and (ema1[1] and ema2[1] > ema3[1])
BarssinceBuyTrend = barssince(Buytrend)
BarssinceSellTrend = barssince(not Buytrend)
closeAtBuyTrend = close[1]
bgcolor(Buytrend ? color.green : color.red,transp=70)

BuySignal = Buytrend and not Buytrend[1] and BuySellSignal_Bool

BuySignalOut = Buytrend and (crossunder(ema1,ema2)) and BuySellSignal_Bool
BarssinceBuy = barssince(BuySignal)
bgcolor(BuySignal ? color.green : na , transp=30)
bgcolor(BuySignalOut ? color.black : na , transp=30)
plot(BarssinceBuy,title="BarssinceBuy",display=display.none)


SellSignal = not Buytrend and Buytrend[1] and BuySellSignal_Bool
SellSignalOut = not Buytrend and (crossover(ema1,ema2)) and BuySellSignal_Bool
BarssinceSell = barssince(SellSignal)
bgcolor(SellSignal ? color.red : na , transp=30)
bgcolor(SellSignalOut ? color.black : na , transp=30)
plot(BarssinceSell,title="BarssinceSell",display=display.none)


buyProfit   = float(0)
cntBuy      =0
sellProfit  = float(0)
cntSell     =0
buyProfit   := Buytrend and not Buytrend[1]? nz(buyProfit[1]) + (close[BarssinceBuyTrend[1]]-close) : nz(buyProfit[1])
cntBuy      := Buytrend and not Buytrend[1]? nz(cntBuy[1]) + 1: nz(cntBuy[1])
sellProfit  := not Buytrend and Buytrend[1]? nz(sellProfit[1]) + (close-close[BarssinceSellTrend[1]]) : nz(sellProfit[1])
cntSell     := not Buytrend and Buytrend[1]? nz(cntSell[1]) + 1 : nz(cntSell[1])
totalProfit = buyProfit + sellProfit

// if (Buytrend and not Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceBuyTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuyTrend[1]]) + "\n" + "Profit = "+tostring(close[BarssinceBuyTrend[1]]-close) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.red,size=infoBoxSize)
// if (not Buytrend and Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceSellTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSellTrend[1]]) + "\n" + "Profit = "+tostring(close-close[BarssinceSellTrend[1]]) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.green,size=infoBoxSize)

// if (BuySignalOut and not BuySignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceBuy[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.purple,size=infoBoxSize
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.lime,size=infoBoxSize)
// if (SellSignalOut and not SellSignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceSell[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.purple,size=infoBoxSize)
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.fuchsia,size=infoBoxSize)


// l2 = label.new(bar_index, na, 'buyProfit in pip = '+tostring(buyProfit)+"\n"+  'cntBuy = '+tostring(cntBuy) +"\n"+  'sellProfit in pip = '+tostring(sellProfit)+"\n"+  'cntSell = '+tostring(cntSell) +"\n"+  'totalProfit in pip = '+tostring(totalProfit)     , 
//   color=totalProfit>0 ? color.green : color.red, 
//   textcolor=color.white,
//   style=label.style_labeldown, yloc=yloc.abovebar,
//   size=size.large)

// label.delete(l2[1])



//--------------------------------------------------
//--------------------------------------------------
if (Buytrend)
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

//if BuySignalOut
   // strategy.close("long", comment = "Exit Long")
if (not Buytrend)
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
//if SellSignalOut
    // Force trade exit.
    //strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------



Mehr