波動帯とVWAP 多期期間の株式トレンド取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-17 16時34分23秒
タグ:

img

この戦略は,価格のATR波動性を計算し,異なる期間のVWAPを組み合わせて,株のトレンド取引のロングエントリーと終了条件を設定します.

戦略の概要

この戦略は,主に株式製品のトレンド追跡に使用される.ATR波動性を計算し,異なる期間のVWAP価格を組み合わせることで,トレンドを判断し追跡するために購入および販売条件を設定する.この戦略は,長期と短期の間を切り替えるのに十分な柔軟性があり,中期と長期のトレンドを把握するのに適しています.

戦略の論理

この戦略は,価格変動を計算するためにATR指標を使用し,価格が変動チャネルを突破するかどうかに基づいてトレンド方向を判断する.同時に,長期および短期トレンドの一貫性を決定するために異なるサイクルのVWAP価格を導入する.具体的な論理は以下のとおりである:

  1. 価格のATR変動チャネルを計算する
  2. 価格が波動チャネルを突破するかどうかを判断する
    1. 上部レールを突破すると上昇傾向を示します.
    2. 下線を突破すると下落傾向を示します.
  3. 毎週と毎日VWAP価格を導入する
    1. 価格が上方波動性レールを突破すると,日時と週間のVWAPが価格を超えると,ロング信号が生成されます.
    2. 価格が低波動性レールを突破すると,日時と週間のVWAPが価格を下回ると,ショート信号が生成されます.

上記は戦略の基本論理である.ATR波動性は短期トレンドを判断し,VWAP価格は長期トレンドを判断する.両者はトレンドの一貫性を決定し,したがって取引信号を生成するために組み合わせられる.

戦略 の 利点

  • ATRとVWAPの組み合わせを使用して傾向を判断し,より信頼性があります
  • 戦略の敏感性を調整するための調整可能なATR期間のパラメータ
  • 長期・短期間のトレンド一貫性を決定するための多時間フレームVWAPの導入
  • 長期と短期間の切り替えが柔軟です
  • 中期・長期の株価動向を追跡するのに適しています

リスク と 最適化

  • 統合中により多くの取引を生む可能性があるため,スライドリスクをもたらす.
  • ATRとVWAPパラメータ設定は戦略のパフォーマンスに影響を与え,さまざまな製品に対して注意深くテストする必要があります
  • 単一の取引損失を制御するためにストップ損失を追加することを検討します.
  • MA と他の指標と組み合わせて,エントリーシグナルをフィルタリングし,不必要な取引を減らすことができます.

概要

この戦略は,ATR波動性とVWAPの二重確認を通じて株式トレンド追跡を実現する.パラメータを調整または他の技術指標を組み込むことで最適化する余地が豊富である.全体として,戦略論理は,中長期トレンドを追跡するために明確で堅牢である.


/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © exlux99

//@version=4
strategy(title="VWAP MTF STOCK STRATEGY", overlay=true )

// high^2 / 2 - low^2 -2

h=pow(high,2) / 2
l=pow(low,2) / 2

o=pow(open,2) /2
c=pow(close,2) /2


x=(h+l+o+c) / 4
y= sqrt(x)

source = y
useTrueRange = false
length = input(27, minval=1)
mult = input(0, step=0.1)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

longOnly = true

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

srcX = input(ohlc4)
t = time("W")
start = na(t[1]) or t > t[1]

sumSrc = srcX * volume
sumVol = volume
sumSrc := start ? sumSrc : sumSrc + sumSrc[1]
sumVol := start ? sumVol : sumVol + sumVol[1]

vwapW= sumSrc / sumVol

 
//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
shortCondition = close < vwap and time_cond and (close < vwapW)
longCondition = close > vwap and time_cond and (close > vwapW)

 


if(longOnly and time_cond)
    if (crossLower and close < vwapW )
        strategy.close("long")
    if (crossUpper and close>vwapW)
        strategy.entry("long", strategy.long, stop=bprice)


もっと