
振動突破 - 市場構造変化戦略は,異なる時間周期間の関係を利用して,市場構造の変化を識別するトレンド追跡戦略である.この戦略は,異なる時間周期間の関係を市場構造の変化の信号として採用し,新しいトレンド方向を捉える.
この戦略の核心的な論理は,短周期時間の下行と上行を吸収した形状を中長期周期市場の構造の変化の信号として利用することである.具体的には,戦略は,中長期周期 (例えば60分線) と短周期時間の (例えば15分線) のK線を同時に監視する.短周期が下行を吸収した赤いK線,中長期周期が緑のK線であるとき,市場構造の変化が起きたと考える,多作する.短周期が上行を吸収した緑のK線,中長期周期が赤のK線であるとき,市場構造の変化が起きたと考える,空作る.
方向に入ると,戦略は,短期期の最高価格または最低価格をストップポイントとして使用し,リスクを制御する. 中長期期のK線の閉店価格がストップポイントを触発すると,戦略は,ストップポイントを平定する.
この戦略の利点は以下の通りです.
信頼性の高い市場構造転換信号. 異なる周期間の関係を活用して市場構造を判断し,単一の周期の騒音に惑わされないようにする.
新しいトレンドの方向を自動判断する. 市場構造の転換シグナルが現れたときに,手動判断を必要とせずに,自動で多額の空白を行う.
リスクコントロール 場所. 短期間の最高最低価格を利用してリスクコントロールし,単発損失を制御するのに役立ちます.
撤回制御は比較的優れている。短期周期極値を利用してポジション開設とストップをすることで,ある程度撤回制御ができる。
この戦略の主なリスクは以下の通りです.
市場構造判断誤りのリスク。短周期騒音が大きすぎると,市場構造転換シグナルが失敗し,周期パラメータの調整が必要となる。
トレンドの逆転のリスク。市場がV型逆転したとき,この戦略は逆転を制御することが困難。止損アルゴリズムを適切に調整することができる。
パラメータ不一致のリスク。中長短周期のパラメータが設定されず,信号効果が良くない可能性があり,繰り返し最適化テストが必要。
この戦略は,以下の方向からさらに最適化できます.
累積指標やトレンド判断を増やして,トレンドの逆転の誤信号を避ける.
長短周期のパラメータマッチングを最適化し,信号品質を向上させる.
ストップ・ストップ・ロスのアルゴリズムを最適化するために,機械学習などの技術を活用する.
大規模なトレンド判断などの誤導信号をフィルタリングする条件を追加します.
戦略の種類を豊かにし,派生戦略を開発し,戦略のポートフォリオを形成する.
震動突破 - 市場構造の変化戦略は,全体的に比較して,より信頼性の高い追跡戦略である.市場構造の変化を利用して,新しいトレンドの方向を自動的に判断することができ,リスク管理もうまく行われている.次に,この戦略は,信号品質の向上,ストップ・ロスの最適化,逆転の防止などの面で深層に最適化され,商業級の戦略製品にすることができる.
/*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)
//