逆線形回帰戦略

作者: リン・ハーンチャオチャン開催日:2023年12月29日 17:15:07
タグ:

img

概要

逆線形回帰戦略は,価格変動に基づいた逆回転取引戦略である.これは線形回帰分析と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,ボリンジャー帯,など.

  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")


もっと