資源の読み込みに... 荷物...

VWAPとクロスタイムフレーム信号に基づくダイナミックストップ・ロースとテイク・プロフィート戦略

作者: リン・ハーンチャオチャン,日付: 2024-03-08 17:37:21
タグ:

img

概要

この戦略は,日々のタイムフレームからVWAP (Volume Weighted Average Price) をトレードに入る,離脱するシグナルとして使用する. 閉じる価格がVWAPを超えると,前キャンドル値の低さでストップ損失を設定し,目標価格がエントリー価格より3ポイント高い状態でロングエントリを誘発する.逆に,閉じる価格がVWAPを下回ると,前キャンドル値の高さでストップ損失を設定し,目標価格がエントリー価格より3ポイント低い状態でショートエントリを誘発する.この戦略には出口条件が含まれていないため,反対信号が発生するまでトレードが開放される.

戦略原則

  1. 日々のタイムフレームからVWAPデータを取得し,トレンド決定と取引信号の基礎として使用します.
  2. 現在の閉じる価格が VWAP の上/下を横切るかどうかを決定し,それぞれロングとショートエントリを誘発する.
  3. 長いエントリでは,前のキャンドルの低値がVWAP以下である場合は,ストップ損失として使用されます.そうでなければ,VWAP自体を使用します.
  4. ポジションに入ると 3ポイントの固定得益レベルを設定します
  5. 逆信号がポジションを閉じて 新しいポジションを開くまで 戦略は実行し続けます

傾向を特定するためにクロスタイムフレームのVWAPデータを利用し,動的ストップ損失と固定ポイントの利益を引き上げを活用することで,戦略は動向市場を効果的に把握し,引き下げリスクを制御し,利益を間に合うように固定することができます.

利点分析

  1. 単純性と有効性: 戦略の論理は明確で,トレンド決定とシグナルトリガーのためにVWAP指標のみを使用し,実装と最適化が簡単になります.
  2. ダイナミックストップ損失:前回のキャンドルの高値または低値に基づいてストップ損失を設定することで,戦略は市場の変動により良く適応し,リスクを軽減します.
  3. 定額 利得: 定額 の 価格 を 定額 の 値 で 設定 する こと は,利得 を 迅速 に 確保 し,利得 の 侵食 を 避ける こと に 役立ち ます.
  4. タイムリーストップ・ロスト・アンド・テイク・プロフィート: 戦略は,逆信号が誘発されたときにすぐにポジションを閉鎖し,既存の利益に対する追加の損失を防止します.また,新しいトレンド動きを把握するための新しいポジションを開きます.

リスク分析

  1. パラメータ最適化: 戦略は,実際の取引のための最適なパラメータを選択するために,異なる楽器と市場特性に基づいて最適化を必要とするかもしれない利益を得るために固定3ポイントを使用します.
  2. 不安定な市場: 不安定な市場環境下では,頻繁に入場と出口が取引コストを高くし,収益性に影響を与える可能性があります.
  3. トレンド持続性: 戦略は,トレンド市場に依存する.市場が範囲に限定されている場合,またはトレンド持続性が欠けている場合,より多くの取引信号が生成され,より多くのリスクが導入される可能性があります.

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

  1. トレンドフィルタリング: 動向平均値,MACDなどの他のトレンド指標を組み込み,トレンドを確認し,信号の信頼性を向上させる.
  2. ダイナミック・テイク・プロフィート: 市場の変動,ATR,または他の指標に基づいてダイナミックな方法でテイク・プロフィートポイントを調整し,市場の状況により良く適応します.
  3. ポジションサイズ: 口座サイズ,リスクトレランス,その他の要因に基づいて,それぞれの取引のポジションサイズを動的に調整します.
  4. 取引セッションの選択: 戦略の効率性を向上させるために, 取引セッションの特徴と流動性に基づいて最適な取引セッションを選択する.

概要

この戦略は,動的ストップ損失と固定ポイントの取利益を使用してリスクを制御し利益をロックする一方で,トレンド決定とシグナルトリガーのためにクロスタイムフレームVWAPデータを活用する.これはシンプルで効果的な定量的な取引戦略である.トレンドフィルタリング,動的取利益,ポジションサイズ化,取引セッション選択の最適化により,戦略の強度と利益の可能性をさらに高めることができる.しかし,この戦略を実践する際には,より良いパフォーマンス戦略を達成するために,市場の特徴,取引コスト,パラメータ最適化に注意を払うべきである.


/*backtest
start: 2024-03-06 00:00:00
end: 2024-03-07 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=1000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)
// fastEMA = ta.ema(close, 24)
// slowEMA = ta.ema(close, 200)
// Higher Time Frame
float sl = na
float tgt = na
posSize = 1
vwap_1d = request.security(syminfo.tickerid, "1D", ta.vwap(close))
// plot(vwap_1d)

// To avoid differences on historical and realtime bars, you can use this technique, which only returns a value from the higher timeframe on the bar after it completes:
// indexHighTF = barstate.isrealtime ? 1 : 0
// indexCurrTF = barstate.isrealtime ? 0 : 1
// nonRepaintingVWAP = request.security(syminfo.tickerid, "1D", close[indexHighTF])[indexCurrTF]
// plot(nonRepaintingVWAP, "Non-repainting VWAP")

enterLong = ta.crossover(close, vwap_1d)
exitLong  = ta.crossunder(close, vwap_1d)

enterShort = ta.crossunder(close, vwap_1d)
exitShort  = ta.crossover(close, vwap_1d)

if enterLong
    sl := low[1]>vwap_1d ?low[1]:vwap_1d
    tgt:=close+3
    strategy.entry("EL", strategy.long, qty=posSize)
    strategy.exit('exitEL', 'EL', stop=sl, limit=tgt)
if enterShort
    sl := high[1]<vwap_1d ?high[1]:vwap_1d
    tgt := close-3
    strategy.entry("ES", strategy.short, qty=posSize)
    strategy.exit('exitES', 'ES', stop=sl, limit=tgt)

// if exitLong
//     strategy.close("EL")
// if exitShort
//     strategy.close("ES")





// goLongCondition1 = ta.crossover(close, vwap_1d)
// timePeriod = time >= timestamp(syminfo.timezone, 2021, 01, 01, 0, 0)
// notInTrade = strategy.position_size <= 0
// if goLongCondition1 and timePeriod and notInTrade
//     stopLoss = low[1]
//     takeProfit = close+3
//     strategy.entry('long', strategy.long)
//     strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
plot(close, color=color.new(#00c510, 0))
plot(vwap_1d, color=color.new(#f05619, 0))
plot(sl, color=color.new(#fbff00, 0))
plot(tgt, color=color.new(#00e1ff, 0))

もっと