박스 브레이크아웃 기반의 은탄 전략

저자:차오장, 날짜: 2024-01-15 12:06:32
태그:

img

전반적인 설명

이 전략은 주로 시장의 방향과 강도를 판단하기 위해 K-라인의 높고 낮은 지점으로 형성된 박스의 돌파구를 탐지합니다. 상향 박스 브레이크오웃이있을 때 전략은 브레이크오웃 지점 주위에서 긴 포지션을 설정합니다. 하향 박스 브레이크오웃이있을 때 전략은 브레이크오웃 지점 주위에서 짧은 포지션을 설정합니다. 거래 신호가 생성되면 전략은 포지션을 열고 스톱 로스를 설정하고 리스크를 제어하기 위해 수익을 취합니다.

전략 논리

  1. 전략은 거래 기간을 정의하고 그 기간 동안만 거래 기회를 찾습니다.

  2. 각 K 라인이 형성된 후 전략은 이전 두 K 라인의 가장 높은 가격과 가장 낮은 가격 사이에 상당한 돌파구가 있는지 여부를 판단합니다.

    2.1 2 K 라인의 가장 낮은 가격이 1 K 라인의 가장 높은 가격보다 높으면 상향 박스 브레이크가 발생합니다.

    2.2 2 K 라인의 가장 높은 가격이 1 K 라인의 가장 낮은 가격보다 낮으면 하향 박스 브레이크가 발생합니다.

  3. 박스 브레이크오웃 신호를 확인한 후 전략은 현재 K 라인의 가장 높거나 가장 낮은 가격 주위에서 긴 또는 짧은 엔트리 포인트를 설정합니다.

  4. 일단 포지션이 열리면, 전략은 트렌드 가속도를 파악하기 위해 브레이크오웃 범위의 두 배에 기반한 수익을 설정합니다.

  5. 이 전략은 또한 손실 위험을 줄이기 위해 2 K 라인의 가장 낮은 또는 가장 높은 가격에 Stop Loss를 설정합니다.

이점 분석

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

  1. 논리는 간단하고 실행하기 쉽습니다.

  2. 시장 방향과 강도를 판단하기 위해 K-라인 박스 브레이크오웃을 사용하는 것은 높은 정확도를 가지고 있습니다.

  3. 이윤 취득 설정은 트렌드 가속화로부터의 기회를 포착합니다. 인수는 조절이 가능합니다.

  4. 단일 손실을 제어하기 위해 명확한 스톱 손실 논리가 있습니다.

  5. 전략 아이디어는 유연하며 개인 스타일에 따라 사용자 정의 할 수 있습니다.

위험 분석

그러나 이 전략에는 몇 가지 위험이 있습니다.

  1. 파업 신호는 거짓 파업일 수 있습니다. 손실은 완전히 피할 수 없습니다.

  2. 엔트리 포인트 근처의 스톱 로스는 공격적인 시장에 의해 쉽게 유발될 수 있습니다.

  3. 트렌드 구조를 판단할 수 없으며, 범위 제한 시장에서는 종종 정지점이 발생할 수 있습니다.

  4. 다른 제품과 기간의 영향을 고려하지 않습니다.

최적화 방향

전략의 최적화를 위해 우리는 다음과 같은 측면에서 개선할 수 있습니다.

  1. 다양한 제품과 기간에 적응 스톱 로스 및 수익 매개 변수를 설정합니다.

  2. 범위에 묶인 시장에 갇히지 않도록 트렌드 판단을 위한 기술적 지표를 추가합니다.

  3. 트렌드 러닝을 추적할 수 있는 추가 기회를 설정합니다.

  4. 부피 지표들을 결합하여, 브레이크와 필터 신호의 진위를 판단합니다.

  5. 추세 방향을 결정하는 데 도움이 되는 기계 학습 알고리즘을 추가합니다.

요약

이 전략은 단순한 브레이크아웃 원칙에 기초하여 초과 수익을 위해 브레이크아웃 후에 가속화 된 러닝을 포착하도록 설계되었습니다. 위험을 제어하기 위해 스톱과 수익을 사용합니다. 이해하기 쉽고 구현하기 쉬운 전략은 개인 요구와 시장 환경에 따라 사용자 정의 및 최적화 될 수 있으며 매우 실용적입니다.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Dvitash

//@version=5
strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true)

startTime = input(defval = "1000", title = "Start Time")
endTime = input(defval = "1600", title = "End Time")
contractAmt = input.int(defval = 2, title = "Contract Amount")
fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color")
borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color")
fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length")

allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York"))
newDay = bool(ta.change(time('D')))
h = hour(time('1'), "America/New_York")

var bool fvgDrawn = na
var float entryPrice = na 
var float stopPrice = na 
var float tpPrice = na 

if newDay
    fvgDrawn := false
    // a_allBoxes = box.all
    // if array.size(a_allBoxes) > 0
    //     for i = 0 to array.size(a_allBoxes) - 1
    //         box.delete(array.get(a_allBoxes, i))

if allowedTime and barstate.isconfirmed and h <= 16
    //Long FVG
    if high[2] < low and not fvgDrawn
        // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := low[2]
        entryPrice := low
        tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry")
        fvgDrawn := true

    if low[2] > high and not fvgDrawn
        // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := high[2]
        entryPrice := high
        tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry")
        fvgDrawn := true
if h >= 16
    strategy.close_all()
    strategy.cancel_all()

strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit")
strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")

더 많은