Estratégia quantitativa de dois indicadores

Autora:ChaoZhang, Data: 2023-12-29 16:29:21
Tags:

img

Resumo

Esta estratégia é uma estratégia combinada baseada no indicador EMA duplo e no indicador Bull Power.

Estratégia lógica

A estratégia consiste em duas partes:

  1. Indicador 2/20 EMA. Este indicador calcula a EMA de 2 dias e 20 dias. Gerar sinais de compra quando o preço cruza acima da EMA e sinais de venda quando o preço cruza abaixo da EMA.

  2. Indicador Bull Power. Este indicador calcula o poder de alta/baixa com base na relação do bar atual com o bar anterior. Gerar sinais de negociação quando o poder de alta/baixa excede o limiar.

Os dois sinais partes precisam ser acionados ao mesmo tempo para abrir posições. Por exemplo, a cruz de ouro EMA e o poder de touro são posições abertas longas positivas, enquanto a cruz morta EMA e o poder de touro são posições abertas curtas negativas.

Análise das vantagens

  1. Combine indicadores para filtrar sinais falsos. Um único indicador é propenso a ser influenciado por fatores externos que geram sinais falsos. A combinação de indicadores duplos pode verificar um ao outro e filtrar sinais falsos, melhorando a qualidade do sinal.
  2. Parâmetros personalizáveis: os períodos de EMA e limiar de Bull Power são personalizáveis para se adaptarem aos diferentes ambientes de mercado.
  3. A estratégia utiliza apenas dois indicadores comuns com uma lógica simples e clara, fácil de compreender e implementar.

Análise de riscos

  1. Risco de falha do indicador: apesar da utilização de indicadores combinados, condições de mercado extremas podem ainda causar falha do indicador.
  2. Risco de otimização de parâmetros: configurações inadequadas de parâmetros podem levar a negociações insuficientes ou excessivas, prejudicando o desempenho da estratégia. Requer testes suficientes para encontrar parâmetros ideais.

Orientações de otimização

  1. Adicionar mecanismos de stop loss. definir movendo ou lookback stop loss para controlar perda de negociação única.
  2. Otimize as configurações dos parâmetros. Teste diferentes combinações de parâmetros para encontrar os parâmetros ideais para um melhor desempenho.
  3. Adicionar condições de filtragem Adicionar condições como volumes de negociação ou volatilidade para filtrar condições anormais de mercado ao abrir posições.

Conclusão

A estratégia realiza decisões de negociação através da combinação de indicadores EMA e Bull Power duplos. Em comparação com as estratégias de indicador único, a combinação elimina sinais falsos de forma eficaz, mantendo parâmetros personalizáveis. Em conclusão, esta estratégia apresenta simplicidade, flexibilidade e forte praticidade como uma estratégia de negociação quantitativa.


/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/07/2022
// This is combo strategies for get a cumulative signal.  
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//  Bull Power Indicator
//  To get more information please see "Bull And Bear Balance Indicator" 
//  by Vadim Gimelfarb. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BP(SellLevel) =>
    pos = 0.0
    value = close < open ?  
             close[1] < open ?  math.max(high - close[1], close - low): math.max(high - open, close - low):
              close > open ? 
               close[1] > open ?  high - low : math.max(open - close[1], high - low) : 
                 high - close > close - low ? 
                  close[1] < open ? math.max(high - close[1], close - low) : high - open : 
                   high - close < close - low ? 
                     close[1] > open ?  high - low : math.max(open - close, high - low) : 
                      close[1] > open ? math.max(high - open, close - low) :
                       close[1] < open? math.max(open - close, high - low): high - low
    val2 = ta.sma(value, 15)                   
    pos :=  val2 > SellLevel ? 1 : -1
    pos

strategy(title='Combo 2/20 EMA & Bull Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Bull Power ═════●'
SellLevel = input.float(-15, step=0.01, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBP = BP(SellLevel)
iff_1 = posEMA20 == -1 and prePosBP == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBP == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Mais.