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.
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.
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
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
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.
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.
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.
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
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
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))