MCL-YG ボラティリティブレイクアウト取引戦略


作成日: 2023-11-14 13:49:12 最終変更日: 2023-11-14 13:49:12
コピー: 0 クリック数: 673
1
フォロー
1617
フォロワー

MCL-YG ボラティリティブレイクアウト取引戦略

概要

この戦略はブリン帯突破を用いて取引信号を検出し,MCLとYGの2つの正に関連した資産のペア取引を実現する.MCLの価格がブリン帯を上線に触れたとき,MCLをオフにすると,YGをオフにします.MCLの価格がブリン帯をダウンに触れたとき,MCLをオフにすると,YGをオフにすると,価格の傾向の順調取引を実現します.

戦略原則

まず,この戦略は,一定の周期内の閉盘価格に基づいて,SMA平均線と標準差StdDevを計算する.そして,SMA平均線の上にそれぞれ偏移量を加え,ブリン帯の上線と下線を形成する.価格が上線に触れたときに買取信号を生じ,下線に触れたときに売り信号を生成する.

この戦略は,ブリン帯の突破取引考え方を採用している.つまり,価格が突破上線時に見多し,突破下線時に見空である.ブリン帯は,チャネル幅を動的に調整することで,市場の変化に適応し,市場の揺れ騒音を効果的にフィルターすることができる.固定チャネルとは異なり,ブリン帯のチャネル幅は,市場の変動性の変化に伴い,拡大または縮小する.波動性が大きいとき,ブリン帯の下線隙間は大きいので,部分的な騒音をフィルターすることができる.波動性が少ないとき,ブリン帯の上下線隙間は小さいので,より小さな突破信号を捕捉することができる.

2つの正の関連資産MCLとYGのペア取引.MCLが軌道に乗ったとき,MCLの価格は上昇傾向にあることを示し,MCLを多めにすると同時にYGを空白する.つまり,より強い資産を購入し,より弱い資産を売却して,2つの資産価格の差から利益を得る.

戦略的優位性

  1. ブリン・ベルトベースの突破取引は,市場騒音をフィルターし,トレンドを識別する
  2. 関連資産のペアリングにより,関連資産の正の価格差のアルファ利益を得ることができます.
  3. ポジションの規模を動的に調整し,個々の取引のリスクを効果的に制御する
  4. 標準の突破入場と回帰の中軸出場論理を採用し,戦略論理はシンプルで明快である.

戦略リスク

  1. ブリン帯のパラメータを正しく設定しない場合,取引頻度が高くなり,信号が不明になる可能性があります.
  2. 関連資産間の関連性の低下は,ペア取引アルファの収益の減少につながる
  3. ブレイク取引は,波動的な市場の偽のブレイクに騙され,損失を被る可能性があります.
  4. 単一損失が拡大する可能性がある

パラメータの最適化,より関連性のある,流動性の高い取引相手の選択,合理的なストップ・ポジションの設定などの方法によってリスクを減らすことができます.

戦略の最適化

  1. ブリン帯のパラメータを最適化して,最適なパラメータの組み合わせを探します.
  2. より多くの関連資産を取引対象としてテストし,より関連性の高いポートフォリオを選択します.
  3. ストップ・ロジックを増やし,単一損失を制限する
  4. フィルタリング条件を追加し,偽の侵入を防ぐ
  5. 取引量確認などの他の指標と組み合わせた

要約する

この戦略は,全体的に見ると単純で直接的なもので,ブリン帯を通してトレンドをキャプチャし,取引をペアしてアルファ収益を得る.しかし,いくつかのパラメータ最適化,ストップ損失,ペア選択などの最適化可能なスペースがあります.異なるパラメータ,取引対象をテストし,トレンドフィルターなどの方法を適切に導入することによって,より良い戦略効果を得ることができます.

ストラテジーソースコード
/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// © shark792

//@version=5

// 1. Define strategy settings
strategy(title="MCL-YG Pair Trading Strategy", overlay=true,
     pyramiding=0, initial_capital=10000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)

smaLength = input.int(title="SMA Length", defval=20)
stdLength = input.int(title="StdDev Length", defval=20)

ubOffset = input.float(title="Upper Band Offset", defval=1, step=0.5)
lbOffset = input.float(title="Lower Band Offset", defval=1, step=0.5)

usePosSize = input.bool(title="Use Position Sizing?", defval=true)
riskPerc   = input.float(title="Risk %", defval=0.5, step=0.25)


// 2. Calculate strategy values
smaValue = ta.sma(close, smaLength)
stdDev   = ta.stdev(close, stdLength)

upperBand = smaValue + (stdDev * ubOffset)
lowerBand = smaValue - (stdDev * lbOffset)

riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (ta.atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? math.floor(riskEquity / atrCurrency) : 1


// 3. Output strategy data
plot(series=smaValue, title="SMA", color=color.teal)

plot(series=upperBand, title="UB", color=color.green,
     linewidth=2)
plot(series=lowerBand, title="LB", color=color.red,
     linewidth=2)


// 4. Determine long trading conditions
enterLong = ta.crossover(close, upperBand)
exitLong  = ta.crossunder(close, smaValue)


// 5. Code short trading conditions
enterShort = ta.crossunder(close, lowerBand)
exitShort  = ta.crossover(close, smaValue)


// 6. Submit entry orders
if enterLong
    strategy.entry(id="EL", direction=strategy.long, qty=posSize)

if enterShort
    strategy.entry(id="ES", direction=strategy.short, qty=posSize)


// 7. Submit exit orders
strategy.close(id="EL", when=exitLong)
strategy.close(id="ES", when=exitShort)