
Oscillation Breakthrough - Market Structure Shift Strategy é uma estratégia de acompanhamento de tendências que utiliza relações entre diferentes períodos de tempo para identificar mudanças na estrutura do mercado. A estratégia utiliza relações entre diferentes períodos de tempo como sinais de mudanças na estrutura do mercado para capturar novas direções de tendências.
A lógica central da estratégia é usar as formas de absorção para baixo e para cima dos períodos de curto período como sinais de mudanças na estrutura do mercado de médio e longo período. Concretamente, a estratégia monitora simultaneamente os períodos de médio e longo período (como a linha de 60 minutos) e os períodos de curto período (como a linha de 15 minutos). Quando o período curto apresenta uma K vermelha absorvendo para baixo, enquanto o período médio é a linha K verde, considere que a estrutura do mercado está mudando, fazendo mais; Quando o período curto apresenta uma K verde absorvendo para cima, enquanto o período médio é a linha K vermelha, considere que a estrutura do mercado está mudando, fazendo vazio.
Depois de entrar na direção, a estratégia usa o preço máximo ou mínimo do período curto como ponto de parada para controlar o risco. Quando o preço de fechamento da linha K do período médio e longo ativa o ponto de parada, a estratégia elimina o ponto de parada.
A estratégia tem as seguintes vantagens:
Sinais de mudança de estrutura de mercado confiáveis. Utilize a relação entre os diferentes ciclos para julgar a estrutura do mercado e evite ser enganado pelo ruído de um único ciclo.
Ajudar automaticamente a direção de novas tendências. Quando surgem sinais de mudanças na estrutura do mercado, faça mais curto prazo automaticamente, sem julgamento manual.
Controle de risco em ação. Controle de risco usando preços mais baixos e mais altos em períodos curtos, ajudando a controlar perdas individuais.
O controle de retração é relativamente bom. A abertura e a parada de posições são feitas com o máximo de curto período, permitindo um certo controle de retração.
Os principais pontos de risco desta estratégia são:
Risco de erro de julgamento da estrutura do mercado. Quando o ruído de ciclo curto é excessivo, os sinais de mudança da estrutura do mercado podem falhar e os parâmetros do ciclo precisam ser ajustados.
Risco de reversão de tendência. Quando o mercado apresenta uma reversão de tipo V, a estratégia é difícil de controlar. O algoritmo de parada de perda pode ser ajustado adequadamente.
Risco de não correspondência de parâmetros. Se os parâmetros do ciclo médio e curto não forem definidos no momento, o efeito do sinal pode ser ruim e será necessário testar a otimização repetidamente.
A estratégia pode ser melhorada em várias direções:
Aumentar o acúmulo de indicadores ou a avaliação de tendências, evitando sinais errôneos de reversão de tendências.
Otimizar a correspondência de parâmetros de longo e curto período para melhorar a qualidade do sinal.
Otimizar algoritmos de stop-loss usando tecnologias como aprendizado de máquina.
Adicionar filtros de condições adicionais para sinais de erro, como a avaliação de tendências de grande escala.
Enriquecer os tipos de estratégias, desenvolver estratégias derivadas e formar portfólios de estratégias.
A estratégia de ruptura de choque - a mudança da estrutura do mercado é, em geral, uma estratégia de acompanhamento mais confiável. Ela pode usar a mudança da estrutura do mercado para determinar automaticamente a direção da nova tendência, e o controle de risco também é bom.
/*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)
//