Estratégia quantitativa de média móvel adaptativa


Data de criação: 2023-11-17 17:14:36 última modificação: 2023-11-17 17:14:36
cópia: 0 Cliques: 713
1
focar em
1617
Seguidores

Estratégia quantitativa de média móvel adaptativa

Visão geral

Esta estratégia é baseada em médias móveis, pode ajustar os parâmetros automaticamente e é adequada para mercados com altos períodos de volatilidade. É capaz de encontrar automaticamente a melhor combinação de parâmetros e gerar um sinal de negociação quando o preço quebra a média móvel.

Princípio da estratégia

Esta estratégia usa uma média móvel adaptativa como sinal de negociação. Primeiro, calcula-se uma média móvel simples para o período especificado (start). Em seguida, é testado um conjunto de parâmetros em torno da CMA para determinar qual combinação de linhas CMA é menos tocada pela entidade da linha K e pela linha de sombra.

Concretamente, a estratégia testa o número de vezes que as linhas CMA, as linhas estatísticas e as linhas de sombra as tocam após o ciclo CMA + 1 ((CMA_P1) e - 1 ((CMA_M1). Se a CMA tiver menos vezes de toque do que as linhas CMA_P1 e CMA_M1, mantém-se o ciclo CMA atual; se a CMA_P1 tiver menos vezes de toque, adiciona-se o ciclo CMA1; se a CMA_M1 tiver menos vezes de toque, diminui-se o ciclo CMA1 . Assim, é possível encontrar uma CMA relativamente lisa como linha de sinal.

Quando o preço se move de baixo para cima e ultrapassa a CMA, gera um sinal de compra; quando o preço se move de cima para baixo e ultrapassa a CMA, gera um sinal de venda.

Análise de vantagens

Esta estratégia de média móvel adaptativa tem as seguintes vantagens:

  1. Busca automática de parâmetros ótimos. Não é necessário selecionar manualmente o período da média móvel. A estratégia testa automaticamente os diferentes períodos para encontrar o parâmetro ótimo.

  2. Reduzindo os falsos sinais. Em comparação com as médias móveis de período fixo, as médias móveis adaptáveis podem filtrar mais ruído, reduzindo assim muitos falsos sinais.

  3. Adaptar-se a mudanças no mercado. Quando o mercado entra em uma tendência de liquidação, o ciclo da média móvel aumenta automaticamente para gerar sinais; Quando o mercado entra em uma tendência de liquidação, o ciclo da média móvel diminui automaticamente.

  4. Simplificação do sistema de negociação. Esta forma de adaptação simplifica todo o sistema de negociação, sem a necessidade de parâmetros de otimização manual.

  5. Escalabilidade forte. A ideia da estratégia pode ser generalizada para outros indicadores, projetando estratégias como adaptação à faixa de Brin, adaptação à KD.

Análise de Riscos

A estratégia também apresenta alguns riscos que devem ser lembrados:

  1. Risco de opções binárias. Quando o mercado apresenta um movimento de opções binárias, a linha real não consegue quebrar a média móvel, o que pode causar um sinal errado.

  2. Risco de fracasso de ruptura. A ruptura da média móvel nem sempre é continuada, existindo o risco de fracasso parcial de ruptura. Portanto, é necessário realizar uma verificação de ruptura para garantir a taxa de sucesso da ruptura.

  3. Risco de reversão de tendência. A reversão após a entrada de um mercado de tendência requer uma mudança de direção em tempo hábil, caso contrário, ocasionará perdas.

  4. Risco de otimização de parâmetros. Parâmetros de ajuste adaptativo podem cair em otimização local, resultando em médias móveis claramente redundantes. É necessário introduzir métodos de avaliação de modelos para evitar esse problema.

  5. Risco de otimização excessiva. Os parâmetros de ajuste de adaptação podem ser otimizados em excesso, perdendo a capacidade de generalização do modelo.

Direção de otimização

Esta estratégia de média móvel adaptativa pode ser otimizada para:

  1. Adicionar um mecanismo de verificação de ruptura de tendência para filtrar as falsas rupturas por meio de rupturas contínuas.

  2. Aumentar a estratégia de stop loss quando o preço retorna para o outro lado da média móvel.

  3. Aumentar o mecanismo de filtragem de opções para evitar sinais errados no mercado de opções de compra e venda.

  4. A introdução de indicadores de avaliação para restringir o ajuste de parâmetros, como IC, LIC, SIC, etc., evita que os parâmetros sejam otimizados demais.

  5. Expandir para outros indicadores, projetar estratégias de adaptação de forquilhas, estratégias de adaptação de faixa de Bryn, etc.

  6. Otimizar a forma de calcular as médias móveis, usando médias móveis ponderadas, médias móveis de índices e médias móveis suavizadas.

Resumir

Esta estratégia pode reduzir muitos falsos sinais em comparação com os parâmetros fixos, adaptando-se às mudanças do mercado. Mas também devemos estar atentos a alguns riscos potenciais, que precisam de verificação e otimização da estratégia para obter um lucro estável na negociação real.

||

Overview

This strategy is based on moving average, can automatically adjust parameters, and is suitable for wavy markets at high timeframes. It can automatically find the optimal parameter combination and generate trading signals when price breaks through the moving average line.

Strategy Logic

This strategy uses an adaptive moving average as trading signal. First it calculates the simple moving average (CMA) of the specified period (start). Then it tests the CMA parameters around the period, judging which combination has the least touches by candlestick body and wick. Finally it uses the CMA with the least touches as the signal line.

Specifically, the strategy tests the CMA with period plus 1 (CMA_P1) and minus 1 (CMA_M1), counts the number of touches by body and wick. If CMA has less touches than CMA_P1 and CMA_M1, then keep the current period; if CMA_P1 has less touches, then increase the period by 1; if CMA_M1 has less touches, then decrease the period by 1. This finds a relatively smooth CMA as the signal line.

When price breaks through CMA upward, a buy signal is generated; when price breaks through CMA downward, a sell signal is generated.

Advantage Analysis

This adaptive moving average strategy has the following advantages:

  1. Automatically find optimal parameters. No need to manually select moving average period, the strategy will test different periods and find the optimum.

  2. Reduce false signals. Compared with fixed period MA, the adaptive MA can filter out more noise and reduce many false signals.

  3. Adapt to market changes. When market switches from range-bound to trending, the MA period will automatically increase to generate signals; when market switches from trending to range-bound, the MA period will automatically decrease. So the strategy can dynamically adapt to market changes.

  4. Simplify trading system. This adaptive method can simplify the whole trading system without manual parameter optimization.

  5. Good scalability. The concept can be applied to other indicators like adaptive Bollinger Bands, adaptive KD etc.

Risk Analysis

There are also some risks to note for this strategy:

  1. Call option risk. When market has a call option pattern, the candle body may fail to break the MA line, resulting in wrong signals. Filter conditions need to be added to reduce such risk.

  2. Failed breakout risk. MA breakout does not always continuation, some failed breakouts may occur. Breakout validation is needed to ensure high success rate.

  3. Trend reversal risk. Trend reversal after entering the trend needs to be switched timely, otherwise it may cause losses. Stop loss should be set to control the loss.

  4. Parameter optimization risk. Adaptive adjusted parameters may fall into local optimization, resulting in redundant MAs. Model evaluation methods need to be introduced to avoid this problem.

  5. Overfitting risk. Excessive parameter tuning may lead to overfitting and lose the model generalization ability. Prolonged verification in different market environments is needed, not just rely on backtest results.

Improvement Directions

Some directions to improve this adaptive MA strategy:

  1. Add trend breakout validation via consecutive breakouts to filter false breakouts.

  2. Increase stop loss strategy, stop loss when price moves back to the other side of MA.

  3. Add option filter to avoid wrong signals when call option appears.

  4. Introduce evaluation metrics like IC, LIC, SIC etc. to constrain parameter tuning and prevent overfitting.

  5. Expand to other indicators like adaptive golden cross strategy, adaptive Bollinger Bands etc.

  6. Optimize MA calculation by using weighted MA, exponential MA etc. to get smoother MA.

Summary

This strategy generates trading signals by adaptively adjusting the MA period to find optimal parameters. Compared with fixed parameters, it can reduce many false signals and adapt to market changes. But we also need to watch out for potential risks, and do verification and walk-forward optimization before applying it in live trading for steady profits.

[/trans]

Código-fonte da estratégia
/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 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/
// © fondDealer96636

//@version=5

strategy('Automatic Moving Average', overlay=true, max_bars_back=201, pyramiding=0, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

// input
start = 20
lookback = input(20, "Sensitivity", tooltip="Low (High Sensitivity), High (Low Sensitivity).\n\nAdjust according to timeframe and asset.")
smoothing = input(3, "Smoothing")
source = input(close, "Source")
startYear = input(2020, "Start year")
resp = 1

in_date_range = time >= timestamp(syminfo.timezone, startYear, 1, 1, 0, 0)

// global
var ix = -1
var mal = array.new_int(0)


// functions
avg(source, len) =>
    sum = 0.0
    for i = 0 to len-1
        sum += source[i]
    sum/len

bull = close > open

wick_touch(x) =>
    bull ? ((close <= x and x <= high) or (low <= x and x <= open)) : ((open <= x and x <= high) or (low <= x and x <= close))

body_touch(x) =>
    bull ? (open < x and x < close) : (close < x and x < open)

touches(t) =>
    touches = 0
    for i = 0 to lookback-1
        touches += t[i] ? 1 : 0
    touches


// local
ix := ix+1
prev_mal = ix >= 1 ? array.get(mal, ix-1) : start

cma = avg(source, prev_mal)
cma_p1 = avg(source, prev_mal+1)
cma_m1 = avg(source, prev_mal-1)

d = touches(wick_touch(cma))
d_p1 = touches(wick_touch(cma_p1))
d_m1 = touches(wick_touch(cma_m1))

d_b = touches(body_touch(cma))
d_p1_b = touches(body_touch(cma_p1))
d_m1_b = touches(body_touch(cma_m1))

any_body_touch = d_b > 0 or d_p1_b > 0 or d_m1_b > 0
no_wick_touch = d <= 0 and d_p1 <= 0 and d_m1 <= 0
wick_maximized = d >= d_p1 and d >= d_m1 ? prev_mal : (d_p1 >= d and d_p1 >= d_m1 ? prev_mal+resp : (d_m1 >= d and d_m1 >= d_p1 ? prev_mal-resp : na))

up = cma > cma[1]
down = cma < cma[1]
against_trend = (up and close < cma) or (down and close > cma)

new_mal = no_wick_touch or against_trend ? prev_mal-resp : (any_body_touch ? prev_mal+resp : wick_maximized)
next_mal = na(new_mal) ? prev_mal : new_mal

array.push(mal, next_mal < 2 ? 2 : (next_mal > 200 ? 200 : next_mal))


// graph
scma = ta.ema(cma, smoothing)

uptrend = scma > scma[1]
downtrend = scma < scma[1]

plot(scma, "Automatic MA", color=uptrend ? color.green : color.red)

uptrending = close > scma and uptrend
downtrending = close < scma and downtrend

defy = not uptrending and not downtrending
defy_cross = defy and body_touch(scma)

barcolor(uptrending ? color.lime : (downtrending ? color.red : (defy_cross ? color.black : color.white)))


// strategy
change_to_uptrend = uptrending and downtrend[1]
change_to_downtrend = downtrending and uptrend[1]

long = in_date_range and change_to_uptrend
short = in_date_range and change_to_downtrend

if long
    strategy.entry("Long", strategy.long)
if short
    strategy.entry("Short", strategy.short)