線形回帰と移動平均に基づいた回帰取引戦略の傾向

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

img

概要

この戦略は,線形回帰線と移動平均線をベースとした単純なトレンドをフォローする取引システムを設計する. 線形回帰線が移動平均線を横切ると長くなって,線形回帰線が下を横切ると短くなります. 一方,回帰線の傾きを使用して一部の取引信号をフィルタリングし,トレンド方向が一致するときにのみ入力します.

戦略名

逆転トレード戦略に続く傾向

戦略原則

この戦略の主な要素は以下の通りです.

  1. N日間の単純な移動平均値 (SMA) を計算する
  2. 最近のN日間の線形回帰線を計算する
  3. 閉じる価格がSMAを超えて回帰線よりも高くなった場合,ロングに行く
  4. 閉じる価格がSMAを下回り,レグレッションラインを下回るとショート
  5. ストップ・ロスト・価格と 収益価格を設定する

線形回帰線は,最近の期間にトレンド方向によく適合する.それは全体的なトレンド方向を判断するのに役立ちます.価格がSMA線を突破すると,線形回帰線の方向がこのブレイクと一致するかどうかをさらに決定する必要があります. 2つの方向が一致するときにのみ,取引信号が生成されます.これはいくつかの偽ブレイクをフィルタリングすることができます.

また,ストップ・ロスのメカニズムも設定する.価格がストップ・ロスのラインに達すると,ストップ・ロスのラインを閉じます.また,いくつかの利益をロックするために,利益のラインを設定します.

戦略 の 利点

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

  1. トレンドインジケーターとブレイクインジケーターを組み合わせて,偽ブレイクを回避し,信号品質を改善する
  2. トレンドフィルタリングのためにトレンド方向を決定するために線形回帰を使用し,上向きでロングでダウントレンドでショートするだけです
  3. ストップ・ロスを設定し,リスクを制御するために利益を取ります
  4. 明確で分かりやすいルール
  5. 複雑さなく調整するパラメータはわずかです

リスク分析

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

  1. 範囲限定市場では,より多くの間違った取引信号が生成される可能性があります.
  2. 移動平均値と回帰期間の設定は,広範なテストと最適化が必要であり,不適切な設定は戦略のパフォーマンスに影響を与える可能性があります.
  3. ストップ・ロスは,極端な市場状況で破られ,大きな損失をもたらす可能性があります.
  4. 基本的要素を組み合わせることなく,技術指標のみに基づいて

これらのリスクについては,次の側面から最適化することができます:

  1. 戦略を一時停止するか,範囲限定市場でのフィルタリングのために他の指標を使用することを検討する
  2. 最適なパラメータを見つけるため,広範にバックテスト
  3. ストップ・ロスの位置を最適化し,動的に調整する
  4. 経済データと他の基本的な要因を組み合わせる

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

戦略をさらに最適化するための主な側面は以下の通りである.

  1. 他の補助指標を追加して市場状況を判断し,範囲限定期間の取引を避ける
  2. 二重移動平均,三重移動平均などの移動平均を最適化する.
  3. さらに回帰直線の傾斜を分析し,傾斜判断ルールを追加
  4. 動的ストップ・ロスの設定と収益のレベルを設定するために波動性指標を組み込む
  5. パラメータを自動的に最適化するために機械学習方法を活用する

結論

この戦略は,移動平均値のトレンドフォロー機能と線形回帰のトレンド判断能力を統合し,比較的単純なトレンドフォロー取引システムを形成する. 強いトレンド市場では良い結果を達成することができる. 我々はまだパラメータとルールに関する広範なバックテストと最適化,および適切なリスク管理を必要としている. その後,この戦略は安定した投資収益を得ることができるべきである.


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

//@version=4
strategy(title="Regression Trading Strategy", shorttitle="RTS", overlay=true)

// Input parameters
n = input(14, title="SMA Period")
stop_loss_percentage = input(2, title="Stop Loss Percentage")
take_profit_percentage = input(2, title="Take Profit Percentage")

// Calculate the SMA
sma = sma(close, n)

// Linear regression function
linear_regression(src, length) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to length - 1
        sumX := sumX + i
        sumY := sumY + src[i]
        sumXY := sumXY + i * src[i]
        sumX2 := sumX2 + i * i
    slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / length
    line = slope * length + intercept
    line

// Calculate the linear regression
regression_line = linear_regression(close, n)

// Plot the SMA and regression line
plot(sma, title="SMA", color=color.blue)
plot(regression_line, title="Regression Line", color=color.red)

// Trading strategy conditions
long_condition = crossover(close, sma) and close > regression_line
short_condition = crossunder(close, sma) and close < regression_line

// Exit conditions
stop_loss_price = close * (1 - stop_loss_percentage / 100)
take_profit_price = close * (1 + take_profit_percentage / 100)

// Plot entry and exit points on the chart
plotshape(series=long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(series=crossunder(close, stop_loss_price), title="Stop Loss", location=location.abovebar, color=color.red, style=shape.labeldown, text="SL")
plotshape(series=crossover(close, take_profit_price), title="Take Profit", location=location.belowbar, color=color.green, style=shape.labelup, text="TP")

// Strategy orders
strategy.entry("Long", strategy.long, when = long_condition)
strategy.entry("Short", strategy.short, when = short_condition)
strategy.exit("Exit", from_entry = "Long", when = crossover(close, stop_loss_price) or crossover(close, take_profit_price))
strategy.exit("Exit", from_entry = "Short", when = crossunder(close, stop_loss_price) or crossunder(close, take_profit_price))



もっと