線形回帰RSIに基づく定量的な取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-24 11:35:19
タグ:

img

概要

この戦略は,線形回帰RSI指標に基づいて設計されています. 線形回帰RSIとEMAのクロスオーバーを計算することによって,購入・売却信号を生成します. また,必要に応じて選択できる購入論理の2つのオプションも提供しています.

戦略の論理

この戦略は,まず200期間の線形回帰を計算し,その後,線形回帰結果に基づいて21期間のRSIを計算する.その後,50期間のEMAが計算される.RSIがEMAを超えると,購入信号が生成される.RSIがEMAを下回ると,ポジションを閉じるために販売信号が誘発される.

この戦略は,2種類の購入論理を提供しています.

  1. RSI が EMA を超えると購入する
  2. RSI が EMA よりも高く,過買い線よりも高くなったときに購入する.

適切な購入ロジックは市場状況に基づいて選択できます.

利点分析

この戦略は,線形回帰RSIとEMAの両方の強みを組み合わせ,価格ノイズの一部を効果的にフィルタリングし,より信頼性の高い取引信号を生成します.

線形回帰RSIはトレンドをよりよく把握し,EMAはターニングポイントを特定するのに役立ちます.両者の組み合わせはトレンド内の平均逆転機会を見つけることができます.

この戦略は,異なる市場段階に適応するための柔軟性のために,オプションの購入論理を2つ提供している.例えば,最初の論理は強いトレンドで使用できるが,第2の論理は市場範囲に適している.

リスク分析

この戦略の主なリスクは,RSIとEMAの関係が変化し,不正な取引シグナルが生じる可能性があります.

さらに,指標としてのRSIとEMAの遅延性も,転換点を完璧に捉えることができず,エントリーとアウトアウトに一定の遅れを起こす可能性があります.これは,ある程度の実用的なリスクをもたらします.

リスクを軽減するために,RSIとEMAの長さのようなパラメータは,両者の間のより良い調整のために最適化されることがあります.また,単一の取引での損失を制限するために適切なポジションサイズ化が必要です.

改善 の 方向

戦略は以下の側面から改善できます.

  1. 最適なパラメータ組み合わせを見つけるために線形回帰RSIとEMAの長さを最適化
  2. 信号の品質向上のためにMACD,ボリンジャー帯など他の指標を追加
  3. ポジションのサイズを調整するために波動性指標を組み込む
  4. マシン学習技術を活用してパラメータを自動的に最適化

結論

この戦略は,線形回帰RSIとEMAに基づいて平均逆転戦略を設計し,RSI-EMAの交差を見て範囲内の逆転機会を特定する.また,異なる市場に適応するための柔軟性のために2つのオプションの購入論理を提供します.全体的に,複数の指標を組み合わせることで,戦略は効果的に逆転の可能性を発見することができます.パラメータチューニングと追加のフィルターにより,より良いパフォーマンスの可能性があります.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Linear RSI")

startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end   = timestamp(input(9999, "End Year"),   input(1, "Month"),   input(1, "Day"),   0, 0)
_testPeriod() => true

//inputs
length = input(defval=200, minval=1, title="LR length")
length2 = input(defval=21, minval=1, title="RSI length")
ema_fast = input(defval=50, minval=1, title="EMA")
lag = 0

overBought = input(50)
overSold = input(50)


//rsi
src = close
Lr = linreg(src, length, lag)
rsi = rsi(Lr, length2)
ema = ema(rsi, ema_fast)

plot(rsi, color = rsi > overBought ? color.green : rsi < overSold ? color.red : color.silver)
plot(overBought, color=color.purple)
plot(overSold, color=color.purple)
plot(ema, color=color.blue)

first_type = input(true, title="Use first logic?")
second_type =  input(false, title="Use second logic?")

long_condition = (first_type ? crossover(rsi, ema) and _testPeriod() : false) or (second_type ? rsi > ema and rsi > overBought and _testPeriod() : false)
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition = crossunder(rsi, ema)
strategy.close('BUY', when=short_condition)

もっと