ボラティリティトレンド追跡戦略に基づく


作成日: 2024-02-18 10:07:29 最終変更日: 2024-02-18 10:07:29
コピー: 0 クリック数: 538
1
フォロー
1617
フォロワー

ボラティリティトレンド追跡戦略に基づく

概要

この戦略は,価格トレンドとオーバーバイのオーバーセルの状況を判断するためにWaveTrend指標を使用して,RSI指標のフィルター信号と組み合わせて,トレンド追跡方法を採用し,オーバーバイのオーバーセルの位置で逆操作を行う.

戦略原則

この戦略は,価格の傾向の方向を判断するためにWaveTrend指数を使用する.WaveTrend指数は,Rainbow指数に基づいて改善され,Heikin-Ashi平均線と価格の絶対値の間の差を計算することによって価格の傾向の方向を判断する.RSI指数と組み合わせて,超買超売り状況を判断し,取引信号を発信する.

戦略のWaveTrendの公式は以下の通りです.

esa = ema(hlc3, 10) 
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

このうち,esaは計算されたヘイキン・アシ平均線,dはヘイキン・アシ平均線と価格絶対値の差の平均値である。ciは,価格変動の強さを反映するいわゆる適応区間である。wtは,価格傾向の方向を判断する,多空の鍵となる指標である。ciの平均線である。

RSI指標は,超買超売を判断するために使用されます.コードのRSIの計算式は次のとおりです.

rsiup = rma(max(change(close), 0), 14) 
rsidown = rma(-min(change(close), 0), 14) 
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

標準値は0-100で,70以上は超買区,30以下は超売区である.

この2つの指標を組み合わせると,RSIが25を下回ると,WaveTrendが60を下回ると,超売り区で,多値シグナルを行う.RSIが75を下回ると,WaveTrendが60を下回ると,超買い区で,空きシグナルを行う.

優位分析

この戦略の利点は以下の通りです.

  1. WaveTrendの指数は,価格トレンドの方向を正確に判断する.
  2. RSIのフィルタリングは,不必要な取引を回避し,勝率を上げます.
  3. トレンドトラッキングは,価格のトレンドから得られる利潤を最大限に捉えることができます.
  4. 戦略は明確で分かりやすい.パラメータ設定は柔軟で,異なる品種と市場に応じて調整できます.
  5. 戦略の実行はシンプルで,実用化が容易で,フレームワークの最適化も容易である.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. WaveTrendとRSIの指標は,価格の逆転点を逃す可能性があるため,遅滞しています.
  2. フィルタリング条件があるにもかかわらず,地震の際に誤信号が生じる可能性があります.
  3. ストップ・ロスを追跡する戦略は完ぺきで,単一の損失を効果的に制御することはできません.
  4. 品種特性と取引頻度に合理的にマッチするパラメータの設定は非常に重要です.

対策として

  1. 追加判断指標と組み合わせて最適化され,信号の精度が向上する.
  2. 単一損失をコントロールするストップ・ローズ戦略に参加する.
  3. 最適なパラメータの組み合わせを探し,市場の品種に合わせて戦略を調整する.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. 判断指標を入れ替えたり,判断指標を追加したりして,信号の精度を最適化する.例えば,MACD,KDなどの判断指標を追加する.

  2. 異なる取引品種に適したパラメータ設定を最適化します.例えば,平滑周期を調整し,最適なパラメータ組み合わせを探します.

  3. 追跡するストップ戦略に参加し,単一の損失を効果的に制御する.例えば,余剰パーセントストップ,移動ストップなど.

  4. 異なる加仓戦略を考慮する.例えば,原始の固定数量加仓の代わりにマーティンゲル加仓を使用する.

  5. 適応区間のパラメータを最適化し,判断精度を高めるための最適なパラメータを探します.

要約する

この戦略の全体的な考え方は明確で,波動度指標を使用して価格の傾向を判断し,取引信号のノイズを効果的にフィルターする.戦略の最適化スペースは大きく,複数の角度から改善され,戦略をより安定して信頼できるようにすることができる.パラメータ調整によって最適化され,異なる取引品種に適応し,さらなるテストと実地検証に値する.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)

//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()