
이치모쿠 클라우드 양스컬핑 전략 (Ichimoku Cloud Quant Scalping Strategy) 은 일차 균형표와 평균 방향 지수를 결합한 단선 양스컬핑 전략이다. 이 전략은 이치모쿠 클라우드 지표를 사용하여 트렌드 방향을 판단하고, ADX 지표 필터링 비 트렌드 시장과 함께 트렌드 상황에서 단선 작업을 수행한다.
이 전략은 크게 두 가지로 구성됩니다.
이치모쿠 클라우드 지표는 트렌드 방향을 판단합니다.
가격이 클라우드 상단에 있을 때 다목적 트렌드이고, 아래에 있을 때는 공중적 트렌드이다. 전략은 변환 선의 돌파구를 통해 트렌드의 전환을 판단한다.
ADX가 20보다 크면 트렌드상태를 나타내고, 이 때 전략이 거래 신호를 생성한다. 20보다 작은 것은 정리된 상태를 나타내고, 이 때 전략은 거래되지 않는다.
거래 규칙:
이 전략은 다음과 같은 장점을 가지고 있습니다.
트렌드를 곱해서 상향조정을 피한다. 이치모쿠 클라우드 지표는 트렌드 방향과 전환점을 정확하게 판단하고, ADX 지표와 함께 상향조정을 필터링하여 가짜 돌파구를 피한다.
철회 제어 스톱 손실을 150점으로 설정하여 단일 손실을 효과적으로 제어 할 수 있다.
이윤과 손실의 비율이 높습니다. 중지 200점, 중지 150점, 이윤과 손실의 비율이 1.33까지 높습니다. 이윤을 쉽게 얻습니다.
거래 빈도는 적당하다. 트렌드 상황에서만 거래하고, 자주 출입하지 않는다.
이 전략에는 다음과 같은 위험도 있습니다.
트렌드 판단 실패 위험。 이치모쿠 클라우드 지표 판단 트렌드가 실패로 변할 때 잘못된 신호를 발생한다。 적절한 변수 주기를 연장하여 최적화할 수 있다。
스톱 손실이 쫓겨나는 위험. 빠른 시일에서의 중단 손실이 뚫릴 수 있다. 이동 스톱 손실을 설정하거나 스톱 손실 범위를 증가시키는 것을 고려할 수 있다.
야시장과 상장 전 거래 위험. 전략은 기본적으로 낮시장에서만 거래되며, 야시장과 상장 전의 움직임 판단은 무효가 될 수 있다. 24시간 거래를 설정하거나 상장 전 상장 후 개별적으로 거래 전략을 수립할 수 있다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
이치모쿠 클라우드 지표 변수 최적화. 다양한 변환선, 기준선, 선택선 변수를 테스트하여 최적의 변수 조합을 찾을 수 있다.
ADX 변수 및 값 최적화. ADX의 주기 변수 및 필러브 값을 테스트하여 최적의 변수를 찾을 수 있다.
스톱 스톱 손실 최적화. 역학적 데이터 재검토에 따라 최적의 스톱 스톱 손실 지점을 결정할 수 있다.
모바일 스톱 전략. 트렌드 수익을 더 잘 추적하기 위해 부동 스톱을 설정합니다.
트렌드 판단 보조 지표. MACD, KD 등의 지표가 트렌드 판단 보조 지표로 추가되어 신호 정확도가 향상된다.
적응성 최적화. 차이가 큰 품종을 위해 개별적으로 거래 전략 매개 변수를 개발한다.
이치모쿠 클라우드 양적 단선 전략은 이치모쿠 클라우드 지표와 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)