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.
Die Strategie verwendet 3 EMA-Linien, die jeweils 10-Tage-, 20-Tage- und 50-Tage-Linien sind.
Wenn sowohl die 10-Tage-EMA als auch die 20-Tage-EMA über der 50-Tage-EMA liegen, wird sie als Aufwärtstrend definiert;
Wenn sowohl die 10-Tage-EMA als auch die 20-Tage-EMA unter der 50-Tage-EMA liegen, wird sie als Abwärtstrend definiert;
Wenn die kurzfristigen EMA-Linien (10- und 20-Tage-Linien) über die langfristige EMA-Linien (50-Tage-Linien) kreuzen, wird ein Kaufsignal generiert.
Wenn die kurzfristigen EMA-Linien (10- und 20-Tage-Linien) unterhalb der langfristigen EMA-Linien (50-Tage-Linien) kreuzen, wird ein Verkaufssignal generiert.
Halten Sie eine Long-Position während eines Aufwärtstrends und Halten Sie eine Short-Position während eines Abwärtstrends;
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.
Die Vorteile dieser Strategie sind:
Diese Strategie birgt auch einige Risiken:
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;
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:
Die Regeln für offene Positionen können angemessen gelockert werden, wenn die EMAs nahe sind, um einen Überhandel zu vermeiden.
Bestimmung des Trends durch Kombination anderer Indikatoren, um EMA-Fehler zu vermeiden.
Die Strategie kann aus folgenden Gesichtspunkten optimiert werden:
Optimierung von Parametern: Versuche verschiedene Kombinationen von EMA-Perioden, um die optimalen Parameter zu finden;
Optimierung der Handelskosten: Optimierung der Regeln für offene Positionen, um unnötigen häufigen Handel zu verringern;
Optimierung der Stop-Loss-Strategie: Ein angemessenes Stop-Loss-Niveau zur Kontrolle einzelner Verluste;
Verwenden Sie MACD, KDJ und andere Indikatoren, um den optimalen Eintrittszeitpunkt zu bestimmen.
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") //-------------------------------------------------- //-------------------------------------------------- //--------------------------------------------------