Long- und Short-Handelsstrategie basierend auf EMA und kumuliertem Volumen


Erstellungsdatum: 2023-09-20 11:48:34 zuletzt geändert: 2023-09-20 11:48:34
Kopie: 0 Klicks: 793
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie kombiniert EMAs und Cumulative Volume Indicators, um eine Trendentwicklung anhand der Kreuzung der beiden zu erzeugen. Es handelt sich um eine typische Trendverfolgungsstrategie, die die Richtung des Marktes auf der Ebene der längeren Linien verfolgt.

Strategieprinzip

Berechnen Sie die 50-Tage-EMA-Mittellinie und den 100-Tage-Kumulativwert. Wenn die EMA von unten nach oben über die kumulierte Handelsmenge geht, erzeugt dies ein Kaufsignal. Wenn die EMA von oben nach unten über die kumulierte Handelsmenge fällt, erzeugt dies ein Verkaufssignal.

Der Stop-Loss wird auf 8% unter dem Einstiegspreis festgelegt; der Stop-Loss wird auf 8% über dem Einstiegspreis festgelegt und der Teil der Position wird platziert, wenn der Preis den Stop-Loss erreicht.

Analyse der Stärken

Die Strategie kombiniert die Trendindikator-EMA und die Kapitalfluss-Indikator-Akkumulationsvolumen, um die Preise und die Transaktionsvolumen-Informationen zu nutzen, um die mittleren langen Trends effektiv zu identifizieren. Die feste Stop-Loss-Strategie ist direkt effizient und hilft, einen Teil der Gewinne zu sperren und das Risiko zu kontrollieren.

Die EMA-Zyklusparameter können frei angepasst werden, um sie an die verschiedenen Sorten anzupassen. Sie können mehrere Leerlauf-Tradings durchführen, um einen linearen Handel zu realisieren. Die Rückmeldedaten zeigen, dass die Strategie in Trendbedingungen gut funktioniert.

Risikoanalyse

Die Strategie ist zu sehr auf die Mittelwertindikatoren angewiesen und ist in der Lage, falsche Signale bei Zwischenbewegungen zu erzeugen. Fixed Stop-Losses können auch zu frühzeitigem Ausstieg oder zu starkem Stop-Loss führen. Nur Preise und Transaktionsmengen werden berücksichtigt, ohne andere Faktoren zu berücksichtigen.

Die Parameter der Durchschnittslinie können entsprechend erweitert werden, um Fehlsignale zu reduzieren. Auch Indikatoren wie Volatilität, RSI und andere können unterstützt werden. Optimierung der Stop-Loss-Mechanismen, z. B. die Einführung von Tracking-Stops, Dynamic Stops usw.

Optimierungsrichtung

  1. Tests zur Optimierung der EMA-Parameterkombinationen auf der Suche nach den optimalen Parametern.

  2. Einführung von anderen technischen Indikatoren, um eine Portfolio-Strategie zu bilden.

  3. Die Anwendung von maschinellem Lernen zur Vorhersage von Preistrends und zur Verbesserung der EMA-Effekte.

  4. Optimierung der Stop-Loss-Strategie in Kombination mit Stop-Tracking, Dynamic Stop und anderen Mechanismen.

  5. Einführung eines Moduls zur Vermögensverwaltung und dynamische Positionsanpassung.

  6. Anpassung der Parameter an die Eigenschaften der Sorte, um eine Strategie zu bilden.

Zusammenfassen

Die Strategie integriert EMA und Transaktionsvolumen-Indikatoren, um die Trends der mittleren und langen Linie zu beurteilen. Es gibt jedoch Probleme mit einer übermäßigen Abhängigkeit von Mittellinien und festen Stop-Stops. Die Hinzufügung von mehr Indikatoren, die die Stop-Stopp-Strategie beurteilen und optimieren, kann die Strategie-Stabilität und den Gewinnraum verbessern.

Strategiequellcode
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 2h
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/
// © mohanee

//@version=4
strategy("EMA_cumulativeVolume_crossover[Strategy]", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000)


emaLength= input(50, title="EMA Length", minval=1, maxval=200)
cumulativePeriod = input(100,  title="cumulative volume Period", minval=1, maxval=200)


riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(8,title="Stop Loss",minval=1)
takePartialProfits=input(false, title="take partial profits  (percentage same as stop loss)")

tradeDirection=input(title="Trade Direction", defval="LONG", options=["LONG", "SHORT"])

avgPrice = (high + low + close) / 3
avgPriceVolume = avgPrice * volume

cumulPriceVolume = sum(avgPriceVolume, cumulativePeriod)
cumulVolume = sum(volume, cumulativePeriod)

vwapValue = cumulPriceVolume / cumulVolume

emaVal=ema(close, emaLength)

plot(emaVal, title="EMA", color=color.green,  transp=25)
plot(vwapValue, title="Cumulate Volumne / VWAP", color=color.orange,  linewidth=2, transp=25)

bgcolor(emaVal>vwapValue?color.blue:color.purple)    

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1

strategy.entry(id="LE",comment="LE", long=true, qty=qty1, when=crossover(emaVal, vwapValue)  and (tradeDirection=="LONG") )    //emaVal>vwapValue and crossover(close , emaVal)

//stoploss
stopLossVal=  strategy.position_size>=1 ?  (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00

//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr,  linewidth = 2, title = "stop loss")

//partial exits
takeProfit=  strategy.position_size>=1 ?  (strategy.position_avg_price * (1+(stopLoss*0.01) )) : ( close[1] * 2 )
if(takePartialProfits==true)
    strategy.close(id="LE", comment="Partial"+tostring(close-strategy.position_avg_price, "###.##") , qty=strategy.position_size/3 , when = (tradeDirection=="LONG" ) and close>takeProfit and crossunder(close, emaVal) )    //close<close[1] and close[1]<close[2] and close[2]<close[3])
    
strategy.close(id="LE" , comment="LE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossunder(emaVal, vwapValue) and (tradeDirection=="LONG") )

strategy.close(id="LE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= close < stopLossVal   and (tradeDirection=="LONG") )


//for short  you dont have to wait crossodown of ema, falling is speed , so just check if close crossing down vwapVal
strategy.entry(id="SE",comment="SE", long=false, qty=qty1, when=(close<vwapValue and close<open  and close[1] < vwapValue  and close[1]<open[1] and close<close[1])  and emaVal>=vwapValue and (tradeDirection=="SHORT") )    //emaVal>vwapValue and crossover(close , emaVal)

//stoploss
stopLossValUpside=  abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ?  (strategy.position_avg_price * (1+(stopLoss*0.01) )) : 0.00

//draw initil stop loss
plot(abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? stopLossValUpside : na, color = color.purple , style=plot.style_linebr,  linewidth = 2, title = "stop loss")

//partial exits
shortTakeProfit=  abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ?  (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00
if(takePartialProfits==true)
    strategy.close(id="SE", comment="Partial" , qty=strategy.position_size/3 , when = (tradeDirection=="SHORT"   ) and  close<shortTakeProfit )  //close<takeProfit and (emaVal - close)>8 )
  
//strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossover(emaVal, vwapValue) and (tradeDirection=="SHORT") )
strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and ( (emaVal<vwapValue and close>vwapValue and open>vwapValue and close>open )   or (crossover(emaVal,vwapValue))  ) and (tradeDirection=="SHORT") )

strategy.close(id="SE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and  close > stopLossValUpside   and (tradeDirection=="SHORT"   ) )