Estratégia quantitativa de duas vertentes


Data de criação: 2023-12-29 16:29:21 última modificação: 2023-12-29 16:29:21
cópia: 0 Cliques: 601
1
focar em
1621
Seguidores

Estratégia quantitativa de duas vertentes

Visão geral

A estratégia é uma estratégia combinada baseada em dois indicadores EMA e um indicador Bull Power. O nome da estratégia inclui as palavras-chave de alumínio e alumínio em dupla linha, destacando a sua utilização de dois indicadores independentes.

Princípio da estratégia

A estratégia consiste em duas partes:

  1. O indicador calcula os EMAs de 2 e 20 dias, gerando um sinal de compra quando o preço atravessa o EMA de cima para baixo e um sinal de venda quando o preço atravessa o EMA de cima para baixo.
  2. O indicador calcula a força de bullish baseado na relação entre a linha K atual e a linha K anterior, gerando um sinal de negociação correspondente quando a força de bullish é maior do que o limite definido.

Os dois segmentos de sinais precisam ser acionados simultaneamente para abrir uma posição. Por exemplo, o EMA Gold Fork e o Bull Power são iguais a positivos para abrir mais posições, e o EMA Dead Fork e o Bull Power são iguais a negativos para abrir uma posição vazia.

Análise de vantagens

  1. Indicadores de combinação dupla filtrar falsos sinais. Indicadores individuais são suscetíveis a efeitos externos para produzir falsos sinais, indicadores de combinação podem verificar uns aos outros, filtrar falsos sinais, melhorar a qualidade do sinal.
  2. Os parâmetros do indicador são ajustáveis. O ciclo EMA e o limiar de Bull Power podem ser configurados de forma personalizada para adaptar-se a diferentes condições de mercado.
  3. Simples e claro. A estratégia utiliza apenas dois indicadores comuns, e os princípios são simples e fáceis de entender.

Análise de Riscos

  1. Risco de falha do indicador. Mesmo com um indicador combinado, pode ocorrer falha do indicador em situações extremas.
  2. Risco de otimização de parâmetros. A configuração inadequada de parâmetros pode levar a excesso de negociações e reduzir a eficácia da estratégia.

Direção de otimização

  1. Aumentar o mecanismo de stop loss. Pode-se definir o stop loss móvel ou o stop loss revertido para controlar a perda individual.
  2. Optimizar a configuração dos parâmetros. Você pode testar diferentes combinações de parâmetros para encontrar o melhor parâmetro para obter melhores resultados de estratégia.
  3. Adicionar condições de filtragem. Você pode adicionar condições de filtragem de volume ou volatilidade semelhantes às condições de abertura de posição, filtrando algumas situações anormais.

Resumir

A estratégia permite a tomada de decisões de negociação por meio da combinação de aplicativos de dupla EMA e Bull Power. Em comparação com o indicador individual, o indicador de combinação pode filtrar de forma eficaz os falsos sinais, mantendo a qualidade do sinal de negociação e, ao mesmo tempo, com espaço para ajuste de parâmetros. Em geral, a estratégia é simples e fácil de entender, flexível para a aplicação prática e é uma estratégia de negociação quantitativa de alta praticidade.

Código-fonte da estratégia
/*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)