振動ブレイクアウト戦略


作成日: 2023-10-20 16:37:28 最終変更日: 2023-10-20 16:37:28
コピー: 0 クリック数: 943
1
フォロー
1617
フォロワー

振動ブレイクアウト戦略

概要

この戦略は,ZigZag指標を使用してサポートとレジスタンスラインを描き,価格がサポートまたはレジスタンスラインを破るときに相応の多かれ少なかれ操作を行います.

戦略原則

この策略は,まず,ZZ指数を使って,特定のパラメータの下でZ字形の線を描く.そして,ZZ指数が底に現れる時,緑のサポート線を描く.そして,上部に現れる時,赤の抵抗線を描く.価格が緑の線を横切るときに多めに,赤の線を横切るときに空にする.

具体的には,この戦略の核心的な論理は,

  1. エマを使用して,close価格に対して3回指数移動平均を行い,平らな曲線_hls。を得ます.

  2. 滑り曲線が上昇しているかどうかを判断するには,上昇している場合と前K線が上昇していない場合は,このK線の最低値を底として記す. 下降している場合と前K線が上昇している場合は,このK線の最高値を頂点として記す. そうでなければNaNである.

  3. この過程を繰り返すと,ZigZagラインのジグザグが得られます.

  4. ジグザグが上昇すると,現在の上位点ドットとして記す. 低下すると,現在の下位点ドットとして記す.

  5. ドットが上昇すると,緑のサポートラインuplevelを描く. ドットが低下すると,赤のレジスタンスラインdnlevelを描く.

  6. 価格が緑線を上ると多めに,赤線を下ると空いてください.

優位分析

この戦略には以下の利点があります.

  1. ZigZagの指標は,しばしば重要なサポート・レジスタンス位を識別するために使用されます.

  2. ZigZagは,市場内のノイズを消して,取引信号をより明確にする.

  3. 突破口で入場し,トレンドの転換を把握する.

  4. 抵抗線を支える図はシンプルで効果的です.

  5. 戦略の論理は明確で分かりやすい.パラメータの最適化スペースは広い.

  6. 取引の種類と時間周期の柔軟性,適応性.

リスク分析

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

  1. ZigZag指標のパラメータを誤って設定すると,取引の機会を逃す可能性があります.

  2. サポートレジスタンスレベルが突破された後,再テストが発生する可能性がある. リスクを管理するために,止損を設定する必要があります.

  3. 突破信号は誤りであり,傾向と形状を組み合わせて検証すべきである.

  4. 市場が長期にわたって横向きに振動し,その戦略が多くの無効取引を生む可能性があります.

  5. 取引コストの影響を考慮し,頻繁に取引を避ける必要があります.

対応策として:

  1. ZigZagのパラメータを最適化して,最適なパラメータの組み合わせを見つけます.

  2. 突破後に一時的にストップを設定し,単一損失を制御する.

  3. トレンド指標などのフィルタリング信号と組み合わせることで,精度が向上する.

  4. この期間中,取引をしないように条件を追加します.

  5. 破綻の幅を適切に緩和し,無効取引を減らす.

最適化の方向

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

  1. ZigZagパラメータを最適化して,最適なパラメータの組み合わせを見つけます.

  2. 突破入場後,再テストの可能性を考え,再テストの退出論理を設定する.

  3. MAなどのトレンド指標を組み合わせて,低確率の取引信号をフィルターします.

  4. 突破信号を確認し,誤信号の発生を避けるために,量能指標等を増加させる.

  5. Lachenbruchが提及したdual手法 ((同時多空) を設定し,誤信号をフィルターして利益を得る.

  6. 機械学習などのアルゴリズムを動的に最適化するパラメータを考慮する.

  7. ストップ・ロース戦略を導入し,リスク管理のためのストップ・ロースポイントを設定する.

要約する

この戦略は,全体として,シンプルで実用的な揺れ突破戦略である.これは,ZigZag指標を使用してサポートとレジスタンスラインを図を描き,価格がこれらのラインを破るときに行動する.この戦略は,強い適応性を持つが,一定のリスクも伴う.パラメータ最適化,シグナルフィルタリング,リスク制御などの手段によって戦略を改良することができる.このような突破戦略は,市場のリズムを把握しているアクティブなトレーダーに適している.

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

//Noro
//2018

//@version=3
// strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4, title = "ZigZag length")
Extreme = input(4, title = "ZigZag extreme")
src = input(close, title = "Source")
showzz = input(false, defval = false, title = "Show ZigZag")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//ZigZag
f_zz(_length, _detection)=>
    _hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
    _isRising = _hls >= _hls[1]
    _zigzag = _isRising and not _isRising[1] ? lowest(_detection) :  not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, Extreme)
zzcol = showzz ? black : na
plot(zigzag, color = zzcol, linewidth = 2)

//Levels
dot = 0.0
dot := zigzag > 0 ? zigzag : dot[1]
uplevel = 0.0
uplevel := dot > dot[1] ? zigzag : uplevel[1]
dnlevel = 0.0
dnlevel := dot < dot[1] ? zigzag : dnlevel[1]
upcol = na
upcol := dot > dot[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := dot < dot[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if dot > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)