스윙 트레이딩 지표 전략


생성 날짜: 2023-12-12 12:44:50 마지막으로 수정됨: 2023-12-12 12:44:50
복사: 0 클릭수: 397
1
집중하다
1212
수행원

스윙 트레이딩 지표 전략

개요

이 전략은 이동 평균 지표 ((MACD) 를 사용하여 다공간 신호를 구축하고, 동적으로 오프 포지션을 설정하여 수익을 얻기 위해 트렌드 좋은 조건에서 역전 거래합니다.

전략 원칙

이 전략은 주로 MACD 지표의 골드 포크 다중 신호, 데드 포크 공백 신호에 기초한다. 구체적으로, MACD 라인이 아래에서 위쪽으로 신호 라인을 통과할 때 골드 포크 다중 신호를 생성한다. MACD 라인이 위에서 아래로 신호 라인을 통과할 때 데드 포크 공백 신호를 생성한다.

골드 포크 신호가 왔을 때, 닫기 가격이 EMA 평균선보다 높으면 더 많이 한다. 죽은 포크 신호가 왔을 때, 닫기 가격이 EMA 평균선보다 낮으면 공백한다. 이것은 큰 추세 아래 역전 거래를 보장 할 수 있다.

진입 후, 전략은 중지 및 중지 위치를 사용하여 동적으로 중지 / 중지합니다. 구체적으로, 여러 단 하나의 중지 지점은 진입 가격으로 설정됩니다.(1- 최대 하락);(1+TARGET_STOP_RATIO*최대 하락) △ 공명 설정을 역으로 △ 최대 하락은 동적으로 계산되어, 스윙 로브에서 종결 가격의 비율이 하락 공간을 나타냅니다. TARGET_STOP_RATIO는 2을 기본으로, 이윤 손실 비율은 2 △이다.

이렇게 설정된 오프치의 장점은 시장의 변동 상황에 따라 연금 손실 비율과 중지 손실을 동적으로 조정할 수 있다는 것입니다. 큰 변동에 오프치의 빠른 중지, 작은 변동에 중지 추적.

전략적 이점

  1. MACD 지표를 사용하여 다공이 신호를 구성하여 가격 반전의 시간을 효과적으로 판단 할 수 있습니다.

  2. EMA 평행선과 결합하여 필터로, 진입시 트렌드 상향 상태를 선택하여 역동 거래를 피하십시오.

  3. 동적 오프 경기 제어 시스템, 실시간으로 수익률, 스톱 손실을 조정할 수 있으며, 높은 수익을 추구하면서 위험을 제어할 수 있습니다.

  4. 시장의 변동성을 고려하여 출장 속도가 빠르므로, 시가시장 시간을 줄일 수 있으며, 바쁜 투자자에게는 더 적합하다.

전략적 위험과 해결

  1. MACD 지표는 수평으로 정리된 시장에서 종종 가짜 신호를 발생시킨다. 해결책은 평행선을 필터로 추가하여 역전 거래를 피하는 것이다.

  2. 극단적으로 큰 변동이 있는 시장에서, DYNAMIC STOP는 너무 느슨한 중지 손실을 초래할 수 있지만 대부분의 시나리오에서 더 잘 작동합니다. 극단적인 상황이 발생하면 고정 적당률을 고려할 수 있습니다.

  3. 이윤의 여지가 제한되어 있으며, 이윤을 추구하기 위해 자주 거래해야 한다. 이것은 투자자의 특정한 심리적 용인력과 시간 투자가 필요하다. 만약 여유가 없다면, 높은 주기로 조정하는 것을 고려할 수 있다.

최적화 방향

  1. 특정 품종 특성에 따라 MACD 파라미터를 조정하고, 골드 포크 데드 포크 거래 효과를 최적화한다.

  2. 트렌드를 판단하는 지표로 다양한 이동 평균을 테스트하여 더 나은 필터를 찾습니다.

  3. TARGET_STOP_RATIO, 최대 하락 계산 방법을 테스트하고, 스톱 스톱 손실 전략을 최적화한다.

  4. 거래량 변화, 변동률 등과 같은 다른 조건 판단을 추가하여 신호 품질을 향상시킵니다.

  5. 기계 학습 알고리즘을 사용하여 더 많은 특징을 정제하고, 더 지능적인 스톱 스톱 손실을 위해 동적 다중 인자 모델을 구축하십시오.

요약하다

이 전략은 전체적으로 강력한 실용성을 가지고 있다. MACD를 핵심 거래 신호로 삼고, 트렌드 판단과 동적 오프 포드 제어 두 가지 보조 모듈을 추가하면 MACD 자체의 거래 효과를 크게 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 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/
// © maxencetajet

//@version=5
strategy("MACD Strategy", overlay=true, initial_capital=1000, slippage=25)

src = input(title="Source", defval=close)
target_stop_ratio = input.float(title='Risk/Reward', defval=2, minval=0.5, maxval=100)
risk = input.float(2, title="Risk per Trade %")

riskt = risk / 100 + 1

useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow =  true
emaV = input.int(200, title="Length", group="EMA")
swingHighV = input.int(7, title="Swing High", group="number of past candles")
swingLowV = input.int(7, title="Swing Low", group="number of past candles")

ema = ta.ema(src, emaV)

fast_length = input(title="Fast Length", defval=12, group="MACD")
slow_length = input(title="Slow Length", defval=26, group="MACD")
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

longcondition = close > ema and ta.crossover(macd, signal) and macd < 0
shortcondition = close < ema and ta.crossunder(macd, signal) and macd > 0

float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na

risk_long := risk_long[1]
risk_short := risk_short[1]

swingHigh = ta.highest(high, swingHighV)
swingLow = ta.lowest(low, swingLowV)

lotB = (strategy.equity*riskt-strategy.equity)/(close - swingLow)
lotS = (strategy.equity*riskt-strategy.equity)/(swingHigh - close)

if strategy.position_size == 0 and longcondition and inTradeWindow
    risk_long := (close - swingLow) / close
    strategy.entry("long", strategy.long, qty=lotB)
    
if strategy.position_size == 0 and shortcondition and inTradeWindow
    risk_short := (swingHigh - close) / close  
    strategy.entry("short", strategy.short, qty=lotS)

if strategy.position_size > 0

    stopLoss := strategy.position_avg_price * (1 - risk_long)
    takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long)
    entry_price := strategy.position_avg_price
    strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit)
    
if strategy.position_size < 0

    stopLoss := strategy.position_avg_price * (1 + risk_short)
    takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short)
    entry_price := strategy.position_avg_price
    strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit)
    
plot(ema, color=color.white, linewidth=2, title="EMA")
p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit')
fill(p_sl, p_ep, color.new(color.red, transp=85))
fill(p_tp, p_ep, color.new(color.green, transp=85))