TRSI と SUPER 傾向指標に基づく定量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月15日16時05分51秒
タグ:

img

概要

この戦略は,相対強度指数 (TRSI) とスーパートレンド指標を組み合わせて,比較的完全な定量的な取引戦略を形成する.これは主に中長期トレンドを把握するために使用され,ノイズ取引信号をフィルタリングするために短期指標を使用する.

戦略の論理

  1. TRSI指標を計算し,市場が過買い・過売り状態にあるかどうかを判断し,買い・売るシグナルを発行する.
  2. 騒音信号をフィルタリングし,基礎トレンドを確認するためにスーパートレンド指標を使用
  3. 利潤のポジションの異なる段階でストップ・ロスを設定し,収益ポイントを取ります.

戦略は,まずTRSI指標を計算し,市場が過剰購入または過剰販売ゾーンに入ったかどうかを判断し,次にスーパートレンド指標を計算し,主要なトレンド方向を決定する.取引シグナルは両方を組み合わせて発行される.ストップ損失と収益ポイントは,収益性の異なる段階で異なる割合の資金を引き出すために設定される.

利点分析

この戦略には以下の利点があります.

  1. 複数のインディケーターの組み合わせにより信号の精度が向上します TRSIはタイミングを決定し,スーパートレンドは方向をフィルターします.
  2. 中期および長期間のトレンド取引に適用されます.過買い過売のシグナルはトレンド逆転を形成する傾向があります.
  3. ストップ・ロストとテイク・プロフィートの設定は合理的で,リスクを効果的にコントロールするために,収益性の異なる段階で異なる割合の資金を引き出す.

リスク分析

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

  1. 中期から長期間の取引は短期間の取引機会を把握できていない.
  2. TRSI パラメータの設定が正しくない場合,買い過ぎや売り過ぎのゾーンが見逃される可能性があります.
  3. スーパートレンドパラメータの設定が不適切であれば 間違った信号が出る可能性があります
  4. 過剰に大きなストップ・ロスはリスクを効果的に制御できない.

これらのリスクに対処するために,次の側面から最適化することができます:

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

  1. より多くの取引機会を特定するために より多くの短期指標を組み込む.
  2. TRSI パラメータを調整して 誤差を絞る
  3. スーパートレンドパラメータをテストして最適化します
  4. フローティングストップ損失を設定して ストップ損失線をリアルタイムで追跡します

概要

この戦略は,TRSIやスーパートレンドなどの複数の指標を統合し,比較的完全な定量的な取引戦略を形成する.ストップ損失を設定し,リスクを制御するために利益を得ながら,中長期のトレンドを効果的に特定することができます. 優化のための余地はまだ多く,信号の正確性を向上させ,より多くの取引機会を特定するなどの分野では後続的な改善が可能です. 全体的に,これは定量的な戦略のための良い出発点です.


/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-26 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4
strategy(title = "SuperTREX strategy", overlay = true)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
length = input( 14 )
overSold = input( 35 )
overBought = input( 70 )
HTF = input("W", type=input.resolution)
ti = change( time(HTF) ) != 0
p = fixnan( ti ? close : na )

vrsi = rsi(p, length)
price = close
var bool long = na
var bool short = na

long :=crossover(vrsi,overSold) 
short := crossunder(vrsi,overBought)

var float last_open_long = na
var float last_open_short = na

last_open_long := long ? close : nz(last_open_long[1])
last_open_short := short ? close : nz(last_open_short[1])


entry_value =last_open_long
entry_value1=last_open_short

xy=(entry_value+entry_value)/2

// INPUTS //
st_mult   = input(4,   title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = 'SuperTrend Period',     minval = 1)

// CALCULATIONS //
up_lev =xy - (st_mult * atr(st_period))
dn_lev =xy + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := entry_value[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := entry_value1[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend ==1 ? up_trend : down_trend
plot(xy,color = trend == 1 ? color.green : color.red)

buy=crossover( close, st_line) 
sell1=crossunder(close, st_line) 
 


buy1=buy
//

sell=sell1


// STRATEGY

plotshape(buy , title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon
// Take profit

//
l = buy 
s1=sell 
if l 
    strategy.entry("buy", strategy.long)
if s1 
    strategy.entry("sell", strategy.short)
per(pcnt) =>  strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss=input(title=" stop loss", defval=25, minval=0.01)
los = per(stoploss)
q1=input(title=" qty_percent1", defval=25, minval=1)
q2=input(title=" qty_percent2", defval=25, minval=1)
q3=input(title=" qty_percent3", defval=25, minval=1)
tp1=input(title=" Take profit1", defval=2, minval=0.01)
tp2=input(title=" Take profit2", defval=4, minval=0.01)
tp3=input(title=" Take profit3", defval=6, minval=0.01)
tp4=input(title=" Take profit4", defval=8, minval=0.01)
strategy.exit("x1", qty_percent = q1, profit = per(tp1), loss = los)
strategy.exit("x2", qty_percent = q2, profit = per(tp2), loss = los)
strategy.exit("x3", qty_percent = q3, profit = per(tp3), loss = los)
strategy.exit("x4", profit = per(tp4), loss = los)


もっと