Z距離に基づくVWAP戦略


作成日: 2023-11-10 12:02:19 最終変更日: 2023-11-10 12:02:19
コピー: 0 クリック数: 806
1
フォロー
1621
フォロワー

Z距離に基づくVWAP戦略

概要

この策略は,LazyBearのZ距離VWAP指標をベースに,価格とVWAPのZ距離を計算して,超買いか超売れかを判断し,入場出場を行う.この策略はEMA平均線とZ距離戻り0軸の判断を加え,部分的なノイズ信号をフィルターすることができる.

戦略原則

  1. VWAPを計算する
  2. 価格とVWAPのZ距離を計算する
  3. オーバーバイラインを設定します (−2.5) とオーバーセールラインを設定します (−0.5)
  4. 速線が遅線より大きく,Zは超走行線より低い,Zは0軸の上を通る
  5. Zが超買線を超えると平仓
  6. ストップダストロジック

キー関数:

  • calc_zvwap:価格とVWAPのZ距離を計算する
  • VWAP値:vwap (hlc3)
  • 速線:ema ((close,fastEma) について
  • スローライン:ema ((close,slowエマ)

優位分析

  1. 超買超売をZ距離でより直感的に判断する
  2. EMAのフィルターと偽の突破を組み合わせて,偽の突破を避ける
  3. 投資は,投資の流れを活用して利益を得ることができます.
  4. ストップダストロジックで リスクをコントロールできます

リスク分析

  1. パラメータの設定が合理的であることを確認する.例えば,超買超売ライン位置,EMA周期など
  2. Zは指標から遅れているので,重要な買い買いポイントを逃している可能性があります.
  3. 株価上昇を許すのは損失のリスクを高めます
  4. ストップダメージ位置は合理的に設定する必要があります.

解決策は

  1. 回測による最適化パラメータ設定
  2. 追加指標のフィルタリング信号と組み合わせた
  3. 合理的な条件を設定する
  4. 動的に停止位置を調整する

最適化の方向

  1. EMA周期パラメータを最適化する
  2. 超買超売の判断基準をテストする
  3. 信号とノイズをフィルタリングする他の指標を追加
  4. テストする方法は
  5. 入場,加減,停止ロジックを最適化

要約する

この戦略は,Z距離の価格とVWAPの関係を利用し,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