리소스 로딩... 로딩...

여러 기간 프랙탈 브레이크 오더 블록 적응 거래 전략

저자:차오장, 날짜: 2024-12-27 15:49:16
태그:OBSDMAATR

img

전반적인 설명

이 전략은 프랙탈 이론과 오더 블록 분석을 기반으로 한 적응형 거래 시스템이다. 이 전략은 프랙탈 브레이크 아웃 신호와 오더 블록 확인을 결합하여 시장 구조의 주요 지원 및 저항 수준을 식별하여 높은 확률의 거래 기회를 포착합니다. 이 전략은 프랙탈 인디케이터, 동적 오더 블록 및 가격 브레이크 아웃 확인 시스템 등 여러 기술적 지표를 통합하여 시장 전환점의 정확한 위치와 정확한 거래 시기를 달성합니다.

전략 원칙

전략의 핵심 논리는 세 가지 주요 기둥에 기반하고 있습니다. 첫째, 프랙탈 계산 모듈을 통해 잠재적인 트렌드 역전 영역을 식별하기 위해 시장의 최고와 최하위를 지속적으로 모니터링하는 것; 둘째, 주문 블록 분석을 통해 주요 가격 수준에서 수요와 공급 구역을 설정하는 것; 마지막으로, 브레이크아웃 확인 시스템을 통해 가격 브레이크의 유효성을 확인하는 것. 가격이 프랙탈 이상으로 떨어지고 유효성을 확인하면 시스템은 최근 빨간 촛불 영역에서 수요 구역 주문 블록을 생성하고 긴 포지션을 열고; 가격이 프랙탈 아래로 떨어지고 유효성을 확인하면 시스템은 최근 녹색 촛불 영역에서 공급 구역 주문을 생성하고 짧은 포지션을 열고. 전략에는 또한 가격과 주문 블록 사이의 상대적 관계를 시각적으로 표시하기 위해 동적 주문 블록 색상 업데이트가 포함되어 있습니다.

전략적 장점

  1. 강력한 적응력: 전략은 시장 조건에 따라 주문 블록 위치와 크기를 동적으로 조정할 수 있습니다.
  2. 여러 확인 메커니즘: 프랙탈 브레이크, 오더 블록 확인 및 가격 액션 분석을 결합하여 잘못된 신호 위험을 줄입니다.
  3. 포괄적 인 리스크 관리: 트레이더가 명확한 시각 피드백과 상태 체크리스트를 통해 실시간 전략 상태를 모니터링 할 수 있도록 도와줍니다.
  4. 우수한 시각화: 프랙탈 마커, 주문 블록 표시 및 상태 체크리스트를 포함한 직관적인 그래픽 인터페이스를 제공합니다.
  5. 유연한 매개 변수: 사용자가 개인 거래 스타일에 따라 프랙탈 기간 및 브레이크 아웃 유형과 같은 주요 매개 변수를 조정할 수 있습니다.

전략 위험

  1. 시장 변동성 위험: 매우 변동적인 시장에서 잘못된 파업 신호를 생성하여 추가 필터링 메커니즘을 필요로 할 수 있습니다.
  2. 미끄러짐 위험: 유동성이 충분하지 않은 시장에서 주문 실행 가격은 이상적인 입점점에서 벗어날 수 있습니다.
  3. 트렌드 의존성: 전략 성과는 트렌드 시장과 같은 범위 시장에서 이상적이지 않을 수 있습니다.
  4. 매개 변수 감수성: 다른 프랙탈 기간 설정은 상당히 다른 거래 결과를 초래할 수 있습니다.
  5. 컴퓨팅 자원 소비: 복잡한 시각화 기능과 실시간 계산은 시스템 부하를 증가시킬 수 있습니다.

최적화 방향

  1. 변동성 필터를 도입하십시오. ATR 또는 다른 변동성 지표를 통해 거래 신호를 최적화하십시오.
  2. 트렌드 확인 메커니즘을 추가합니다. 이동 평균 또는 다른 트렌드 지표를 결합하여 신호 신뢰성을 향상시킵니다.
  3. 완벽한 스톱 로스 메커니즘: 오더 블록 구조를 기반으로 동적 스톱 로스 전략을 설계합니다.
  4. 오더 블록 크기를 최적화: 시장 변동성에 따라 오더 블록 크기를 동적으로 조정합니다.
  5. 부피 분석을 추가합니다. 부피 데이터를 포함하여 파업 유효성을 확인합니다.

요약

이것은 기술 분석의 여러 차원을 통합하여 프랙탈 이론과 주문 블록 분석을 중심으로 완전한 거래 시스템을 구축하는 복합 거래 전략입니다. 전략의 강점은 적응력과 여러 확인 메커니즘에 있습니다. 그러나 시장 환경이 전략 성능에 미치는 영향에도주의를 기울여야합니다. 제안된 최적화 방향을 통해 전략의 신뢰성과 안정성을 더욱 향상시킬 수 있습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)

관련

더 많은