逆線形回帰戦略


作成日: 2023-12-29 17:15:07 最終変更日: 2023-12-29 17:15:07
コピー: 2 クリック数: 722
1
フォロー
1621
フォロワー

逆線形回帰戦略

概要

リバース・リベレーション・ストラテジーとは,価格変動に基づくリベレーション・ストラテジーである.リベレーション・ストラテジーとは,リベレーション・ストラテジーとAVERAGE TRUE RANGEの組み合わせで,K線が連続して上昇するか,K線が連続して低下する条件を設定し,リベレーション・ストラテジーが価格の反転を判断したときにリベレーション・ストラテジーを行うものである.

戦略原則

この戦略は,最初に出力回帰の斜率を計算する. 線形回帰の斜率が0より大きいときは,価格が上昇傾向にあることを示し,0より小さいときは,価格が下降傾向にあることを示します. また,最後のK線の閉店価格と開店価格の対比を組み合わせて,最後のK線の上昇または下落を判断します. 線形回帰の斜率が0より大きく,最後のK線の閉店価格が開店価格より低い場合は,買入シグナルを生成します. 線形回帰の斜率が0より小さい場合,そして最後のK線の閉店価格が開店価格より高い場合は,売り出力を発生します.

連続上昇K線数と連続下降K線数を設定することで取引頻度を制御できます. 連続上昇K線が設定数に達すると判断すると,線形回帰斜率が0未満の場合で売り出し信号が生じ,高点の近くで反転取引を実現します. 連続下降K線が設定数に達すると判断すると,線形回帰斜率が0以上で低点の近くで反転取引を実現します.

優位分析

この戦略は,トレンドと反転取引を組み合わせ,重要なポイントの近くで反転操作を行うことができ,価格調整後の優位性を獲得する. 線形回帰分析は,価格の全体的な傾向を判断する手段を提供し,価格が上昇または下落が継続しているときに反転を空にするか,または多めにすることを避ける. 連続したK線条件は,取引の頻度を制御し,重要な反転ポイントの近くで操作する.

単純な逆転戦略と比較して,この戦略は複数の技術指標を組み合わせて,取引のタイミングをより正確に制御し,偽の突破のリスクを効果的に回避し,利益の確率を向上させることができる.

リスク分析

この戦略は,主に逆転の失敗のリスクに直面している.価格逆転の信号が判断された後,価格が元のトレンドを継続すると判断されれば,損失が生じます.また,線形回帰分析とATR指標のパラメータ設定も,戦略の利益に影響を与えます.

単一損失は,ストップ・ローズによって制御できます.市場の変動の頻度を合理的に評価し,連続したK線数を適切に調整し,取引の頻度を低下させます.線形回帰周期パラメータとATRパラメータを最適化して,異なる品種の特性に合わせます.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 他の技術指標の判断を追加し,異なる時間周期指標と組み合わせて判断の正確性を向上させる.例えば,MACD,Bollinger Bandなどに加える.

  2. 機械学習の要素を追加し,アルゴリズムでパラメータを自動的に最適化し,取引ルールを動的に調整する.

  3. 資金管理,ストップ・ロズ戦略などのリスク管理メカニズムに参加し,取引リスクを制御する.

  4. ポートフォリオを最適化して,戦略を他の非関連戦略のポートフォリオと組み合わせ,全体的な撤退を軽減し,安定性を向上させる.

  5. より多くの品種に拡張し,異なる品種のパラメータ設定を評価し,戦略をより普遍的にします.

要約する

逆行線形回帰戦略は,複数の技術指標を統合し,価格逆転のタイミングを判断する時に逆行操作を行う,効果的な逆行取引戦略である.この戦略は,パラメータ最適化とリスク管理の強化によって,利益の余地をさらに拡大することができ,大きな改善の可能性があります.典型的な逆行戦略の考え方として,それは私たちに貴重な参考を提供します.

ストラテジーソースコード
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Reverse Up/Down Strategy", currency=currency.USD, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100,overlay=true)

//User Options
consecutiveBarsUp   = input(title="Sell after how many bars up?",   type=input.integer, minval=1, defval=1)
consecutiveBarsDown = input(title="Buy after how many bars down?",  type=input.integer, minval=1, defval=1)
atrLength           = input(title="ATR Length",                     type=input.integer, minval=1, defval=14)
atrMult             = input(title="ATR Multiplier",                 type=input.float,   minval=0.1, defval=2.33)

//ATR Channel
adjustedATR     = sma(atr(atrLength),atrLength) * atrMult
longATR         = low - adjustedATR
shortATR        = high + adjustedATR
plot(shortATR,  title="Short ATR",  color=color.red)
plot(longATR,   title="Long ATR",   color=color.lime)


// This is the true linear regression slope rather than an approximation given by numerical differentiation
src = hlc3
len = input(defval=14, minval=1, title="Slope Length")
lrc = linreg(src, len, 0)
lrc1 = linreg(src, len,1)
lrs = (lrc-lrc1)

//Check if last candle was up or down
priceOpen = open
priceClose = close
longCondition = priceOpen > priceClose
shortCondition = priceOpen < priceClose
ups = 0.0
dns = 0.0

ups := shortCondition ? nz(ups[1]) + 1 : 0
dns := longCondition ? nz(dns[1]) + 1 : 0

if (shortCondition)
    strategy.close("buy", qty_percent=100, comment="Close")
    if (ups >= consecutiveBarsUp and lrs <= 0)
    	strategy.entry("sell", strategy.short, comment="Sell")
    	

if (longCondition)
    strategy.close("sell", qty_percent=100, comment="Close")
    if (dns >= consecutiveBarsDown and lrs >= 0)
	    strategy.entry("buy", strategy.long, comment = "Buy")