この戦略は,サポートとレジスタンスラインを引くため,ジグザック指標を使用し,価格がサポートまたはレジスタンスラインを突破したとき,ロングまたはショートポジションを取ります.
この戦略は,まずジグザック指標を使用して,特定のパラメータの下でジグザック線を描きます.ジグザック指標が底を突破すると緑色サポート線が描かれます.ジグザックが上を突破すると赤色レジスタンス線が描かれます.価格が緑色の線を超えるとロングポジションが取られます.価格が赤線を下回るとショートポジションが取られます.
具体的には 基本的な論理は
3倍指数関数移動平均値で閉じる価格を平滑にします.
滑らかな曲線が上昇しているかどうかを判断します.上昇し,前のバーが上昇していなかった場合,それは底とみなされます.このバーの最低価格を取ります.落ちていた場合,前のバーが上昇していた場合は,それはトップとみなされます.このバーの最高価格を取ります.そうでなければNaNです.
このプロセスを繰り返してジグザック線ジグザックを得ます
シグザグで上昇すると,現在のピークポイントを記録します. 落ちるとき,現在の底点を記録します.
点が上昇すると緑のサポートラインを上向きに描き 点が落ちると赤の抵抗ラインをDNレベルに描きます
価格が緑線を超えるとロングポジションを取ります.価格が赤線を超えるとショートポジションを取ります.
この戦略の利点は以下の通りです.
ジグザグ指標を使用して主要なサポート/レジスタンスレベルを特定します.これらのレベルはしばしば重要です.
シグザグは市場のノイズをフィルターで 明らかに取引信号を生成します
突破でポジションを入力し,トレンド逆転を間に合うようにします.
サポート/レジスタンス線を描く簡単な方法です
明確な論理と大きなパラメータ最適化空間
製品や時間枠の選択に柔軟性 適応力
この戦略のリスク:
不適切なジグザグパラメータは 取引機会を逃す可能性があります
ストップ・ロスはリスクをコントロールするために使用します.
突破信号は誤解を招く 傾向とパターンで検証が必要です
長期にわたる横向き取引は,過度に非効率な取引を生む可能性があります.
取引コストを考慮し,過度に頻繁な取引を避ける.
解決策:
最良の組み合わせを見つけるためにジグザグパラメータを最適化します.
損失を制限するために,ブレイク後にタイムリーストップ損失を設定します.
精度を高めるために 傾向指標のようなフィルターを追加します
横向きの取引を特定し,これらの期間中に取引を避けましょう.
不効率な取引を減らすために 脱出範囲を緩める
戦略は以下の側面で最適化できます.
シグザグパラメータを最適化するためにバックテストを行います
突破後にサポート/レジスタンスを再テストする可能性を考慮します. 再テストシナリオのために出口論理を追加します.
低確率信号をスクリーンアウトします 低確率信号をスクリーンアウトします
ボリュームインジケーターを組み込み ブレイク信号を確認します
誤った信号と利益をフィルタリングするために,ラッヘンブルクの二重的方法論 (長期と短期) を実施する.
マシン学習を使って パーマータを動的に最適化します
リスクを制限するためにストップ・ロスの戦略を導入する.
簡単に言うと,これはシンプルで実用的な振動ブレイクアウト戦略です.ジグザックとトレードブレイクアウトを使用してサポート/レジスタンスを引き出す.この戦略は適応性がありますが,いくつかのリスクがあります.パラメータ,シグナルフィルター,リスク制御の最適化により改善できます.そのようなブレイクアウト戦略は,市場のリズムを理解できるアクティブトレーダーに適しています.
/*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)