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

큰 변동성 브레이크 두 방향 거래 전략: 포인트 기반 임계 입력 시스템

저자:차오장, 날짜: 2024-11-18 16:11:21
태그:ATRSLTP

img

전반적인 설명

이 전략은 30분 촛불을 기반으로 한 쌍방향 거래 시스템으로, 가격 변동성 모니터링을 통해 거래 기회를 찾습니다. 핵심 메커니즘은 포인트 임계치를 사용하여 중요한 가격 움직임을 식별하고 브레이크아웃 확인 후 거래를 실행하는 것입니다. 전략은 엄격한 시간 관리, 스톱 로스/트레이프 메커니즘 및 제어 자동화 거래를위한 거래 관리 프로토콜을 통합합니다.

전략 원칙

이 전략은 유효한 거래 신호를 식별하기 위해 여러 필터링 메커니즘을 사용합니다. 30 분 촛불이 닫을 때 각 변동성 범위를 계산하여 범위를 초과 할 때 잠재적 인 거래 기회를 표시합니다. 신호 유효성을 보장하기 위해 전략은 추가 버퍼 포인트를 구현하여 가격이 이 버퍼 구역을 통과 할 때만 실제 거래 신호를 유발합니다. 시스템은 길고 짧은 포지션을 모두 가능하게하며, 상향 브레이크에 장거리 및 하향 브레이크에 짧은 포지션을 입력하여 해당 수익 목표와 스톱-러스 수준을 구현합니다.

전략적 장점

  1. 포괄적 인 시간 관리: 제한 된 거래 창구 는 비활성 기간 동안 거짓 신호 를 피 합니다
  2. 쌍방향 거래: 두 가지 시장 방향의 기회를 포착하고 자본 효율성을 향상시킵니다.
  3. 강력한 리스크 관리: 고정된 스톱 로스 (stop loss) 및 리프트 (take profit) 수준은 리스크 평가와 관리를 용이하게 합니다.
  4. 높은 자동화: 신호 식별에서 거래 실행까지 완전히 자동화되어 인간의 개입을 최소화합니다.
  5. 유연한 매개 변수 설정: 조정 가능한 주요 매개 변수는 다른 시장 조건에 적응합니다

전략 위험

  1. 가짜 브레이크 위험: 큰 변동성으로 인해 잘못된 브레이크가 발생하여 스톱 로스 출구로 이어질 수 있습니다.
  2. 매개 변수 감수성: 부적절한 임계 설정으로 인해 놓친 기회 또는 과잉 거래가 발생할 수 있습니다.
  3. 시장 환경에 대한 의존성: 다양한 시장에서 빈번한 스톱 로스를 유발할 수 있습니다.
  4. 미끄러짐 효과: 높은 변동성 중 실제 실행 가격은 신호 가격과 크게 다를 수 있습니다.
  5. 자본 관리 위험: 포지션 크기의 메커니즘이 부족하면 과도한 위험 노출로 이어질 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터링 추가: 신호 품질을 향상시키기 위해 장기 트렌드 지표를 포함
  2. 동적 매개 변수 최적화: 시장 변동성에 기초하여 임계값 및 스톱-러스 매개 변수를 자동으로 조정합니다.
  3. 부피 확인: 부피 필터링 조건을 추가하여 분출 신뢰성을 향상시킵니다.
  4. 스톱 로스/프로프트 취득을 최적화: 다른 시장 조건에 적응하는 동적 출구 구현
  5. 포지션 크기를 포함합니다. 신호 강도와 시장 변동성에 따라 포지션 크기를 동적으로 조정합니다.

결론

이 전략은 명확한 논리를 가진 종합적으로 설계된 자동화 거래 전략이다. 엄격한 조건 필터링과 위험 통제를 통해 전략은 실용적 적용 가능성을 입증한다. 그러나 라이브 트레이딩에서 철저한 테스트와 최적화가 필요하며, 특히 실제 시장 조건에 따라 조정해야 하는 매개 변수 설정 및 위험 관리 측면에 대한 테스트가 필요합니다. 성공적인 전략 구현은 안정적인 시장 조건과 적절한 매개 변수 구성과 라이브 배포 전에 광범위한 백테스팅을 권장합니다.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Big Candle Breakout Strategy Both Side", overlay=true)  

// Input for the point move threshold
point_move_in = input.int(100, title="Point Move Threshold")
point_target = input.int(100, title="Point Target")
point_stoploss = input.int(100, title="Point Stop Loss")
point_buffer = input.int(5, title="Point Buffer")

point_move = point_buffer + point_move_in

// Define the start and end times for trading
start_hour = 9
start_minute = 15
end_hour = 14
end_minute = 30

// Function to check if the current time is within the allowed trading window
in_time_range = (hour(time('30')) > start_hour or (hour(time('30')) == start_hour and minute(time('30')) >= start_minute)) and (hour(time('30')) < end_hour or (hour(time('30')) == end_hour and minute(time('30')) <= end_minute))

// Retrieve the open, high, low, and close prices of 30-minute candles
open_30m = request.security(syminfo.tickerid, "30", open)
high_30m = request.security(syminfo.tickerid, "30", high)
low_30m = request.security(syminfo.tickerid, "30", low)
close_30m = request.security(syminfo.tickerid, "30", close)

// Calculate the range of the candle
candle_range_long = (close_30m - open_30m)
candle_range_short = (open_30m - close_30m)

// Determine if the candle meets the criteria to be marked
big_candle_long = candle_range_long >= point_move_in
big_candle_short = candle_range_short >= point_move_in

// Variables to store the state of the trade
var float long_entry_price = na
var float long_target_price = na
var float long_stop_loss_price = na

var float short_entry_price = na
var float short_target_price = na
var float short_stop_loss_price = na

// Check if there are no active trades
no_active_trades = (strategy.opentrades == 0)

// Long entry condition
if (big_candle_long and na(long_entry_price) and in_time_range and no_active_trades)
    long_entry_price := high_30m+point_buffer
    long_target_price := long_entry_price + point_target
    long_stop_loss_price := long_entry_price - point_stoploss
    strategy.entry("Buy", strategy.long, stop=long_entry_price, limit=long_target_price)

plot(long_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Entry Price")
plot(long_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Target Price")
plot(long_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Stop Loss Price")

// Short entry condition
if (big_candle_short and na(short_entry_price) and in_time_range and no_active_trades)
    short_entry_price := low_30m - point_buffer
    short_target_price := short_entry_price - point_target
    short_stop_loss_price := short_entry_price + point_stoploss
    strategy.entry("Sell", strategy.short, stop=short_entry_price, limit=short_target_price)

plot(short_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Short Entry Price")
plot(short_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Short Target Price")
plot(short_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Short Stop Loss Price") 

// Long exit conditions
if (not na(long_entry_price))
    strategy.exit("Long Exit", from_entry="Buy", limit=long_target_price, stop=long_stop_loss_price)
   
// Short exit conditions
if (not na(short_entry_price))
    strategy.exit("Short Exit", from_entry="Sell", limit=short_target_price, stop=short_stop_loss_price)

// Reset trade status
if (strategy.position_size == 0)
    long_entry_price := na
    long_target_price := na
    long_stop_loss_price := na

    short_entry_price := na
    short_target_price := na
    short_stop_loss_price := na

// Plot the big candle and entry/exit levels
plotshape(series=big_candle_long, location=location.abovebar, style=shape.circle, color=color.green)
plotshape(series=big_candle_short, location=location.abovebar, style=shape.circle, color=color.red)

//plot(long_entry_price, style=plot.style_stepline, color=color.blue, linewidth=2, title="Entry Price")
//plot(long_target_price, style=plot.style_stepline, color=color.green, linewidth=2, title="Target Price")
//plot(long_stop_loss_price, style=plot.style_stepline, color=color.red, linewidth=2, title="Stop Loss Price")


관련

더 많은