Oscillation Breakthrough - Market Structure Shift Strategy (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) //