ZVWAP戦略は,VWAPからのZ距離に基づいている

作者: リン・ハーンチャオチャン開催日:2023年11月10日 12:02:19
タグ:

img

概要

この戦略は,LazyBearによるVWAP指標からのZ距離に基づいています.価格とVWAPの間のZ距離を使用して,過剰購入および過剰販売条件,入口および出口を決定します.この戦略は,EMAラインとZ距離を0レベルを越えていくつかのノイズをフィルタリングします.

戦略の論理

  1. VWAP 値を計算する
  2. 価格とVWAPの間のZ距離を計算する
  3. 超買い線 (2.5) と超売線 (-0.5) を設定する
  4. 速 EMA > 緩い EMA,Z距離 < 過売線,Z距離が0を超えるとロング
  5. Z距離 > 過買いラインで閉じるポジション
  6. ストップ・ロスの論理を組み込む

主要機能:

  • calc_zvwap: 価格とVWAPとの間のZ距離を計算する
  • VWAP 値: vwap ((hlc3)
  • 快速EMA: ema (近,快速EMA)
  • EMAが遅い (EMAが遅い)

利点分析

  1. Z-distance は,直感的に買い過ぎ/売過ぎのレベルを示します.
  2. EMAは偽のブレイクをフィルタリングする
  3. ピラミッド構築がトレンドを活用できるようにします
  4. リスク制御のためのストップ・ロスト・ロジックがある

リスク分析

  1. 線,EMA期間のようなパラメータが正しく設定されていることを確認する必要があります
  2. Z距離指示が遅れて,重要なターニングポイントを見逃す可能性があります
  3. ピラミッド型投資は 傾向が逆転すれば 損失を増やす可能性があります
  4. ストップ・ロスは合理的に設定する必要があります.

解決策:

  1. バックテストによるパラメータの最適化
  2. フィルター信号に他の指標を追加する
  3. ピラミッド建設のための適切な条件を設定する
  4. ダイナミックストップ損失を使用する

オプティマイゼーションの方向性

  1. EMA 期間を最適化する
  2. 過剰購入/過剰販売の異なる基準をテストする
  3. 騒音フィルターに他の指標を追加
  4. ストップ・ロスの異なるテクニックをテストする
  5. 入力,ピラミッド化,ストップ損失の論理を最適化

概要

この戦略は,価格-VWAP関係を決定するためにZ距離を使用し,トレンド機会を捕捉することを目的として,EMAをシグナルにフィルターに追加する.トレンドをフォローするためにピラミディングを可能にし,リスクを制御するためにストップロスを有する.最適化および他の指標を追加することで強度が向上する.しかし,最適化中にZ距離の遅れの問題は考慮されるべきである.全体的に,これはシンプルで明確な論理を持つトレンドフォローする戦略である.完全に最適化されると,トレンドをトレードする効率的なツールになることができる.


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

もっと