二重線形回帰トレンドフォロー戦略


作成日: 2023-11-17 16:51:33 最終変更日: 2023-11-17 16:51:33
コピー: 0 クリック数: 616
1
フォロー
1617
フォロワー

二重線形回帰トレンドフォロー戦略

概要

双線回帰トレンド追跡策は,急速な線形回帰と遅い線形回帰の差値を使用して価格のトレンドを判断し,入場信号として使用する. 急速な線形回帰が上限を突破するときに多行し,下限を突破するときに平行する. また,この策は,EMAをフィルター条件として使用し,価格がEMAより高い場合にのみ入場する.

戦略原則

この戦略は,まず,2つの異なる周期の線形回帰曲線を計算する.一つは,短周期の急速な線形回帰,もう一つは,長い周期の遅い線形回帰である.そして,2つの線形回帰の差を計算する. 急速な線形回帰が遅い線形回帰より高いとき,差は0より大きく,価格は上昇傾向にあることを示す. 急速な線形回帰が遅い線形回帰より低いとき,差は0より小さく,価格は下降傾向にあることを示す.

策略は,差値線が門限を横切るのを買入信号として,差値線が門限を横切るのを平仓信号として使用する.同時に,価格が200サイクル以上のEMAを要求する.これは非トレンドの動きをフィルターするためにである.

優位分析

  1. 双線回帰を用いて価格の傾向を捉え,反測する方が効果的です.

  2. EMAフィルターを追加し,非トレンドの部分をフィルターし,誤った信号を回避します.

  3. 戦略の論理はシンプルで明快で,理解し,実行しやすい.

リスク分析

  1. 線形回帰周期の設定が不適切で,大量のノイズ信号が生成される可能性がある.

  2. 強いトレンドの状況では,EMAフィルタがいくつかのチャンスを逃す可能性があります.

  3. 金融危機の状況では 取引が頻繁になり 損失が起こりやすい.

解決策は

  1. 線形回帰周期パラメータを最適化し,ノイズを低減する.

  2. EMA周期は市場状況に応じて動的に調整できます.

  3. 損失を抑えるため,ストップを増加させる.

戦略の最適化

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

  1. 速行回帰と遅行回帰の周期パラメータを最適化して,最適なパラメータ組み合わせを見つける.

  2. EMAの代わりに,ブリン・テープ,KDJなどの他のフィルタリング指標を試して,戦略の効果を向上させることができるか見てみましょう.

  3. 動的ストップを増加させることで,リスクをコントロールし,損失の拡大を防ぐ.

  4. 株の選択メカニズムと組み合わせて,トレンドが強い株を選んで取引する.

  5. 開発パラメータ自主適応機能,市場状況に応じてパラメータを自動的に調整する.

要約する

双線性回帰トレンド追跡戦略は,全体的に比較してシンプルで直接的なもので,双線性回帰差値を使用して価格トレンドを判断し,EMAをフィルタリング指標として使用することで,トレンド状況を効果的に追跡することができる.しかし,この戦略には一定のリスクがあり,パラメータ最適化,止損制御などの側面に注意する必要があり,戦略の最大効果を発揮することができる.

ストラテジーソースコード
/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradingAmmo

//@version=4
strategy("Linear trend", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
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() =>
    iff(time >= startP and time <= end, true, false)

src = close
len1 = input(defval=13, minval=1, title="Fast LR")
len2 = input(defval=55, minval=1, title="Slow LR")

lag1 = input(0, title="Lag for fast")
lag2 = input(0, title="Lag for slow")

threshold  = input(0,step=0.5, title="Threshold")

fast_lr = linreg(src, len1, lag1)
slow_lr = linreg(src, len2, lag2)
lr = fast_lr - slow_lr
plot_fast = plot(lr, color = lr > 0 ? color.green : color.red)
plot(threshold, color=color.purple)

long_condition = crossover(lr, threshold) and close > ema(close, 200) and _testPeriod()
strategy.entry('BUY', strategy.long, when=long_condition) 

short_condition = crossunder(lr, threshold) 
strategy.close('BUY', when=short_condition)