線形回帰と二重移動平均の短期戦略


作成日: 2024-01-26 12:33:14 最終変更日: 2024-01-26 12:33:14
コピー: 0 クリック数: 689
1
フォロー
1617
フォロワー

線形回帰と二重移動平均の短期戦略

概要

この戦略は,線形回帰指数と二次指数移動平均を組み合わせて,ショートライン追跡操作を実現する. この戦略は,価格が上下軌道に突破したときにポジションを空け,価格が再び突破したときに平仓する. 同時に,この戦略は,二次指数移動平均を使用して価格の傾向を判断し,ポジションの補助条件として使用する.

戦略原則

この策略は,主に線形回帰指標によって価格の突破を判断する.線形回帰指標は,線形回帰法を使用して,特定の周期内の最高価格と最低価格に基づいて計算された上下軌道である.価格が上下軌道から突破したり,下下軌道から突破したりするときは,取引信号であると考えます.

さらに,この戦略は,二指数移動平均が中間トレンドを判断することを導入している. 二指数移動平均は,価格の変化により迅速に反応することができる. 上線から下線に突破するときに,この時点で二指数移動平均がすでに価格の上にある場合,現在の下降傾向にあることを示し,この時点で空白ポジションを確立します.

具体的には,戦略は以下の通りです.

  1. 線形回帰を軌道上と軌道下計算
  2. 移動平均を計算する
  3. 価格が上から下を突破し,BIAが価格より高いときに空白ポジションを確立する
  4. 価格が再び上位に突破し,または両指数移動平均より上位に突破すると,空白ポジションを平らにする

優位分析

従来の移動平均などの指標に比べて,この戦略は以下の利点があります.

  1. 線形回帰指標は,価格変化をより早く捉え,倉庫構築信号としてより効果的です.
  2. 双指数移動平均はトレンド判断に敏感で,偽突破を避ける
  3. 双重指標と条件を組み合わせることで,いくつかのノイズをフィルターし,取引をより安定させることができます.

リスク分析

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

  1. 線形回帰指標はパラメータに敏感であり,異なる周期は異なる結果を生成する可能性がある
  2. 双指数移動平均は偏差が起こり,判断の誤差が生じることがあります.
  3. 突破型の戦略は滑り場リスクを増やす可能性がある
  4. 金融危機の状況で頻繁に空白が起こる可能性

このリスクについては,パラメータ最適化,厳格な止損,適正な突破幅の緩和などで対処できます.

最適化の方向

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

  1. 線形回帰周期と二次指数移動平均周期を最適化して,最適なパラメータの組み合わせを見つける
  2. 価格の変動の幅を判断し,価格の微量突破が誤信号を発生しないようにする.
  3. 取引量などの補助条件を増加させ,突破の有効性を確保する.
  4. ストップレベルを設定し,単一損失を最小化します.
  5. 特定の品種に対する調整パラメータ

要約する

この戦略は,線形回帰指数と二次指数移動平均を総合的に使用しており,理論上および実践上には一定の優位性がある.継続的な最適化調整によって,安定性と戦略の効果をさらに向上させることができる.この戦略は,ショートライン操作に適しており,量化トレーダーに優れたアルファをもたらす.

ストラテジーソースコード
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy('LR&SSL_Short', overlay=true)
startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end   = timestamp(9999,1,1,0,0)
_testPeriod() => true

len = input(title="Period", defval=89)
smaHigh = linreg(high, len, 0)
smaLow = linreg(low, len, -1)
Hlv = 0.0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

plot(sslDown, linewidth=2, color=color.red)
plot(sslUp, linewidth=2, color=color.lime)



length = input(200, title="DEMA") 
d1 = ema(close, length)                                               
d2 = 2 * d1 - ema(d1, length)                                         
trendColour = d2 > d1 ? #AAFFAA : #FFAAAA 
dema=sma(d2,length) 

turnGreen = d2 > d1 and d2[1] <= d1[1]  
turnRed   = d2 <= d1 and d2[1] > d1[1]  

up =turnGreen 
down=turnRed 
  
plotshape(down, title="down", style=shape.triangledown,location=location.abovebar, color=color.red, transp=0, size=size.small) 
plotshape(up,  title="up", style=shape.triangleup,location=location.belowbar, color=color.green, transp=0, size=size.small) 
plot(dema, color = trendColour,linewidth=3 ,transp = 0)
bgcolor(close > dema ? color.green : color.red)

strategy.entry("short", strategy.short, when= crossunder(sslUp, sslDown) and dema > close and _testPeriod())
strategy.close("short", when = crossover(sslUp, sslDown) or crossover(close, dema))