Estratégia de reversão de impulso CK Stop Loss

Autora:ChaoZhang, Data: 2023-11-27 18:13:58
Tags:

img

Resumo

Esta estratégia usa o canal CK para determinar as tendências de preços e define linhas de stop loss dinâmicas para fazer operações reversas quando ocorre uma inversão de preço.

Princípio da estratégia

A estratégia usa o canal CK para determinar as tendências de preços e suporte/resistência. Ele calcula as linhas superiores e inferiores do canal. Quando o preço atravessa as linhas do canal, são gerados sinais de negociação. Além disso, a estratégia também rastreia o movimento das linhas do canal e assume posições reversas quando as linhas do canal se invertem, o que pertence às estratégias de negociação de reversão.

Especificamente, a estratégia calcula as linhas do canal superior e inferior com base nos preços mais altos e mais baixos. Se a linha do canal superior começar a cair e a linha do canal inferior começar a subir, ela é determinada como uma reversão de preço para ficar curto. Pelo contrário, se a linha do canal inferior começar a cair e a linha do canal superior começar a subir, ela é determinada como uma reversão de preço para ficar longo.

Vantagens da estratégia

  1. Usar canais duplos para determinar pontos de reversão de preços para operações de reversão precisas
  2. Adotar um stop loss dinâmico para controlar os riscos e realizar um stop loss oportuno
  3. A lógica estratégica é simples e clara, fácil de compreender e implementar

Riscos da Estratégia

  1. Quando os preços do mercado flutuam violentamente, a linha de stop loss pode ser quebrada, levando a perdas maiores
  2. A maior frequência de negociação pode aumentar os custos de transacção
  3. Precisa escolher parâmetros adequados para controlar a linha de stop loss, evitar muito solto ou muito apertado

Optimização da Estratégia

  1. Otimizar os parâmetros da linha de stop loss para torná-la mais razoável e eficaz
  2. Incorporar indicadores de tendência para avaliar a fiabilidade dos sinais de reversão, evitar operações de reversão durante a tendência
  3. Aumentar os módulos de negociação automática e de stop loss automáticos para reduzir os custos de transação

Resumo

A ideia geral da estratégia é clara e fácil de entender. Ele usa canais duplos para determinar inversões de preço e realizar operações reversas. E define stop loss dinâmico para controlar riscos. Ele pertence a estratégias comerciais típicas de curto prazo. O efeito da estratégia pode ser otimizado ainda mais, principalmente ajustando os parâmetros de stop loss e ajudando outros indicadores técnicos a determinar o tempo de entrada e saída.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//

//study(title="Chande Kroll Stop", shorttitle="CK Stop", overlay=true)
strategy(title="Chande Kroll Stop", shorttitle="Chande Kroll Stop回測", overlay=true, initial_capital=100000, calc_on_every_tick=true,default_qty_type=strategy.percent_of_equity, default_qty_value=10)
br_red = #e91e63,Red = #f41818,n_green = #91dc16,dk_green = #004d40,lt_green = #16dc78,lt_blue = #0dbdd8,dk_blue = #0a3577,Blue = #034fed,br_orange = #f57c00,dk_orange = #e65100,dk_gray = #434651,dk_pink = #7c1df0,lt_pink = #e743f5,Purple = #5b32f3,lt_purple = #6b5797

hiP = input(9, "",inline="h")
hix = input(1,"" ,inline="h", step=0.1)
hiQ = input(7,"" ,inline="h")
loP = input(9,"" ,inline="h1")
lox = input(1,"" ,inline="h1", step=0.1)
loQ = input(5,"" ,inline="h1")
Xr=input(false,"反向操作:買/賣",inline="T"),
first_high_stop = highest(high, hiP) - hix * atr(hiP)
first_low_stop = lowest(high, loP) + lox * atr(loP)

stop_short = highest(first_high_stop, hiQ)
stop_long = lowest(first_low_stop, loQ)

cklow = stop_short
ckhigh = stop_long


Xdn = cklow < cklow[1] and ckhigh < ckhigh[1]
Xup = cklow > cklow[1] and ckhigh > ckhigh[1]
longcol = Xup ? lt_green : Xdn ? br_red : #2a2e39
shortcol = Xup? lt_green : Xdn ? br_red : #2a2e39
plot(stop_long, color=longcol)
plot(stop_short, color=shortcol)


plotshape(Xup and not Xup[1] , title="CK Stop Buy", text='CK', style=shape.triangleup, size=size.tiny, location=location.belowbar, color=lt_green, textcolor=lt_green,display=display.none)
plotshape(Xdn and not Xdn[1], title="CK Stop Sell", text='CK', style=shape.triangledown, size=size.tiny, location=location.abovebar, color=br_red, textcolor=br_red,display=display.none)

//       , default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=true)

tl=input(true,"Sig",inline="T"), sbg=input(true,"Bgtrend",inline="T"), vbuild="FIREHORSE XRPUSDT"
Xp = 0.0, Xp:=Xdn? -1 : Xup? 1 : Xp[1], Xdf = Xr? Xup and Xp[1] == -1 : Xdn and Xp[1] == 1 ,Xuf = Xr?  Xdn and Xp[1] == 1: Xup and Xp[1] == -1 
FY=input(2021,"年",inline="btf"),FM=input(9,"月",inline="btf"),FD=input(01,"日",inline="btf"),
TY = input(2032,"年",inline="to"),TM=input(01,"月",inline="to"),TDy=input(01,"日",inline="to"), 
testTF = time>=timestamp(FY,FM,FD,00,00) and time <= timestamp(TY,TM,TDy,23,59)?  true:false


plotchar(tl? Xuf:na,vbuild+" 生門","△",location.bottom, #14e540,10,0," " ,#14e540,1,size.tiny)// ︽  ︾
plotchar(tl? Xdf:na,vbuild+" 傷門","▽",location.top,  #9b0842,10,0," ", #9b0842,1,size.tiny)  
bgcolor(sbg ? Xp==1 ? #0d47a1 :na: na, transp=90),
alertcondition(Xuf,vbuild+ "Buy", "Long 💹 \n"+vbuild),  alertcondition(Xdf, vbuild+ " Sell","Short 🈹\n"+vbuild)

if Xuf
    alert("Long " + tostring(close)+"\nLong "+input("My Long  Msg","Long Alert Msg")+vbuild, alert.freq_once_per_bar) 
if Xdf
    alert("Short " + tostring(close)+"\nShort"+input("My Short Msg","Short Alert Msg")+vbuild, alert.freq_once_per_bar) 


if testTF
    strategy.entry("Long ", strategy.long,  comment=" Long ",when=Xuf), strategy.entry("Short", strategy.short, comment=" Short",when=Xdf )



Mais.