Estratégia da Cruz da Morte

Autora:ChaoZhang, Data: 2023-10-11 16:33:18
Tags:

Resumo

Esta estratégia usa o golden cross e o death cross princípios de médias móveis simples para implementar posições longas e curtas para ações.

Estratégia lógica

A estratégia define, em primeiro lugar, o prazo de backtesting e, em seguida, define os parâmetros de cálculo das duas médias móveis, incluindo o tipo de MA e a duração do período.

A função getMAType () calcula os valores dos dois MA. fastMA é o MA de período mais curto e slowMA é o MA de período mais longo.

A lógica central:

  • Quando o fastMA cruza acima do slowMA, um sinal longo é acionado.

  • Quando o fastMA cruza abaixo do slowMA, um sinal curto é acionado.

Por último, durante o backtesting, tomar posição longa quando se vê sinal longo e tomar posição curta quando se vê sinal curto.

Análise das vantagens

  • Uma ideia estratégica simples e clara, fácil de compreender e implementar.
  • Utiliza princípios de cruzamento de MA amplamente aplicados, adequados para a maioria dos produtos de capital.
  • Tipos e parâmetros de MA personalizáveis, elevada adaptabilidade.
  • Estrutura de estratégia modular, funcionalidade clara, fácil de otimizar.

Análise de riscos

  • Os crossovers MA têm algum atraso, podem perder algumas oportunidades comerciais.
  • Não pode filtrar eficazmente os mercados de fenda, propensos a ficarem presos.
  • A otimização de parâmetros não é suficientemente abrangente, requer experiência manual.
  • Incapacidade de controlar eficazmente o risco e as perdas por transação.

Possíveis otimizações face aos riscos:

  1. Adicionar outros indicadores técnicos para a identificação de tendências.

  2. O valor da posição em risco deve ser calculado em função do valor da posição em risco.

  3. Adicione indicadores de volume para evitar mercados de fenda.

  4. Construir mecanismos de otimização de parâmetros para encontrar conjuntos de parâmetros ideais automaticamente.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Adicione estratégias de stop loss como pontos de stop loss fixos ou stop loss de trailing para controlar as perdas.

  2. Adicionar estratégias de dimensionamento de posições, como dimensionamento fixo ou dinâmico de posições, para controlar os riscos comerciais.

  3. Adicionar filtros combinando com outros indicadores técnicos para identificar tendências e melhorar a taxa de vitória.

  4. Otimizar parâmetros por métodos como busca de grade e regressão linear para encontrar valores ideais.

  5. Expandir as estratégias de entrada, como o retiro da fuga, escalar as ordens para enriquecer as táticas comerciais.

  6. Adicione indicadores de volume para evitar mercados de fenda.

  7. Expandir produtos para índices de ações, forex, criptomoedas etc.

Resumo

Esta estratégia implementa a seleção de ações longas / curtas com base nos princípios de cruzamento de MA. A ideia da estratégia é simples e clara, amplamente usada, altamente adaptável e praticamente valiosa. Mas também tem alguns problemas de atraso e filtragem de fenda. As otimizações futuras podem se concentrar em melhorar o stop loss, otimização de parâmetros, adição de filtros etc. para torná-lo mais vantajoso.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

Mais.