線形回帰と移動平均に基づくトレンドフォロー取引戦略


作成日: 2023-12-18 17:34:29 最終変更日: 2023-12-18 17:34:29
コピー: 4 クリック数: 892
1
フォロー
1621
フォロワー

線形回帰と移動平均に基づくトレンドフォロー取引戦略

概要

この戦略は,線形回帰線と移動平均をベースにシンプルなトレンド追跡取引システムを設計した.線形回帰線上を移動平均を横切るときは多し,線形回帰線下を移動平均を横切るときは空にする.線形回帰線の斜率を組み合わせて,トレンド信号の一部をフィルターし,トレンド方向が合っている場合にのみ入場する.

戦略名

トレンドフォローリグレッショントレーディング戦略

戦略原則

この戦略には以下の重要な要素が含まれています.

  1. N日間のSMAを計算する
  2. 線形回帰線を計算する
  3. SMA線を越え,リターン線より上を走る
  4. 閉店価格がSMA線を横切って回帰線を下回ったときに空白
  5. ストップとストップアップを設定する

線形回帰線は,最近のトレンドの方向にうまく適合する.これは,全体的なトレンドの方向を判断するのに役立つ.価格がSMA線を破るとき,線形回帰線の方向がこの突破と一致するかどうかをさらに判断する必要があります.両者の方向が一致するときにのみ,取引信号が生成されます.これは,部分的な偽突破をフィルターすることができます.

さらに,ストップ・ロスの仕組みも設定されている. 価格がストップ・ロスのラインに触れたとき,平仓のストップ・ロスが設定されている. また,ストップ・ストップ・ラインも設定され,利益の一部をロックしている.

戦略的優位性

この戦略の利点は以下の通りです.

  1. トレンド指標とブレークスルー指標を組み合わせて,偽ブレークスを回避し,信号の質を向上させる
  2. 線形回帰を使用してトレンドの方向を判断し,トレンドフィルターを実行し,トレンドが上昇するときにのみ多めに実行し,トレンドが低下するときに空白にします.
  3. リスク管理のためのストープ・ストップ・メカニズム
  4. 規則は明確でわかりやすく,実行可能
  5. 単にいくつかのパラメータを調整するだけで 複雑にはならない

リスク分析

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

  1. 金融危機の状況では,誤った取引シグナルが多く発生します.
  2. 移動平均線と回帰周期の設定は,繰り返しテストして最適化する必要があります.誤った設定は,戦略のパフォーマンスを影響する可能性があります.
  3. エクストリーム状態の停止損失は,突破により大きな損失を引き起こす可能性があります.
  4. 基本要素を考慮せずに技術的な指標のみに基づいています.

このリスクに対して,以下のような方法で最適化することができます.

  1. 波動する市場では,一時停止策を考慮するか,他の指標でフィルターする
  2. パラメータを反復テストし,最適なパラメータを見つけます.
  3. オプティマイゼーションと動的にストップポジションを調整する
  4. 経済データなどの基本要素を組み合わせて

最適化の方向

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

  1. 市場状況を判断する他の補助指標を追加し,波動的な状況での取引を避ける
  2. 移動平均のタイプを最適化します.例えば,2移動平均,3移動平均などの組み合わせ
  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))