振動突破 - 市場構造シフト戦略 (ICT_MSS) は,異なるタイムフレーム間の関係を用いて市場構造シフトを特定するトレンドフォロー戦略である.この戦略は,新しいトレンド方向を把握するために,市場構造シフトのシグナルとしてタイムフレーム関係を使用する.
この戦略の主な論理は,短期間のダウンフレームとアップフレームの吸収パターンをより長い時間枠の市場構造シフトのシグナルとして使用することです.具体的には,戦略はより長い時間枠 (例えば60mバー) とより短い時間枠 (例えば15mバー) を同時にモニターします.より短い時間枠にダウンフレームの吸収赤いバーが表示され,より長い時間枠バーが緑色である場合,市場構造が発生し,長いシフトポジションが取られていることを決定します.より長い時間枠バーが赤色である間,より短い時間枠にアップフレームの吸収緑色のバーが表示され,市場構造の変化が発生し,ポジションが取られていることを決定します.
方向性ポジションに入ると,ストラテジーはリスクを制御するために,ストップロスを設定するために短時間枠高/低を使用します. 長い時間枠バーの閉じる価格が利益のレベルに達すると,ストラテジーは利益のためにポジションを閉じる.
この戦略の利点は次のとおりです.
信頼性の高い市場構造シフトシグナル. タイムフレーム関係を使用することで,単一のタイムフレームからの騒音によって誤導されるのを避ける.
自動で新しいトレンド方向を決定します. 市場の構造の変化は,手動的な判断を必要とせずに自動的に長/短エントリを誘発します.
効果的なリスク管理 リスク管理のために使用される短い高/低時間枠は,単一の取引損失を制限するのに役立ちます.
引き下げを比較的に改善する.入場とストップ損失の短い時間枠の極端を使用することで,引き下げを一定程度制御するのに役立ちます.
この戦略の主なリスクは,
市場構造の誤った評価のリスク. 短時間枠のノイズが高い場合,シグナルが故障する可能性があります. タイムフレームパラメータを調整する必要があります.
トレンド逆転のリスク. V型逆転中に引き下げを制御するために戦略が苦労する.ストップ損失アルゴリズムを調整する必要があります.
パラメータ不一致リスク.誤った長/短時間枠コンボは,信号品質が低下し,最適化テストが必要になります.
戦略のさらなる最適化方向は以下の通りである.
トレンド逆転時に誤った信号を避けるためにトレンドフィルターを追加します.
信号の質を改善するために タイムフレームパラメータのマッチングを最適化します
機械学習を活用して 最適な利益/ストップ損失を
より大きな時間枠のトレンドのような補完フィルターを追加します
戦略の多様性を拡大して 戦略の全体を形成する
ICT_MSS戦略は,全体的に信頼性の高いトレンドフォロー戦略である.市場構造の変化に基づいて新しいトレンド方向を自動的に決定し,また良いリスク制御も内蔵されている.次のステップは,信号品質を改善し,出口を最適化し,逆転を防止し,商業レベルの戦略にするためのさらなる強化である.
/*backtest start: 2022-11-28 00:00:00 end: 2023-12-04 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/ // © jl01794 //@version=5 strategy(title="ICT_MSS[PROTOTYPE]", overlay=true, initial_capital=10000, currency="USD", margin_long=15, margin_short=15, max_lines_count=500) // INPUTS Time_Frame = input.timeframe("60", title="Focused Time Frame") FTF_LTF = input.timeframe("15", title="Focused Time Frame(LTF)") // // SECURITY DATA [FOR ONE TIMEFRAME REFERENCE] FTF_Close = request.security(syminfo.tickerid, Time_Frame, close) FTF_Open = request.security(syminfo.tickerid, Time_Frame, open) FTFLTF_High = request.security(syminfo.tickerid, FTF_LTF, ta.highest(2)) FTFLTF_Low = request.security(syminfo.tickerid, FTF_LTF, ta.lowest(2)) FTFLTF_Close = request.security(syminfo.tickerid, FTF_LTF, close) FTFLTF_Open = request.security(syminfo.tickerid, FTF_LTF, open) // TIME BASED CLOSE AND OPEN _close = FTF_Close _open = FTF_Open _LTFclose = FTFLTF_Close _LTFopen = FTFLTF_Open // CANDLE STATE greenCandle = close > open redCandle = close < open LTFgreenCandle = FTFLTF_Close > FTFLTF_Open LTFredCandle = FTFLTF_Close < FTFLTF_Open // ENGULFING TIMEFRAME REFERENCE FTF_greenCandle = request.security(syminfo.tickerid, Time_Frame, greenCandle) FTF_redCandle = request.security(syminfo.tickerid, Time_Frame, redCandle) FTFLTF_greenCandle = request.security(syminfo.tickerid, FTF_LTF, LTFgreenCandle) FTFLTF_redCandle = request.security(syminfo.tickerid, FTF_LTF, LTFredCandle) //-------------------------------------------------------------------------------------------------------------- //ENGULFING_FTF_LTF B_EnP_mss = FTFLTF_redCandle[1] and // 1E PIVOT BUY FTFLTF_greenCandle // B_EnPs_mss = FTFLTF_greenCandle[1] and // 1E PIVOT SELL FTFLTF_redCandle // //-------------------------------------------------------------------------------------------------------------- display_LTF = timeframe.isintraday and timeframe.multiplier <= 15 //-------------------------------------------------------------------------------------------------------------- // STORED DATAS var float EH_MSS1 = na var float EL_MSS1 = na var bool can_draw = false var line l1_mss = na var line l1s_mss = na //-------------------------------------------------------------------------------------------------------------- // MSS BUY if (B_EnPs_mss) and (display_LTF) EH_MSS1 := FTFLTF_High can_draw := true l1_mss := line.new(bar_index, EH_MSS1, bar_index -3, EH_MSS1, color=color.purple) else if (can_draw) if (FTFLTF_High > EH_MSS1) can_draw := false else line.set_x2(l1_mss, bar_index) // // MSS SELL if (B_EnP_mss) and (display_LTF) EL_MSS1 := FTFLTF_Low can_draw := true l1s_mss := line.new(bar_index, EL_MSS1, bar_index -3, EL_MSS1, color=color.purple) else if (can_draw) if (FTFLTF_Low < EL_MSS1) can_draw := false else line.set_x2(l1s_mss, bar_index) //-------------------------------------------------------------------------------------------------------------- // ORDER // BUY longCondition_mssB = B_EnPs_mss and FTFLTF_High and close and high[1] openOr = FTFLTF_High //SELL shortCondition_mssS = B_EnP_mss and FTFLTF_Low and close and low[1] openOrs = FTFLTF_Low if (longCondition_mssB) strategy.entry("Buy", strategy.long, 1, stop = openOr, when = longCondition_mssB) // if (shortCondition_mssS) strategy.entry("Sell", strategy.short, 1, stop = openOrs, when = shortCondition_mssS) // // EXIT long_tp = open < FTFLTF_Close[1] short_tp = open > FTFLTF_Close[1] //if (long_tp) //strategy.close("Buy", qty_percent = 100, when = long_tp) // //if (short_tp) //strategy.close("Sell", qty_percent = 100, when = short_tp) //