Stratégie ZVWAP basée sur la distance Z de VWAP

Auteur:ChaoZhang est là., Date: 2023-11-10 à 12h02
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur Z-distance from VWAP de LazyBear. Elle utilise la distance Z entre le prix et le VWAP pour déterminer les conditions de surachat et de survente, ainsi que les entrées et sorties.

La logique de la stratégie

  1. Calcul de la valeur du PPAV
  2. Calculer la distance Z entre le prix et le VWAP
  3. Résultats de l'analyse de l'évolution de la situation
  4. Passer long lorsque l'EMA rapide > l'EMA lente, la distance Z < la ligne de survente et la distance Z dépassent 0
  5. Position close lorsque Z-distance > ligne surachetée
  6. Incorporer une logique de stop loss

Fonctions essentielles:

  • calcul_zvwap: Calculer la distance Z entre le prix et le VWAP
  • La valeur de l'échangeur d'électricité (VWAP): vwap ((hlc3)
  • Rapide EMA: éma (close, rapide EMA)
  • Lente EMA: éma (close, lente EMA)

Analyse des avantages

  1. Z-distance montre intuitivement les niveaux de surachat/survente
  2. L' EMA filtre les fausses évasions
  3. Permet à la pyramide de capitaliser sur les tendances
  4. A une logique de stop loss pour contrôler le risque

Analyse des risques

  1. Besoin de s'assurer que les paramètres tels que les lignes, les périodes EMA sont réglés correctement
  2. Décalage de l'indicateur de distance Z, peut manquer des points de tournant clés
  3. La pyramide peut augmenter les pertes si la tendance s'inverse
  4. Le stop loss doit être réglé de manière raisonnable

Les solutions:

  1. Optimiser les paramètres par le backtesting
  2. Ajouter d'autres indicateurs aux signaux filtrés
  3. Mettre en place les conditions pour la pyramide
  4. Utiliser un stop-loss dynamique

Directions d'optimisation

  1. Optimiser les périodes d'EMA
  2. Testez différents critères de surachat/survente
  3. Ajouter d'autres indicateurs pour filtrer le bruit
  4. Testez différentes techniques de stop loss
  5. Optimiser la logique d'entrée, de pyramide et de stop loss

Résumé

La stratégie utilise la distance Z pour déterminer la relation prix-VWAP et ajoute l'EMA aux signaux de filtrage, dans le but de capturer les opportunités de tendance. Elle permet de suivre les tendances et a un stop loss pour contrôler le risque. L'optimisation et l'ajout d'autres indicateurs peuvent améliorer la robustesse. Cependant, le problème de retard de la distance Z doit être pris en compte lors de l'optimisation.


/*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

Plus de