오스실레이션 돌파구 - 시장 구조 변화 전략

저자:차오장, 날짜: 2023-12-05 15:17:01
태그:

img

오시슬레이션 돌파 - 시장 구조 변화 전략 (ICT_MSS) 은 다른 시간 프레임 간의 관계를 사용하여 시장 구조의 변화를 식별하는 트렌드 다음 전략이다. 이 전략은 새로운 트렌드 방향을 파악하기 위해 시장 구조의 변화에 대한 신호로 시간 프레임 관계를 사용합니다.

전략 논리

이 전략의 핵심 논리는 짧은 시간 프레임 하향 및 상향 흡수 패턴을 더 긴 시간 프레임 시장 구조 변화의 신호로 사용하는 것입니다. 구체적으로, 전략은 동시에 더 긴 시간 프레임 (예를 들어, 60m 바) 및 더 짧은 시간 프레임 (예를 들어, 15m 바) 을 모니터링합니다. 더 긴 시간 프레임 바가 녹색이 될 때, 더 짧은 시간 프레임에 하향 흡수 빨간색 막대가 나타나면 시장 구조가 발생하고 긴 전환 지위가 취해진 것으로 결정됩니다. 더 긴 시간 프레임 바가 빨간색으로 될 때, 상향 흡수 녹색 막대가 짧은 시간 프레임에 나타나면, 시장 구조의 변화가 발생하고 짧은 위치가 취해진 것으로 결정됩니다.

방향 포지션에 진입 한 후 전략은 짧은 시간 프레임 높은/저하를 활용하여 위험을 제어하기 위해 스톱 로스를 설정합니다. 더 긴 시간 프레임 바 폐쇄 가격이 수익을 취하는 수준에 도달하면 전략은 수익을 위해 포지션을 닫습니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 신뢰할 수 있는 시장 구조 변화 신호 시간 프레임 관계를 사용하여 단일 시간 프레임의 소음으로 오해되는 것을 피합니다.

  2. 새로운 트렌드 방향을 자동으로 결정합니다. 시장 구조의 변화는 수동 판단이 필요하지 않고 자동으로 긴 / 짧은 엔트리를 유발합니다.

  3. 효과적인 위험 통제: 위험 통제를 위해 사용되는 짧은 시간 프레임은 단일 거래 손실을 제한하는 데 도움이됩니다.

  4. 상대적으로 더 나은 드로다운 제어: 엔트리 및 스톱 로스 (stop loss) 를 위한 짧은 시간 프레임 극단적 사용은 어느 정도 드로다운을 제어하는 데 도움이 될 수 있습니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 부정확한 시장 구조 평가의 위험. 짧은 시간 프레임 소음이 높을 때 신호가 실패 할 수 있습니다. 시간 프레임 매개 변수를 조정해야합니다.

  2. 트렌드 반전 위험. 전략은 V 모양의 반전 동안 인기를 조절하기 위해 노력합니다. 중지 손실 알고리즘은 조정되어야합니다.

  3. 매개 변수 불일치 위험. 잘못된 긴 / 짧은 시간 프레임 조합은 신호 품질이 떨어지고 최적화 테스트가 필요합니다.

최적화 방향

전략의 추가 최적화 방향은 다음과 같습니다.

  1. 트렌드 반전 도중 잘못된 신호를 피하기 위해 트렌드 필터를 추가합니다.

  2. 신호 품질을 향상시키기 위해 시간 프레임 매개 변수 일치 최적화.

  3. 기계 학습을 활용하여 최적의 수익/손실을 멈추게 합니다.

  4. 더 큰 시간 프레임 트렌드와 같은 추가 필터를 추가합니다.

  5. 전략 변형을 확장하여 전략 집합을 형성합니다.

결론

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)
//

더 많은