ストックRSIに基づく量的な取引戦略

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

img

概要

この戦略はStockRSI指標に基づいて開発されています.この戦略は主にStockRSI指標を使用して過買い・過売り状況を判断します.RSI指標と組み合わせて,いくつかの誤った信号をフィルタリングします.StockRSI指標が過買いエリアを示したときにショート,過売りエリアを示したときにロングで利益を上げます.

戦略原則

この戦略は主にStockRSI指標を適用し,市場の過剰購入および過剰販売領域を判断する.StockRSI指標はK線とD線で構成される.K線は,最近の期間におけるRSI価格範囲における現在のRSI値の位置を反映する.D線はK線の移動平均線である.K線がD線を超えると,過剰購入領域であり,ロングポジションを取ることができる.K線がD線を下回ると,過剰販売領域であり,ショートポジションを取ることができる.

戦略は,まず14期間のRSI指標の値を計算し,その後RSI指標にStockRSI指標を適用する.StockRSI指標パラメータは,長さ14で設定され,スムーズKライン期間が3で,スムーズDライン期間が3で設定される.Kラインがユーザー定義オーバーセールエリア (デフォルトは1) を越えると,ロングポジションが取られる.Kラインがユーザー定義オーバーセールエリア (デフォルトは99) 以下の位置に落ちると,ショートポジションが取られる.

さらに,ストップ・ロストとテイク・プロフィートのパラメータは戦略に設定されています.ストップ・ロスはデフォルトで10000です.テイク・プロフィートはデフォルトのトレーリングポイントが300でオフセットが0でトレーリング・ストップを使用します.

利点分析

  1. StochRSI インディケーターを使用して,過剰購入および過剰販売領域を決定することは,単一のRSI インディケーターよりも信頼性が高い.
  2. RSIでシグナルをフィルタリングすることで 偽のブレイクを避ける
  3. リスク制御のためのストップ・ロスト・メカニズムと収益メカニズムを設定する

リスク分析

  1. StochRSIインジケーターは誤った信号がある可能性があります.
  2. 過剰購入と過剰販売パラメータを合理的に設定する必要があります,そうでなければ,それは誤った操作を引き起こすでしょう
  3. ストップ・ロスのポイントが小さすぎると,簡単に罠にかけられる. 利得のポイントが大きすぎると,利得は制限される可能性があります.

上記のリスクでは,より長いサイクルパラメータを設定したり,他の指標と組み合わせて使用することを検討したりして,シグナルをフィルタリングし,異なる市場に適応するために過剰購入および過剰販売パラメータを調整し,異なるストップ損失と利益のパラメータをテストすることができます.

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

  1. MACD,ボリンジャー帯など他の指標と組み合わせて使用すると,誤った信号をフィルタリングすることができます.
  2. 異なるパラメータサイクル設定をテストし,より多くの市場条件に適応する
  3. 最適なパラメータを見つけるために複数のバックテストによって停止損失を最適化し,利益ポイントを取ります

概要

この戦略は,StockRSI指標によって判断される過剰購入および過剰販売領域に基づいて取引する.単一のRSI指標と比較して,StockRSIはKDJのアイデアを組み合わせ,ターニングポイントをより正確に判断することができます.同時に,誤った信号はRSIによってフィルタリングされ,リスクはストップロストと利益を取ることで制御されます.最適化のための余地はまだ大きく,他の指標または最適化されたパラメータ設定と組み合わせることができます.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version= 2
strategy("STOCHRSI JURE", overlay=false)
lengthrsi = input(10)
overSold = input( 1 )
overBought = input(99)

call_trail_stop = input(300)
call_trail_offset = input(0)
call_sl = input(10000)

price = ohlc4
vrsi = rsi(price, lengthrsi)

smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src = input(close, title="RSI Source")

rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)


plot( k, color=blue, linewidth=1, title="K")
plot( d, color=red, linewidth=1, title="D")

if (crossover(k, overSold) ) 
    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND",  comment="BUY")
    strategy.exit("BUY EXIT", "BUY", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)


if (crossunder(k, overBought) ) 
    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", comment="SELL")
    strategy.exit("SELL EXIT", "SELL", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)
    

//if (  ( crossover(k,d)) and ( (vrsi<overSold) or crossover(vrsi,overSold) )  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
//    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="BUY")
//else
//    strategy.cancel(id="BUY")

//if ( ( crossunder(k,d) ) and ( (vrsi >overBought) or crossunder(vrsi,overBought) ) and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 
//    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="SELL")
//else
//    strategy.cancel(id="SELL")
    
    
    

もっと