ブレイクアウトベースの回帰戦略


作成日: 2024-03-01 11:58:56 最終変更日: 2024-03-01 11:58:56
コピー: 2 クリック数: 651
1
フォロー
1617
フォロワー

ブレイクアウトベースの回帰戦略

概要

この戦略は,原油期貨市場の波動性を利用することを目的とした体系的な方法である.それは,の平均区間範囲を測定し,もし快移動平均が遅移動平均より高いならが大きいことを意味する;もし遅移動平均が快移動平均より高いならが小さいことを意味する.

この原理に従って,潜在的に長いエントリーポイントと短いエントリーポイントを識別する. ポジションは,特定の数ののみを保持する. このパラメータは,Exit after barsの入力によって制御される.

戦略原則

  1. 突破の判断基準として,最近9つのKラインの最高閉店価格を計算します.
  2. 突破の判断基準として,最近50Kラインの最低閉店価格を計算します.
  3. 最近の5根と20根のK線の平均波幅の対比を計算して,K線形状が徐々に拡大するか縮小するか判断する.
  4. 長線と短線の突破シグナルを識別する:閉店価格が最高閉店価格に等しく,K線が徐々に縮小するときに,多めに;閉店価格が最低閉店価格に等しく,K線が徐々に縮小するときに,空白
  5. 突破後の固定根K線平仓離場:調整可能なパラメータで平仓間隔を変更

優位分析

  1. 逆行戦略,過去最高値との比較によって市場の方向性を判断する
  2. 偽の突破を避けるために 変動的判断を組み合わせる
  3. 固定ルートK線出場,一定利潤をロックし,撤退を回避

リスク分析

  1. 市場構造の変化に合わせて歴史的な極限値が変化し,シグナルが失敗する可能性がある
  2. 偽の突破により刑務所に収監
  3. 離場間隔のパラメータが不適切で,より大きな利益が失われ,損失が増加する可能性があります.

最適化の方向

  1. 極限参数は実態統計学で最適化できる
  2. 波動率指数で真破りの確率を評価する
  3. 策略的な反測結果により,オフ場根数を最適化できる

要約する

この戦略は,突破と回帰を利用して短期トレンドを判断し,波動的戦略である.パラメータ設定を最適化し,波動率指標を付加することで判断し,偽突破の確率を減らすことができ,利益レベルを上げる.同時に,固定ルートKラインの急速脱出機構は,一定利益をロックし,リスクを効果的に制御することができる.この戦略は,ショートライン操作の補助ツールとして,パラメータ調整によってより長い周期の操作シグナルを取得することもできる.

ストラテジーソースコード
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Celestial_Logic

//@version=5
strategy("Crudeoil Breakout strategy", overlay = true, initial_capital = 20000, default_qty_type = strategy.fixed, default_qty_value = 1)


highestCloseLookback = input(9 , title = 'Highest Close lookback')
lowestCloseLookback  = input(50, title = 'Lowest Close lookback'  ) 

exitAfter = input(10, title = 'Exit after bars')

hc = ta.highest(close,highestCloseLookback)
lc = ta.lowest(close,lowestCloseLookback)

rangeFilter = (ta.sma( (high - low), 5 ) > ta.sma((high-low), 20) ) // Candles getting bigger.

longCondition  = (close == hc ) and not rangeFilter
shortCondition = (close == lc ) and not rangeFilter
if  longCondition
    strategy.entry(id = 'long', direction = strategy.long) 
if shortCondition
    strategy.entry(id = 'short', direction = strategy.short)



var int longsince = 0 
var int shortsince = 0 

if strategy.position_size > 0 
    longsince += 1
else
    longsince := 0

if strategy.position_size < 0 
    shortsince += 1 
else 
    shortsince := 0

if longsince >= exitAfter 
    strategy.close(id = 'long', comment = 'long close')
if shortsince >= exitAfter
    strategy.close(id = 'short', comment = 'short close')