
Esta estratégia baseia-se no desenho de dados de alta e baixa em entries de linha K, para encontrar o ponto de reversão da tendência. As entradas depois definem a linha de parada de acordo com o indicador ATR e rastreiam as paradas. A estratégia também calcula a posição de alvo com base na proporção de retorno de risco e liquida a posição depois de atingir a meta ou ser parada.
Os sinais de entrada da estratégia vêm dos pontos altos e baixos da abertura. Quando o preço de abertura de uma linha K é igual ao preço mínimo, um sinal de compra é gerado, e quando o preço de abertura é igual ao preço máximo, um sinal de venda é gerado, indicando que pode haver uma oportunidade de reversão da tendência.
A linha de parada pós-venda é a linha de parada pós-venda mais alta da linha de raiz N mais recente da linha K. A linha de parada pós-venda será atualizada dinamicamente, seguindo a operação do preço.
O lucro-alvo é calculado de acordo com a taxa de retorno de risco definida. O preço-alvo comprado é o preço de entrada mais o número de retorno de risco do preço de entrada e o número de retorno de risco do preço de parada; o preço-alvo vendido é o preço de entrada menos o número de retorno de risco do preço de parada e o número de retorno de risco do preço de entrada.
Quando o preço toca o preço de stop loss ou o preço de alvo, é emitida uma instrução de parada.
A estratégia tem as seguintes vantagens:
Os sinais de entrada são simples, claros e fáceis de discernir, evitando os múltiplos tremores.
ATR dinâmico para parar perdas, maximizar o lucro e evitar a busca de alta e baixa.
Controle de risco-retorno, evitando retenção de lucros e operações de linha curta.
Aplica-se a diferentes variedades e é fácil de otimizar.
A estratégia também traz alguns riscos:
O sinal de entrada pode estar um pouco atrasado, perdendo o melhor ponto de circulação.
O preço de stop loss está próximo ou é muito relaxado, podendo ser coberto ou perder lucro.
O módulo de julgamento de tendências não é um módulo de julgamento de tendências, sendo que ele pode ser usado em situações de turbulência.
Não é possível lidar com a construção de um depósito durante a noite.
Otimizar a Correspondência:
A análise de tendências, combinada com outros indicadores, evita a arbitragem de situações de turbulência.
Ajustar os parâmetros do ATR ou adicionar o controle de taxa de flutuação para otimizar o ponto de parada.
Aumentar o julgamento de tendências ou o módulo de filtragem, reduzindo o erro do sinal de entradas.
Adicionar módulos de tratamento nocturno para o tratamento de um determinado tipo de armazenamento nocturno.
Em geral, a estratégia é simples e direta, os sinais de entradas são claros, o pensamento de parada é razoável e o risco é controlado. Mas também há alguns problemas de limitação, como falta de julgamento de tendência, atraso de sinal, etc. Esses problemas também fornecem orientação para a otimização futura.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// Open-High-Low strategy
strategy('Strategy: OLH', shorttitle="OLH", overlay=true )
// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")
// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false
// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)
// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)
// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
// Entry
var float sl = na
var float target = na
if (longCond)
strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
sl := longStop
target := close + ((close - longStop) * rrRatio)
alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
if (shortCond)
strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
sl := shortStop
target := close - ((shortStop - close) * rrRatio)
alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
// Exit: target or SL
if ((close >= target) or (close <= sl))
strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
if ((close <= target) or (close >= sl))
strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
// Close all open position at the end if Day
strategy.close_all(comment = "Close all entries at end of day.")