
A estratégia de inversão de preço orientada espacialmente determina a direção da tendência de flutuação dos preços através do cálculo da linha central do canal. Quando o preço se aproxima da linha central do canal, é emitido um sinal de fazer mais ou fazer menos. A estratégia combina várias condições de filtragem para procurar oportunidades de negociação de alta probabilidade.
O indicador central da estratégia é a linha central do canal de preços. A forma de cálculo é a média dos preços mais altos e mais baixos das 30 linhas K mais recentes. Quando o ponto baixo está acima da linha central, é considerado uma tendência ascendente, quando o ponto alto está abaixo da linha central, é considerado uma tendência descendente.
A estratégia só emite um sinal de negociação quando o cenário da tendência muda. Ou seja, no cenário ascendente, apenas faça um curto quando a linha K fica vermelha; no cenário de queda, apenas faça mais quando a linha K fica verde.
Além disso, a estratégia também estabelece condições de dupla filtragem: filtragem de criptomoedas e filtragem de barras de canal de preço. O sinal é acionado somente quando o volume de criptomoedas é maior que 20% da média; deve haver um sinal de tendência contínuo durante o ciclo de filtragem para abrir uma posição.
Esta estratégia combina tendências, áreas de valor e forma de linha K, sendo uma estratégia de negociação inversa altamente eficiente. As principais vantagens são:
O principal risco da estratégia vem de perder o ponto de reversão do preço e esperar o sinal. Pode ser otimizado através dos seguintes métodos:
A estratégia pode ser melhorada em vários aspectos:
A estratégia de reversão de preços orientada espacialmente gera um sinal de alta qualidade através do julgamento do momento de reversão do canal de preços, com configuração de condições de dupla filtragem. Com base no ajuste de parâmetros e no controle de vento, é uma estratégia de quantificação confiável.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's PriceChannel for D1 v1.0", shorttitle = "PriceChannel D1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)
//Settings
needlong = input(true, "long")
needshort = input(true, "short")
slowlen = input(30, defval = 30, minval = 2, maxval = 200, title = "PriceChannel Period")
pcbars = input(1, defval = 1, minval = 1, maxval = 20, title = "PriceChannel Bars")
usecol = input(true, "Use color-filter")
usebod = input(true, "Use body-filter")
needbg = input(false, defval = false, title = "Need trend Background?")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close
//PriceChannel
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//Trend
ub = low > center ? 1 : 0
db = high < center ? 1 : 0
trend = sma(ub, pcbars) == 1 ? 1 : sma(db, pcbars) == 1 ? -1 : trend[1]
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
up = trend == 1 and (close < open or usecol == false) and (body > abody / 5 or usebod == false)
dn = trend == -1 and (close > open or usecol == false) and (body > abody / 5 or usebod == false)
//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "PriceChannel Center")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Trading
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()