Esta estratégia é chamada de
A estratégia calcula o máximo máximo e o mínimo mínimo durante um determinado período no passado usando as funções mais elevadas e mais baixas para determinar os trilhos superiores e inferiores do canal de preços. O ponto médio do canal é definido como a média dos trilhos superiores e inferiores. Em seguida, calcula o tamanho do corpo da linha K e suaviza-o usando SMA para determinar se o último corpo da linha K é maior que metade do corpo médio. Também julga se as duas últimas linhas K estão na mesma direção (duas linhas vermelhas ou verdes consecutivas).
Esta é uma estratégia de ruptura que usa o canal de preço para julgar a tendência geral.
O uso do canal de preços para determinar a direção geral da tendência pode filtrar efetivamente o ruído do mercado.
Duas linhas K consecutivas a atravessar o canal na mesma direcção indicam um impulso mais forte e uma maior taxa de sucesso da ruptura.
Julgar o corpo da linha K maior do que metade do corpo médio pode evitar ser enganado por uma falsa fuga.
A lógica estratégica é simples e fácil de implementar.
Os parâmetros personalizáveis, tais como o período do canal, produtos de negociação, horas de negociação, etc., tornam-no altamente adaptável.
A estratégia apresenta também alguns riscos potenciais:
Ainda existe a probabilidade de uma fuga fracassada, o que pode levar a perdas.
O canal de preços pode falhar quando o mercado flutua violentamente.
A ausência de um mecanismo de stop loss não permite controlar eficazmente as perdas.
Regras comerciais simples apresentam riscos de sobreajuste.
Incapaz de se adaptar a ambientes de mercado mais complexos.
As soluções correspondentes são:
Otimizar os parâmetros para melhorar a taxa de sucesso da fuga.
Adicione o índice de volatilidade para evitar mercados agitados.
Adicione o stop loss móvel.
Realizar um teste de complexidade para verificar a sobreajuste.
Aumentar os modelos de aprendizagem de máquina para melhorar a adaptabilidade.
As principais direcções de otimização são:
Adicionar um mecanismo de stop loss para controlar melhor os riscos.
Otimizar parâmetros como período do canal, limiar de ruptura, etc. Encontre parâmetros ideais através de algoritmo genético, busca de grade, etc.
Adicionar condições de filtragem para melhorar a certeza da ruptura.
Adicione modelos de aprendizado de máquina como LSTM para melhorar a capacidade de previsão e adaptabilidade utilizando mais dados.
Realizar a otimização do portfólio, combinar diferentes tipos de estratégias de ruptura para alcançar a ortogonalidade e reduzir as semelhanças.
Em conclusão, esta é uma estratégia quantitativa baseada no canal de preço para determinar a tendência e descobrir sinais de ruptura. Tem a vantagem de julgar a tendência e confirmar a ruptura, mas também tem certos riscos de falsa ruptura. Podemos melhorar a estratégia por otimização de parâmetros, stop loss, adição de filtros etc. para reduzir riscos. Enquanto isso, a introdução de modelos de aprendizado de máquina pode melhorar ainda mais a capacidade preditiva.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.0", shorttitle = "Price Channel str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel") showcl = input(true, defval = true, title = "Show center-line") 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 //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 col = showcl ? blue : na plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Signals body = abs(close - open) abody = sma(body, 10) up = rbars and close > center and body > abody / 2 dn = gbars and close < center and body > abody / 2 exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2 //Trading if up if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()