
Oscillation Breakthrough - Market Structure Shift Strategy) - стратегия отслеживания тенденций, использующая отношения между различными временными периодами для выявления изменений в структуре рынка. Эта стратегия использует отношения между различными временными периодами в качестве сигнала изменения структуры рынка, чтобы улавливать новые направления тенденций.
Центральная логика этой стратегии заключается в том, чтобы использовать в качестве сигнала для изменения структуры рынка в среднесрочном и долгосрочном периоде низкие и высокие поглощения. В частности, стратегия одновременно отслеживает K-линии среднесрочного периода (например, 60-минутная линия) и короткого периода (например, 15-минутная линия).
После входа в направление, стратегия использует максимальную или минимальную цену короткого периода в качестве стоп-порога, чтобы контролировать риск. Когда цена закрытия линии 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)
//