이치모쿠 클라우드 퀀트 스칼핑 전략

저자:차오장, 날짜: 2023-12-21 11:13:15
태그:

img

전반적인 설명

이치모쿠 클라우드 양자 스칼핑 전략 (Ichimoku Cloud Quant Scalping Strategy) 은 이치모쿠 클라우드와 평균 방향 지표 (Advance Directional Index, ADX) 를 통합한 단기 양적 전략이다. 이치모쿠 클라우드를 사용하여 트렌드 방향을 결정하고 ADX를 사용하여 트렌드 조건에서 스칼핑을 위해 트렌드 아닌 시장을 필터한다.

전략 논리

이 전략은 두 가지 주요 구성 요소로 구성됩니다.

  1. 이치모쿠 클라우드 트렌드 방향 판단

    • 전환선: 지난 7개 기간의 중간 가격
    • 기본선: 지난 26개 기간 중간에 있는 가격
    • 선선 A: 변환선과 기본선의 중간점
    • 리딩 스판 B: 지난 52개 기간의 중간 가격

    클라우드 위의 가격은 상승 추세를 나타내고 아래는 하락 추세를 나타냅니다. 전략은 트렌드의 반전을 결정하기 위해 변환 라인의 파장을 사용합니다.

  2. ADX는 트렌드 없는 시장을 필터링합니다.

    ADX가 20보다 높을 때만 신호를 받습니다. 트렌딩 시장을 시사합니다. ADX가 범위에 묶여있는 시장에서 <20일 때 거래가 없습니다.

무역 규칙:

  • 롱 엔트리: 전환 라인 및 ADX>20 이상의 가격 파업
  • 짧은 입점: 전환선 아래의 가격 파열 및 ADX>20
  • 스톱 로스: 150 틱
  • 이윤을 취하라 200 틱

이점 분석

이 전략의 장점:

  1. 트렌드를 따라, 범위를 피합니다. 이치모쿠 클라우드는 트렌드 방향과 전환점을 정확하게 결정할 수 있습니다. ADX는 잘못된 브레이크오프를 방지하기 위해 범위를 제한하는 시장을 필터합니다.

  2. 마감 통제. 거래당 150개의 스톱 손실 제한이 있습니다.

  3. 높은 이윤 요인 200 틱은 이윤을 취하고 150 틱은 스톱 로스를 취하면 이윤 요인이 1.33입니다. 이윤을 얻는 것이 쉽습니다.

  4. 적절한 거래 빈도: 트렌드가 나타나면만 거래하면 과잉 거래가 방지됩니다.

위험 분석

위험은 다음과 같습니다.

  1. 트렌드 결정 실패 위험. 이치모쿠 클라우드가 트렌드 반전을 감지하지 못할 때 잘못된 신호. 정확도를 향상시키기 위해 매개 변수를 최적화 할 수 있습니다.

  2. 스톱 로스는 타격 위험이 있습니다. 스톱 로스는 빠른 시장에서 침투 할 수 있습니다. 후속 스톱 로스 또는 더 넓은 스톱 로스 범위를 사용할 수 있습니다.

  3. 오버나이트 및 프리마켓 거래 위험. 기본 설정은 낮 거래만 허용합니다. 판단은 연장 시간 동안 실패 할 수 있습니다. 24H 거래를 활성화하거나 연장 세션에 대한 전략을 사용자 정의 할 수 있습니다.

최적화 방향

잠재적인 최적화 방향:

  1. 이치모쿠 클라우드의 매개 변수를 조정하여 최적의 설정을 찾습니다.

  2. ADX 매개 변수 및 가장 좋은 값을 결정하기 위한 임계 최적화

  3. 수익 목표와 역사적인 데이터에 기초한 스톱 손실 최적화

  4. 트렌드를 더 잘 따라가기 위해 손해를 멈추는 것.

  5. 추세 결정에 도움이 되는 MACD와 KD와 같은 추가 지표

  6. 다른 제품들에 대한 적응적 최적화

결론

이치모쿠 클라우드 양자 스칼핑 전략은 이치모쿠 클라우드 및 ADX의 장점을 통합하여 트렌드 반전 지점을 정확하게 결정하고 범위 제한 시장을 필터링합니다. 높은 수익 인자, 제어 가능한 드라우다운이 있으며 트렌드를 따라 스칼핑에 적합합니다. 매개 변수, 스톱 로스, 보조 지표의 추가 개선은 안정성과 수익성을 향상시킬 수 있습니다. 이치모쿠 클라우드 양자 스칼핑 전략은 이치모쿠 클라우드 및 ADX의 장점을 통합하여 트렌드 반전 지점을 정확하게 결정하고 범위 제한 시장을 필터링합니다. 이치모쿠 클라우드 양자 스칼핑 전략은 높은 수익 인자, 제어 가능한 드라우다운을 가지고 있으며 트렌드를 따라 스칼핑에 적합합니다. 이치모쿠 클라우드 및 ADX의 장점을 통합하여 안정성과 수익성을 향상시킬 수 있습니다.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-20 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]Spot/Binary Scalper V0', shorttitle='IC', overlay=true, initial_capital=100000, currency=currency.USD)
//  ||  Adapted from:
//  ||      http://www.binaryoptionsedge.com/topic/1414-ta-spot-scalping-it-works-damn-good/?hl=singh

//  ||  Ichimoku cloud:
conversionPeriods = input(title='Conversion Periods:',  defval=7, minval=1),
basePeriods = 26//input(title='Base Periods',  defval=26, minval=1)
laggingSpan2Periods = 52//input(title='Lagging Span:',  defval=52, minval=1),
displacement = 26//input(title='Displacement:',  defval=26, minval=1)

f_donchian(_len) => avg(lowest(_len), highest(_len))

f_ichimoku_cloud(_conversion_periods, _base_periods, _lagging_span)=>
    _conversion_line = f_donchian(_conversion_periods)
    _base_line = f_donchian(_base_periods)
    _lead_line1 = avg(_conversion_line, _base_line)
    _lead_line2 = f_donchian(_lagging_span)
    [_conversion_line, _base_line, _lead_line1, _lead_line2]

[conversionLine, baseLine, leadLine1, leadLine2] = f_ichimoku_cloud(conversionPeriods, basePeriods, laggingSpan2Periods)

//ps0 = plot(title='A', series=leadLine1, color=green, linewidth=2)
//ps1 = plot(title='B', series=leadLine2, color=red, linewidth=2)
//fill(title='AB', plot1=ps0, plot2=ps1, color=blue, transp=80)
//plot(title='Base', series=baseLine, color=blue, linewidth=1, offset=displacement)
plot(title='Conversion', series=conversionLine, color=blue, linewidth=1)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  ADX
len = input(title="Length",  defval=14)
th = input(title="threshold",  defval=20)

TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0


SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  Trade session:
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  Strategy:
trade_size = input(title='Trade Size:',  defval=1)
stop_loss_in_ticks = input(title='Stop Loss in ticks:',  defval=150)
take_profit_in_ticks = input(title='Take Profit in ticks:',  defval=200)

buy_icloud_signal = open < conversionLine and close > conversionLine
buy_adx_signal = DIPlus > 20
buy_signal = istradingsession and buy_icloud_signal and buy_adx_signal

sel_icloud_signal = open > conversionLine and close < conversionLine
sel_adx_signal = DIMinus > 20
sel_signal = istradingsession and sel_icloud_signal and sel_adx_signal


strategy.order('buy', long=true, qty=trade_size, comment='buy', when=buy_signal)
strategy.order('sel', long=false, qty=trade_size, comment='sel', when=sel_signal)

strategy.exit('exit buy', from_entry='buy', profit=take_profit_in_ticks, loss=stop_loss_in_ticks)
strategy.exit('exit sel', from_entry='sel', profit=take_profit_in_ticks, loss=stop_loss_in_ticks)


더 많은