이치모쿠 클라우드 양자 스칼핑 전략 (Ichimoku Cloud Quant Scalping Strategy) 은 이치모쿠 클라우드와 평균 방향 지표 (Advance Directional Index, ADX) 를 통합한 단기 양적 전략이다. 이치모쿠 클라우드를 사용하여 트렌드 방향을 결정하고 ADX를 사용하여 트렌드 조건에서 스칼핑을 위해 트렌드 아닌 시장을 필터한다.
이 전략은 두 가지 주요 구성 요소로 구성됩니다.
이치모쿠 클라우드 트렌드 방향 판단
클라우드 위의 가격은 상승 추세를 나타내고 아래는 하락 추세를 나타냅니다. 전략은 트렌드의 반전을 결정하기 위해 변환 라인의 파장을 사용합니다.
ADX는 트렌드 없는 시장을 필터링합니다.
ADX가 20보다 높을 때만 신호를 받습니다. 트렌딩 시장을 시사합니다. ADX가 범위에 묶여있는 시장에서 <20일 때 거래가 없습니다.
무역 규칙:
이 전략의 장점:
트렌드를 따라, 범위를 피합니다. 이치모쿠 클라우드는 트렌드 방향과 전환점을 정확하게 결정할 수 있습니다. ADX는 잘못된 브레이크오프를 방지하기 위해 범위를 제한하는 시장을 필터합니다.
마감 통제. 거래당 150개의 스톱 손실 제한이 있습니다.
높은 이윤 요인 200 틱은 이윤을 취하고 150 틱은 스톱 로스를 취하면 이윤 요인이 1.33입니다. 이윤을 얻는 것이 쉽습니다.
적절한 거래 빈도: 트렌드가 나타나면만 거래하면 과잉 거래가 방지됩니다.
위험은 다음과 같습니다.
트렌드 결정 실패 위험. 이치모쿠 클라우드가 트렌드 반전을 감지하지 못할 때 잘못된 신호. 정확도를 향상시키기 위해 매개 변수를 최적화 할 수 있습니다.
스톱 로스는 타격 위험이 있습니다. 스톱 로스는 빠른 시장에서 침투 할 수 있습니다. 후속 스톱 로스 또는 더 넓은 스톱 로스 범위를 사용할 수 있습니다.
오버나이트 및 프리마켓 거래 위험. 기본 설정은 낮 거래만 허용합니다. 판단은 연장 시간 동안 실패 할 수 있습니다. 24H 거래를 활성화하거나 연장 세션에 대한 전략을 사용자 정의 할 수 있습니다.
잠재적인 최적화 방향:
이치모쿠 클라우드의 매개 변수를 조정하여 최적의 설정을 찾습니다.
ADX 매개 변수 및 가장 좋은 값을 결정하기 위한 임계 최적화
수익 목표와 역사적인 데이터에 기초한 스톱 손실 최적화
트렌드를 더 잘 따라가기 위해 손해를 멈추는 것.
추세 결정에 도움이 되는 MACD와 KD와 같은 추가 지표
다른 제품들에 대한 적응적 최적화
이치모쿠 클라우드 양자 스칼핑 전략은 이치모쿠 클라우드 및 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)