
A estratégia de filtragem de vibração de onda dupla é uma estratégia de negociação baseada na volatilidade dos preços. Utiliza um indicador de gama de flutuação média de dois diferentes parâmetros, combinando a relação entre o preço e a gama de flutuação, para gerar um sinal de negociação. A estratégia é adequada para ativos digitais de alta volatilidade, como o Bitcoin.
A estratégia usa dois indicadores de amplitude de flutuação suave de diferentes comprimentos de ciclo: o indicador de amplitude de flutuação rápida (<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
A estratégia de filtragem de onda dupla é comparar a relação entre o preço e os dois indicadores de amplitude de flutuação para determinar se o preço está dentro de uma faixa de oscilação de certa magnitude. Quando o preço quebra essa faixa de oscilação, gera um sinal de negociação.
Em particular, a estratégia baseia-se na linha média, que é o valor médio de dois indicadores de amplitude de flutuação. Um sinal de curto-circuito é gerado quando o preço está acima da linha média e acima de uma faixa de flutuação rápida; um sinal de curto-circuito é gerado quando o preço está abaixo da linha média e abaixo de uma faixa de flutuação rápida.
A fim de filtrar mensagens falsas, a estratégia também adicionou uma condição: somente quando o preço estiver em consonância com o preço de um ciclo anterior. Por exemplo, somente quando o preço for alto e ultrapassar uma faixa de flutuação da linha média, será gerado um sinal de multiplicidade.
Em resumo, a estratégia usa o indicador de amplitude de dupla oscilação para identificar os intervalos de oscilação, gerando uma instrução de negociação com o preço quebrando os intervalos de oscilação. Ao mesmo tempo, o filtro de direção de preço é adicionado para reduzir os sinais errados.
Os benefícios da estratégia de filtragem por vibração de ondas duplas são:
Utilizando a característica de volatilidade de preços, pode adaptar-se a ativos de alta volatilidade, como o Bitcoin. O indicador de dupla amplitude de flutuação pode determinar com mais precisão a zona de oscilação de preços.
Os indicadores de dois intervalos de variação incluem diferentes comprimentos de tempo. Os indicadores rápidos capturam brechas de curto prazo e os indicadores lentos consideram tendências de longo prazo.
A adição de condições de filtragem de direção de preços pode reduzir os sinais errados causados pela volatilidade de curto prazo.
A lógica de transação é simples, clara, fácil de entender e adequada para transações quantitativas.
A estratégia de filtragem de vibração de ondas duplas também apresenta alguns riscos:
Dependendo do indicador de volatilidade, pode não funcionar bem em mercados de baixa volatilidade.
Os parâmetros do intervalo de flutuação precisam ser ajustados e otimizados para diferentes variedades, caso contrário, as oportunidades de negociação serão perdidas ou os sinais serão errados.
Quando a taxa de flutuação aumenta e o preço não corresponde a uma subida, pode-se emitir um sinal errado.
Em ambientes de alta volatilidade, a configuração do ponto de parada pode precisar de ajustes.
A estratégia pode ser melhorada em vários aspectos:
Testar e otimizar os parâmetros do intervalo de variação para encontrar combinações ótimas de parâmetros para diferentes períodos de diferentes variedades.
Adicionar um mecanismo para ajustar a posição de parada de acordo com a recente dinâmica da taxa de flutuação e otimizar a estratégia de parada de perda.
Aumentar as condições de filtragem baseadas em desvios de preços e flutuações para evitar sinais errados.
Em combinação com outros indicadores, como a variação do volume de transações, aumenta a certeza de entrada.
Testar e incorporar mecanismos de saída de bloqueio adequados à estratégia.
A estratégia de filtragem de vibração de onda dupla é, em geral, uma estratégia de negociação eficaz para ativos altamente voláteis. Ela usa corretamente as características de flutuação de preços, resultando em uma lógica de negociação simples e clara.
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 30m
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/
// © colinmck, greenmask9
//@version=4
strategy(title="Twin Range Filter Algo", overlay=true)
source = input(defval=close, title="Source")
// Smooth Average Range
per1 = input(defval=27, minval=1, title="Fast period")
mult1 = input(defval=1.6, minval=0.1, title="Fast range")
per2 = input(defval=55, minval=1, title="Slow period")
mult2 = input(defval=2, minval=0.1, title="Slow range")
smoothrng(x, t, m) =>
wper = t * 2 - 1
avrng = ema(abs(x - x[1]), t)
smoothrng = ema(avrng, wper) * m
smoothrng
smrng1 = smoothrng(source, per1, mult1)
smrng2 = smoothrng(source, per2, mult2)
smrng = (smrng1 + smrng2) / 2
// Range Filter
rngfilt(x, r) =>
rngfilt = x
rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r :
x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r
rngfilt
filt = rngfilt(source, smrng)
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])
hband = filt + smrng
lband = filt - smrng
longCond = bool(na)
shortCond = bool(na)
longCond := source > filt and source > source[1] and upward > 0 or source > filt and source < source[1] and upward > 0
shortCond := source < filt and source < source[1] and downward > 0 or source < filt and source > source[1] and downward > 0
CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
long = longCond and CondIni[1] == -1
short = shortCond and CondIni[1] == 1
// Plotting
// Strategy
// From this part on, programmer is greenmaks9
//
Separator = input(title="Following conditions and backtest algorithm are added by @greenmask9 🎯, original script is written by @colinmck 👍. Read both of their's release notes for more info on how this script works.", type=input.bool, defval=false)
disabler = input(title="Disable greenmask9's ATR conditions", type=input.bool, defval=false)
//second
l2 = input(title="ATR1", defval=32, minval=1)
s2 = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"])
atr2(source, l2) =>
if s2 == "SMA"
sma(source, l2)
else
if s2 == "RMA"
rma(source, l2)
else
if s2 == "EMA"
ema(source, l2)
else
wma(source, l2)
//third
l3 = input(title="ATR2", defval=64, minval=1)
s3 = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
atr3(source, l3) =>
if s3 == "RMA"
rma(source, l3)
else
if s3 == "SMA"
sma(source, l3)
else
if s3 == "EMA"
ema(source, l3)
else
wma(source, l3)
atr20=atr2(tr(true), l2)
atr30=atr3(tr(true), l3)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
profit = input(title="Ticks profit", type=input.integer, defval=900)
stop = input(title="Ticks stoploss", type=input.integer, defval=300)
maxcandles_till_close = input(title="Time stoploss", type=input.integer, defval=17)
bull = long and (atr20<atr30 or disabler)
bear = short and (atr20<atr30 or disabler)
bullclock = barssince(bull)
bearclock = barssince(bear)
if (bull)
strategy.entry("Twin Long", strategy.long, ordersize)
strategy.exit("Exit", from_entry = "Twin Long", profit = profit, loss = stop)
if (bear)
strategy.entry("Twin Short", strategy.short, ordersize)
strategy.exit("Exit", from_entry = "Twin Short", profit = profit, loss = stop)
//time stoploss
strategy.close("Twin Long", when = bullclock == maxcandles_till_close, comment = "Timed out")
strategy.close("Twin Short", when = bearclock == maxcandles_till_close, comment = "Timed out")