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

다이내믹 포지션 관리 일일 거래 전략

저자:차오장, 날짜: 2024-05-28 11:21:52
태그:

img

전반적인 설명

이 전략은 엄격한 리스크 관리를 유지하면서 작은 수익 목표를 포착하는 데 초점을 맞추는 일정한 일일 거래 접근 방식을 사용합니다. 이 전략은 2021 년부터 역 테스트되었으며 100% 승률로 강력한 성능을 입증했습니다. 전략의 주요 아이디어는 전날의 시장 조건에 따라 각 거래의 시작에서 새로운 긴 또는 짧은 포지션을 개척하는 것입니다. 주요 매개 변수에는 0.3%의 이익 목표와 0.2%의 스톱 로스가 포함되어 있으며 초기 자본은 1000 달러이며 거래 당 수수료는 0.1%입니다.

전략 원칙

이 전략의 핵심 원칙은 이전 거래일의 시장 트렌드를 기반으로 각 거래일의 시작에서 새로운 긴 또는 짧은 포지션을 개척하는 것입니다. 구체적으로, 전날의 포지션이 없다면 전략은 새로운 하루의 시작에서 긴 포지션을 개척합니다. 이미 긴 포지션이 있다면 전략은 0.3%의 이익 목표가 달성되었는지 확인하고 있다면 포지션을 닫습니다. 짧은 포지션의 경우 전략은 0.2%의 스톱 손실이 달성되었는지 확인하고, 그렇다면 짧은 포지션을 닫고 동시에 새로운 긴 포지션을 개척합니다. 이것은 전략이 항상 시장에 노출되는 것을 보장합니다.

전략적 장점

이 매일 거래 전략은 몇 가지 주목할만한 장점을 가지고 있습니다:

  1. 100% 승률: 36개의 종결된 거래에서 전략은 100% 승률을 달성하여 일관된 성과를 강조했습니다.
  2. 동적 포지션 관리: 단기 포지션 스톱-러스 경우 새로운 긴 포지션이 즉시 개설되어 시장 노출이 지속되도록합니다.
  3. 엄격한 리스크 관리: 전략은 0.3%의 수익 목표와 0.2%의 스톱 로스를 설정하여 효과적으로 리스크를 제어합니다.
  4. 규칙적인 시장 참여: 전략은 시장에 규칙적인 참여를 보장하기 위해 매일의 시작에 포지션을 개설합니다.
  5. 강력한 백테스팅 결과: 2021년 백테스팅은 22.2%의 순이익과 13.75%의 최대 마이너다운으로 강력한 성과를 보여줍니다.

전략 위험

전략에 의해 입증 된 인상적인 성과와 위험 통제에도 불구하고 고려해야 할 몇 가지 잠재적 인 위험이 있습니다.

  1. 연속적 인 손실 의 가능성: 백테스팅 의 결과 는 인상적 인 것 이지만, 과거 성과 는 미래 성과 를 보장 하지 않는다. 연속적 인 손실 을 입은 거래 는 이윤 을 침식 할 수 있다.
  2. 블랙 스완 이벤트: 전략은 예상치 못한 이벤트와 극심한 시장 변동에 취약할 수 있으며 예상 이상의 손실로 이어질 수 있습니다.
  3. 레버리지 리스크: 이 전략은 각 거래에 200%의 레버리지를 사용하며 잠재적인 수익을 증폭시키지만 또한 위험을 증가시킵니다.

이러한 위험을 완화하기 위해, 다른 시장과 자산급에 걸쳐 유사한 전략을 적용함으로써 다양화를 고려할 수 있습니다. 변화하는 시장 조건에 적응하기 위해 전략 매개 변수들의 정기적 모니터링과 조정도 중요합니다.

전략 최적화 방향

  1. 매개 변수 최적화: 수익 목표, 스톱 로스 및 기타 주요 매개 변수는 다른 시장 조건에서 최적의 성능을 달성하기 위해 추가 백테스팅 및 최적화를 통해 더 정밀화 할 수 있습니다.
  2. 다각화: 다른 시장과 자산 클래스로 전략을 확장하면 전체 수익률을 높이고 위험을 줄일 수 있습니다.
  3. 역동적인 포지션 크기: 시장 변동성이나 다른 요인에 따라 포지션 크기를 역동적으로 조정하면 위험 조정 수익률을 더욱 최적화 할 수 있습니다.
  4. 추가 필터: 추가 기술 지표 또는 시장 정서 지표를 필터로 도입하면 거래 신호의 품질을 향상시킬 수 있습니다.

결론

전반적으로, 이 일일 거래 전략은 위험 관리와 일관성 있는 수익성에 중점을 둔 내일 거래에 대한 균형 잡힌 접근 방식을 제공합니다. 체계적이고 규율적인 거래 방법론을 추구하는 거래자에게 적합합니다. 이 전략은 100% 승률과 강력한 위험 조정 수익으로 인상적인 백테스팅 결과를 보여주었습니다. 그러나 과거의 성과가 미래의 결과를 보장하지 않으며, 위험을 관리하고 시장 변화에 적응하는 것이 중요하다는 것을 인식하는 것이 중요합니다. 추가 최적화 및 향상으로이 전략은 모든 거래자의 도구 박스에 귀중한 추가가 될 수 있습니다.


/*backtest
start: 2023-05-22 00:00:00
end: 2024-05-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Daily AUD-JPY Trading", overlay=true, initial_capital=1000, currency="AUD", default_qty_type=strategy.percent_of_equity, default_qty_value=200, commission_type=strategy.commission.percent, commission_value=0.1)

// Input parameters
profit_target = input(0.3, title="Profit Target (%)") / 100
loss_target = input(0.2, title="Loss Target (%)") / 100
start_year = input(2021, title="Start Year")

// Calculate daily open and close
new_day = ta.change(time("D"))

var float entry_price_long = na
var float entry_price_short = na
var bool position_long_open = false
var bool position_short_open = false

// Date check
trade_start = timestamp(start_year, 1, 1, 0, 0)

if new_day and time >= trade_start
    // If there was a previous long position, check for profit target
    if position_long_open
        current_profit_long = (close - entry_price_long) / entry_price_long
        if current_profit_long >= profit_target
            strategy.close("AUD Trade Long", comment="Take Profit Long")
            position_long_open := false
    
    // If there was a previous short position, check for profit target
    if position_short_open
        current_profit_short = (entry_price_short - close) / entry_price_short
        if current_profit_short >= profit_target
            strategy.close("AUD Trade Short", comment="Take Profit Short")
            position_short_open := false

    // Check for daily loss condition for short positions
    if position_short_open
        current_loss_short = (close - entry_price_short) / entry_price_short
        if current_loss_short <= -loss_target
            strategy.close("AUD Trade Short", comment="Stop Loss Short")
            position_short_open := false
            
            // Open a new long position to replace the stopped short position
            strategy.entry("AUD Trade Long Replacement", strategy.long)
            entry_price_long := close
            position_long_open := true

    // Open a new long position at the start of the new day if no long position is open
    if not position_long_open and not position_short_open
        strategy.entry("AUD Trade Long", strategy.long)
        entry_price_long := close
        position_long_open := true

    // Open a new short position at the start of the new day if no short position is open
    if not position_short_open and not position_long_open
        strategy.entry("AUD Trade Short", strategy.short)
        entry_price_short := close
        position_short_open := true

// Check for continuous profit condition for long positions
if position_long_open
    current_profit_long = (close - entry_price_long) / entry_price_long
    if current_profit_long >= profit_target
        strategy.close("AUD Trade Long", comment="Take Profit Long")
        position_long_open := false

// Check for continuous profit condition for short positions
if position_short_open
    current_profit_short = (entry_price_short - close) / entry_price_short
    if current_profit_short >= profit_target
        strategy.close("AUD Trade Short", comment="Take Profit Short")
        position_short_open := false

// Plot the entry prices on the chart
plot(position_long_open ? entry_price_long : na, title="Entry Price Long", color=color.green, linewidth=2)
plot(position_short_open ? entry_price_short : na, title="Entry Price Short", color=color.red, linewidth=2)

// Display current profit/loss percentage for long positions
var label profit_label_long = na
if position_long_open and not na(entry_price_long)
    current_profit_long = (close - entry_price_long) / entry_price_long * 100
    label.delete(profit_label_long)
    profit_label_long := label.new(x=time, y=high, text="Long P/L: " + str.tostring(current_profit_long, format.percent), style=label.style_label_down, color=color.white, textcolor=color.black,xloc=xloc.bar_time)

// Display current profit/loss percentage for short positions
var label profit_label_short = na
if position_short_open and not na(entry_price_short)
    current_profit_short = (entry_price_short - close) / entry_price_short * 100
    label.delete(profit_label_short)
    profit_label_short := label.new(x=time, y=high, text="Short P/L: " + str.tostring(current_profit_short, format.percent), style=label.style_label_down, color=color.white, textcolor=color.black,xloc=xloc.bar_time)

더 많은