Ichimoku Cloud Quant Scalping Estratégia

Autora:ChaoZhang, Data: 21-12-2023 11:13:15
Tags:

img

Resumo

A Ichimoku Cloud Quant Scalping Strategy é uma estratégia quantitativa de curto prazo que integra a Ichimoku Cloud e o Average Directional Index (ADX).

Estratégia lógica

A estratégia consiste em dois componentes principais:

  1. Nuvem Ichimoku para julgar a direção da tendência

    • Linha de conversão: preço médio dos últimos 7 períodos
    • Linha de base: preço médio dos últimos 26 períodos
    • Distança de condução A: ponto médio da linha de conversão e da linha de base
    • Preço médio do último período

    O preço acima da nuvem indica uma tendência de alta, enquanto abaixo significa uma tendência de queda.

  2. ADX para filtrar o mercado não em tendência

    Apenas tomando sinais quando o ADX for superior a 20, sugerindo um mercado em tendência. Nenhuma negociação quando o ADX <20 durante o mercado de gama.

Regras comerciais:

  • Introdução longa: quebras de preços acima da linha de conversão e do ADX>20
  • Introdução curta: quebras de preços abaixo da linha de conversão e do ADX>20
  • Stop Loss: 150 ticks
  • Tome lucro: 200 ticks

Análise das vantagens

As vantagens desta estratégia:

  1. Seguindo a tendência, evitando os intervalos. Ichimoku Cloud pode determinar com precisão a direção da tendência e pontos de virada.

  2. Controle de retirada. 150 tiques de stop loss efetivamente limitam a perda por negociação.

  3. Fator de lucro alto. 200 ticks take profit vs 150 ticks stop loss dá um fator de lucro de 1,33, fácil de ganhar lucros.

  4. Frequência de negociação adequada: só se negocia quando surge uma tendência que evite o excesso de negociação.

Análise de riscos

Os riscos são:

  1. Risco de falha na determinação da tendência. sinal incorreto quando a Ichimoku Cloud não consegue detectar a inversão da tendência. pode otimizar parâmetros para melhorar a precisão.

  2. O risco de perda de parada pode ser atingido durante o mercado rápido. Pode usar perda de parada de atraso ou um intervalo de perda de parada mais amplo.

  3. Risco de negociação overnight e pré-mercado. A configuração padrão permite apenas negociação diurna. O julgamento pode falhar durante horas prolongadas. Pode ativar negociação 24H ou personalizar estratégias para sessões prolongadas.

Orientações de otimização

As potenciais direcções de otimização:

  1. Ajuste de parâmetros da Nuvem Ichimoku para encontrar a configuração ideal.

  2. Parâmetro ADX e otimização do limiar para determinar os melhores valores.

  3. Meta de lucro e otimização de stop loss com base em dados históricos.

  4. Trail stop loss para seguir melhor a tendência.

  5. Indicadores adicionais como MACD e KD para ajudar na determinação da tendência.

  6. Optimização adaptativa para diferentes produtos.

Conclusão

O Ichimoku Cloud Quant Scalping Strategy integra as vantagens do Ichimoku Cloud e do ADX para determinar com precisão os pontos de reversão da tendência e filtrar os mercados de faixa. Ele tem alto fator de lucro, drawdown controlável e é adequado para scalping ao longo da tendência.


/*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)


Mais.