Rotação do ímpeto através dos prazos de tendência Seguindo a estratégia

Autora:ChaoZhang, Data: 2023-11-17 17:32:11
Tags:

img

Resumo

A estratégia usa uma combinação de médias móveis em um quadro de tempo, identificando a rotação de tendências no gráfico de horas médias e médias e realizando uma negociação de rastreamento de tendências de baixo risco. A estratégia possui vantagens de configuração flexível, implementação simples e alta eficiência de capital, adequada para traders que possuem posições médias e longas que seguem tendências.

Análise original

A estratégia usa três médias móveis de 5, 20 e 40 dias para determinar combinações de tendências em diferentes marcos de tempo.

Especificamente, a linha rápida de 5 dias atravessa a linha média de 20 dias e é considerada um sinal de alta da linha curta. A linha lenta de 20 dias atravessa a linha lenta de 40 dias e é considerada um sinal de alta da linha média. Quando a linha rápida de 3 dias está em ordem ((5 dias > 20 dias > 40 dias), é considerada um ciclo de múltiplos cabeças; quando a linha lenta de 3 dias está em linha inversa ((5 dias < 20 dias < 40 dias), é considerada um ciclo de cabeças vazias.

Assim, de acordo com a direção da tendência do grande ciclo, em combinação com a força do pequeno ciclo, a detecção de entradas específicas. Ou seja, apenas quando a grande tendência é idêntica e o pequeno ciclo é forte, a negociação pode ser efetivamente filtrada para filtrar a ruptura de reversão e obter uma operação de alta taxa de vitória.

Além disso, a estratégia também usa o ATR para controlar o risco de uma única transação e aumentar ainda mais o lucro.

Análise de vantagens

  • Configuração flexível, usuários podem ajustar os parâmetros da média móvel para diferentes variedades e preferências de negociação

  • A implementação é simples e fácil de usar para usuários novatos.

  • O uso de capital é mais eficiente e pode aproveitar o efeito de alavancagem do capital.

  • Riscos controlados, mecanismos de stop loss eficazes para evitar perdas significativas

  • Forte capacidade de acompanhar tendências, lucro contínuo após o grande ciclo determinar a direção

  • A taxa de sucesso é mais alta, a qualidade do sinal de negociação é melhor e menos erros de rotação

Riscos e melhorias

  • O julgamento de grandes ciclos depende da classificação da linha média de deslocamento, existindo o risco de erro de julgamento atrasado.

  • Detecção de intensidade de ciclo pequeno com apenas um fio K, que pode ser desencadeado precocemente e pode ser relaxado adequadamente

  • Duração fixa, pode ser optimizada para duração dinâmica

  • Pode considerar a inclusão de condições de filtragem adicionais, como energia de volume de negócios, etc.

  • Experimente diferentes combinações de parâmetros da média móvel para otimizar estratégias

Resumo

A estratégia integra a análise de vários quadros de tempo e o gerenciamento de stop-loss para realizar negociações de rastreamento de tendências de baixo risco. Através da adaptação dos parâmetros, pode ser aplicada a diferentes variedades para atender às necessidades dos seguidores de tendências. Sua decisão de negociação é mais robusta e o sinal é mais eficiente em comparação com os sistemas tradicionais de um único quadro de tempo.

Resumo

Esta estratégia usa uma combinação de médias móveis em diferentes prazos para identificar rotações de tendência nos gráficos horários, diários e semanais.

Lógica de negociação

A estratégia emprega médias móveis de 5, 20 e 40 dias para determinar o alinhamento das tendências em diferentes prazos.

Especificamente, o cruzamento da MA rápida de 5 dias acima da MA média de 20 dias indica uma tendência de alta no curto prazo. O cruzamento da MA média de 20 dias acima da MA lenta de 40 dias sinaliza uma tendência de alta no médio prazo.

Ao determinar a direção dos ciclos maiores e confirmar a força nos ciclos menores, esta estratégia abre posições apenas quando a tendência principal e o impulso menor se alinham.

A estratégia utiliza também as paradas de atraso da ATR para controlar os riscos do comércio único e melhorar ainda mais a rentabilidade.

Vantagens

  • Configurações flexíveis adaptadas a diferentes instrumentos e estilos de negociação

  • Simples de implementar mesmo para traders iniciantes

  • Alta eficiência de capital para maximizar a alavancagem

  • Controle eficaz do risco para evitar perdas significativas

  • Forte tendência na sequência da capacidade de obter lucros sustentados

  • Alta taxa de vitórias devido a sinais robustos e menos whipssaws

Riscos e melhorias

  • Os crossovers MA podem atrasar e causar a detecção tardia da tendência

  • A detecção da intensidade de uma vela pode desencadear entrada prematura, relaxamento.

  • Perda de parada ATR fixa, otimizada para paradas dinâmicas

  • Considere adicionar filtros suplementares como volume

  • Explorar diferentes parâmetros de MA para otimização

Conclusão

Esta estratégia integra análise de vários prazos e gestão de risco para uma tendência de baixo risco após a negociação. Ao ajustar os parâmetros, pode ser adaptada a diferentes instrumentos para atender aos traders de tendência. Em comparação com sistemas de prazos únicos, toma decisões de negociação mais robustas e gera sinais de maior eficiência. Em conclusão, esta estratégia tem boa adaptabilidade do mercado e potencial de desenvolvimento.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-11-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter

// MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad
// *************************************************************************************************************************************************************************************************************************************************************************
show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad')
prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad')

if show_performance
    new_month = month(time) != month(time[1])
    new_year  = year(time)  != year(time[1])
    
    eq = strategy.equity
    
    bar_pnl = eq / eq[1] - 1
    
    cur_month_pnl = 0.0
    cur_year_pnl  = 0.0
    
    // Current Monthly P&L
    cur_month_pnl := new_month ? 0.0 : 
                     (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
    
    // Current Yearly P&L
    cur_year_pnl := new_year ? 0.0 : 
                     (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
    
    // Arrays to store Yearly and Monthly P&Ls
    var month_pnl  = array.new_float(0)
    var month_time = array.new_int(0)
    
    var year_pnl  = array.new_float(0)
    var year_time = array.new_int(0)
    
    last_computed = false
    
    if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(month_pnl)
            array.pop(month_time)
            
        array.push(month_pnl , cur_month_pnl[1])
        array.push(month_time, time[1])
    
    if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(year_pnl)
            array.pop(year_time)
            
        array.push(year_pnl , cur_year_pnl[1])
        array.push(year_time, time[1])
    
    last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1])
    
    // Monthly P&L Table    
    var monthly_table = table(na)
    
    if (barstate.islastconfirmedhistory)
        monthly_table := table.new(position.bottom_center, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
    
        table.cell(monthly_table, 0,  0, "",     bgcolor = #cccccc)
        table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #cccccc)
        table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #cccccc)
        table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #cccccc)
        table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #cccccc)
        table.cell(monthly_table, 5,  0, "May",  bgcolor = #cccccc)
        table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #cccccc)
        table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #cccccc)
        table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #cccccc)
        table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #cccccc)
        table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #cccccc)
        table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #cccccc)
        table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #cccccc)
        table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
    
    
        for yi = 0 to array.size(year_pnl) - 1
            table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
            
            y_color = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0))
            
        for mi = 0 to array.size(month_time) - 1
            m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
            m_col   = month(array.get(month_time, mi)) 
            m_color = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            
            table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))



Mais.