진동하는 돌파구 시장 구조 변화 전략


생성 날짜: 2023-12-05 15:17:01 마지막으로 수정됨: 2023-12-05 15:17:01
복사: 0 클릭수: 699
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

진동하는 돌파구 시장 구조 변화 전략

개요

진동 돌파구 - 시장 구조 변화 전략 (Oscillation Breakthrough - Market Structure Shift Strategy) 은 다른 시간 주기 사이의 관계를 사용하여 시장 구조 변화의 트렌드 추적 전략이다. 이 전략은 새로운 트렌드 방향을 포착하기 위해 다른 시간 주기 사이의 관계를 시장 구조 변화의 신호로 사용합니다.

전략 원칙

이 전략의 핵심 논리는 짧은 주기 시간대의 아래와 위 삼키는 형태를 중장기 시장 구조의 변화의 신호로 이용하는 것이다. 구체적으로, 전략은 중장기 (예: 60 분 선) 과 짧은 주기 시간대의 (예: 15 분 선) K선을 동시에 감시한다. 짧은 주기에서 아래로 삼키는 빨간 K선이 나타나고 중장기에는 녹색 K선이 있을 때, 시장 구조의 변화가 있다고 생각하며, 더 많이 한다.

방향에 들어간 후, 전략은 단기간의 최고 가격 또는 최저 가격을 손실 지점으로 사용하여 위험을 제어한다. 중기기 K 선의 종결 가격이 중지 지점을 촉발하면, 전략은 포지션 중지 지점을 평정한다.

전략적 강점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 신뢰할 수 있는 시장 구조 전환 신호. 시장 구조를 판단하기 위해 다양한 주기 간의 관계를 사용하여 단일 주기 소음으로 오해하지 마십시오.

  2. 새로운 트렌드 방향을 자동으로 판단한다. 시장 구조의 전환 신호가 나타나면 자동으로 더 많은 코이킹을 하고, 수동 판단을 할 필요가 없다.

  3. 리스크 컨트롤이 위치한다. 단기 최저 가격을 이용한 리스크 컨트롤이 단기 손실을 제어하는 데 도움이 된다.

  4. 철회 통제는 상대적으로 좋다. 짧은 주기 극치를 이용하여 포지션을 개시하고 상실을 중지하여 철회 통제를 어느 정도 할 수 있다.

전략적 위험 분석

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

  1. 시장 구조 판단 오류의 위험. 단기 주기 소음이 너무 커지면, 시장 구조 전환 신호가 실패할 수 있으며, 주기 파라미터를 조정할 필요가 있다.

  2. 트렌드 반전의 위험. 시장에서 V형 반전이 발생하면 이 전략은 회전을 제어하기 어렵다.

  3. 매개 변수가 일치하지 않는 위험. 중·단기 주기 매개 변수가 적시에 설정되지 않아 신호 효과가 좋지 않을 수 있으며, 반복적으로 최적화 테스트가 필요합니다.

전략 최적화 방향

이 전략은 다음과 같은 방향으로 더 개선될 수 있습니다.

  1. 트렌드 반전의 잘못된 신호를 피하기 위해 축적된 지표 또는 트렌드 판단을 추가하십시오.

  2. 중장기 및 중단기 매개 변수 매칭을 최적화하여 신호 품질을 향상시킨다.

  3. 기계학습과 같은 기술을 활용하여 스톱스톱 손실 알고리즘을 최적화한다.

  4. 부가 조건 필터링을 추가하여, 대차 트렌드 판단과 같은 잘못된 신호를 제거합니다.

  5. 전략 유형을 풍부하게 하고, 파생 전략을 개발하고, 전략 포트폴리오를 형성한다.

요약하다

쇼크 브레이크 - 시장 구조의 변화 전략은 전체적으로 더 신뢰할 수있는 추적 전략이다. 그것은 시장 구조의 변화를 사용하여 새로운 트렌드 방향을 자동으로 판단 할 수 있으며, 위험 관리도 잘합니다. 다음으로, 이 전략은 신호 품질을 향상시키고, 스톱 로스를 최적화하고, 반전을 방지하는 등의 측면에서 심층적으로 최적화하여 비즈니스 수준의 전략 제품으로 만들 수 있습니다.

전략 소스 코드
/*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)
//