
A estratégia de inversão de tendência do padrão da rede de pacotes é uma estratégia de negociação de inversão de tendência baseada na linha de tendência móvel. A estratégia usa a linha de tendência móvel de dois índices como base e adiciona várias faixas de pacotes acima e abaixo dela. Quando o preço toca a faixa de pacotes, a posição é aberta ou fechada de acordo com a direção. Quando o preço retorna à linha de tendência, a posição é retirada.
A estratégia usa a média móvel de dois índices (DEMA) como indicador básico. A média móvel de dois índices é uma média móvel com alta sensibilidade às mudanças de preço. Com base nela, a estratégia adiciona várias faixas de preço em ambos os lados, em cima e em baixo, formando uma rede de blocos de linha uniforme.
Quando o preço sobe e se aproxima da banda de cobertura superior, a estratégia abre uma posição a zero; quando o preço cai e toca a banda de cobertura inferior, a estratégia abre mais. Cada vez que uma nova banda de preço é tocada, a estratégia aumenta a posição uma vez. Quando o preço retorna perto da média móvel, a estratégia liquida todas as posições.
Esta estratégia capta a excesso de flutuação dos preços através de um circuito circundante e retira-se do lucro quando a reversão se aproxima, alcançando o objetivo de negociação de compra e venda baixos. Ela se aplica a um ciclo de mercado com características de retorno ao valor médio visíveis, como moedas digitais como o Bitcoin.
Pode-se reduzir o risco por meio da flexibilização apropriada do alcance da rede de pacotes, aumentando a sensibilidade às mudanças de preço desencadeadas. Ao mesmo tempo, ajustar os parâmetros de comprimento da linha média móvel para adaptar-se a diferentes circunstâncias do ciclo.
A estratégia pode ser melhorada em vários aspectos:
Otimizar algoritmos de média móvel. Pode testar o efeito de diferentes tipos de indicadores de média móvel.
Ajustar o parâmetro de comprimento da linha média. Reduzir o ciclo pode melhorar a captura de mudanças de preços de curto prazo, mas também pode aumentar a negociação de ruído.
Optimizar os parâmetros da rede de pacotes. Você pode testar diferentes configurações de porcentagem para encontrar a combinação de parâmetros ideal.
Aumentar a estratégia de stop loss. Definir um stop loss móvel ou um stop loss reversível para controlar efetivamente a perda individual.
Aumentar as condições de filtragem. Em combinação com outros sinais de indicadores, evitar a abertura de posições inválidas sob circunstâncias irracionais.
A estratégia de valor médio da rede de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de retorno de ret
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )
// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN
// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders")
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")
// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
if(ma_type == '1. SMA')
ta.sma(src, ma_window)
if(ma_type == '2. EMA')
ta.ema(src, ma_window)
if(ma_type == '3. RMA')
ta.rma(src, ma_window)
if(ma_type == '4. DEMA')
2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)
ma_base = ma_funct()
ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na
ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na
// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))
if use_short
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))
strategy.exit('close', limit=ma_base)
// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)
ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)
ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)