ZVWAP-Strategie basierend auf Z-Distanz von VWAP

Schriftsteller:ChaoZhang, Datum: 2023-11-10 12:02:19
Tags:

img

Übersicht

Diese Strategie basiert auf der Z-Distanz vom VWAP-Indikator von LazyBear. Sie verwendet die Z-Distanz zwischen Preis und VWAP, um überkaufte und überverkaufte Bedingungen sowie Ein- und Ausgänge zu bestimmen.

Strategie Logik

  1. Berechnung des VWAP-Wertes
  2. Berechnung der Z-Distanz zwischen Preis und VWAP
  3. Überkaufte Linie (2.5) und Überverkaufte Linie (-0.5)
  4. Gehen Sie lang, wenn der schnelle EMA > der langsame EMA, die Z-Distanz < Überverkauft-Linie und die Z-Distanz über 0 liegen
  5. Schließungsposition bei Z-Distanz > überkaufte Linie
  6. Einbeziehung von Stop-Loss-Logik

Schlüsselfunktionen:

  • calc_zvwap: Berechnen Sie die Z-Distanz zwischen Preis und VWAP
  • VWAP-Wert: vwap ((hlc3)
  • Schnelle EMA: ema (nahe, schnelle EMA)
  • Langsamer Wechselkurs: ema (nahe, langsamer Wechselkurs)

Analyse der Vorteile

  1. Z-Distanz zeigt intuitiv überkaufte/überverkaufte Werte an
  2. EMA filtert falsche Ausbrüche aus
  3. Ermöglicht es, von Trends zu profitieren
  4. Ein Stop-Loss-Logik zur Risikokontrolle

Risikoanalyse

  1. Notwendigkeit, um sicherzustellen, dass Parameter wie Linien, EMA-Perioden ordnungsgemäß eingestellt sind
  2. Z-Distanz-Anzeiger verzögert, kann wichtige Wendepunkte verpassen
  3. Pyramiden können Verluste erhöhen, wenn sich der Trend umkehrt
  4. Stop-Loss muss vernünftig eingestellt werden

Lösungen:

  1. Optimierung der Parameter durch Backtesting
  2. Hinzufügen anderer Indikatoren zu Filtersignalen
  3. Die richtigen Bedingungen für die Pyramidenbildung schaffen
  4. Dynamischer Stop-Loss verwenden

Optimierungsrichtlinien

  1. Optimierung der EMA-Perioden
  2. Verschiedene Kriterien für Überkauf/Überverkauf
  3. Hinzufügen anderer Indikatoren zum Filtern von Lärm
  4. Verschiedene Stop-Loss-Techniken testen
  5. Optimierung der Logik des Einstiegs, der Pyramidenbildung und der Stop-Loss-Logik

Zusammenfassung

Die Strategie verwendet Z-Distanz, um die Preis-VWAP-Beziehung zu bestimmen, und fügt EMA zu Filtersignalen hinzu, mit dem Ziel, Trendchancen zu erfassen. Sie ermöglicht das Pyramidieren, um Trends zu folgen und hat einen Stop-Loss, um das Risiko zu kontrollieren. Optimierung und Hinzufügen anderer Indikatoren können die Robustheit verbessern. Allerdings sollte die Verzögerung des Z-Distanzproblems während der Optimierung berücksichtigt werden. Insgesamt handelt es sich um eine Trend-Folge-Strategie mit einfacher, klarer Logik. Wenn sie vollständig optimiert ist, kann sie ein effizientes Werkzeug für den Handel mit Trends sein.


/*backtest
start: 2022-11-03 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
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
//This is based on Z distance from VWAP by Lazybear
strategy(title="ZVWAP[LB] strategy", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)
length=input(13,"length")

calc_zvwap(pds, source1) =>
	mean = sum(volume*source1,pds)/sum(volume,pds)
	vwapsd = sqrt(sma(pow(source1-mean, 2), pds) )
	(close-mean)/vwapsd


upperTop=2.5  //input(2.5)
upperBottom=2.0  //input(2.0)
lowerTop=-0.5  //input(-0.5)
lowerBottom=-2.0 //input(-2.0)

buyLine=input(-0.5, title="OverSold Line",minval=-2, maxval=3)
sellLine=input(2.0, title="OverBought Line",minval=-2, maxval=3)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)

stopLoss =input(5, title="Stop Loss",minval=1) 

hline(0, title="Middle Line", linestyle=hline.style_dotted, color=color.green)

ul1=plot(upperTop, "OB High")
ul2=plot(upperBottom, "OB Low")
fill(ul1,ul2, color=color.red)
ll1=plot(lowerTop, "OS High")
ll2=plot(lowerBottom, "OS Low")
fill(ll1,ll2, color=color.green)
zvwapVal=calc_zvwap(length,close)
plot(zvwapVal,title="ZVWAP",color=color.purple, linewidth=2)


longEmaVal=ema(close,slowEma)
shortEmaVal=ema(close,fastEma)  

vwapVal=vwap(hlc3)


zvwapDipped=false

for i = 1 to 10
    zvwapDipped := zvwapDipped or zvwapVal[i]<=buyLine

longCondition=  shortEmaVal > longEmaVal  and zvwapDipped and  crossover(zvwapVal,0)

barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ZVWAPLE", long=true,  when= longCondition  and strategy.position_size<1) 


//Add
strategy.entry(id="ZVWAPLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(zvwapVal,0)) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ZVWAPLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss

strategy.close(id="ZVWAPLE",comment="TPExitAll",    qty=strategy.position_size ,   when= crossunder(zvwapVal,sellLine))   //close all      zvwapVal>sellLine

Mehr