
A estratégia é uma estratégia de combinação, combinando o indicador de impulso, o indicador de acompanhamento de tendência e o indicador de linha média, para realizar o acompanhamento de tendência e a compra / venda de ruptura. A combinação do indicador estocástico com o indicador Supertrend é usada principalmente para determinar o momento de compra / venda, auxiliada pela linha média EMA para determinar a principal tendência do mercado.
A estratégia é composta principalmente pelos seguintes indicadores:
EMAs médias: Use as EMAs 25, 50, 100 e 200 para determinar a tendência principal das quatro médias. Se a EMA25 atravessa a EMA50 e a EMA100 atravessa a EMA200, é uma tendência ascendente, caso contrário, é uma tendência descendente.
Indicador de rastreamento de tendências do Supertrend: os parâmetros são o Factor 3 e o ATR 10, para determinar se o preço atual está em uma tendência ascendente ou descendente. Quando o Supertrend é verde, é uma tendência ascendente, vermelho é uma tendência descendente.
Indicadores de potência estocástica: %K 8 e %D 3, para determinar se o estocástico está produzindo um golden fork ou um dead fork. Quando o %K atravessa o %D de baixo, é um golden fork, ao contrário do dead fork.
A estratégia de compra é a seguinte: EMA mostrando tendência ascendente + Supertrend mostrando tendência ascendente + Stochastic Gold Fork Time 。 A estratégia de venda é: EMA mostrando uma tendência descendente + Supertrend mostrando uma tendência descendente + Stochastic Dead Fork Time
A estratégia integra três indicadores: tendência, dinâmica e breakout, que permitem uma avaliação mais confiável do movimento do mercado e dos pontos de compra e venda.
A estratégia tem as seguintes vantagens:
A combinação de vários indicadores, com um bom senso, pode filtrar eficazmente as falsas descobertas.
A inclusão de indicadores de dinâmica pode ajudar a determinar o ponto de viragem mais cedo.
Parâmetros personalizáveis para diferentes ambientes de mercado.
Implementou uma configuração relativamente eficiente de stop loss e stop stop.
Pode ser retomada em um ciclo alto como o dia, com melhor efeito.
A estratégia também apresenta alguns riscos:
A configuração inadequada dos parâmetros pode causar frequência de negociação ou instabilidade do sinal.
Ainda há a possibilidade de erros na hora de escolher. Pode-se considerar a inclusão de mais indicadores de interferência.
O ponto de parada é definido como o ponto máximo do indicador estocástico, que pode ser muito próximo, e pode ser considerado uma flexibilidade apropriada.
Os dados de detecção são insuficientes, podendo afetar a adequação dos parâmetros. O período de detecção deve ser ampliado.
A estratégia pode ser otimizada em várias direções:
Teste mais combinações de parâmetros para encontrar o parâmetro ideal. Como ajustar o parâmetro Factor da Supertrend.
Adicionar mais indicadores de filtragem, como indicadores de energia, indicadores de taxa de flutuação, etc., reduzindo a probabilidade de erro de julgamento.
Pode-se testar diferentes métodos de parada, como definir uma linha de parada em uma determinada porcentagem no ponto máximo.
Optimizar o stop-loss, como considerar o stop-loss dinâmico, para bloquear mais lucros.
Expandir o alcance da estratégia, como tentar adaptar-se a mais variedades de negócios ou tentar usá-la em ciclos mais altos.
A estratégia tem uma visão geral clara, a seleção de indicadores é razoável, o acompanhamento de tendências e negociações de ruptura, e os resultados de retrospecção são melhores. No entanto, ainda há espaço para otimização. A otimização multifacetada pode tornar a estratégia mais estável e confiável, através do ajuste de parâmetros, adição de mais indicadores de ondas de choque e melhoria do método de parada de perda.
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-06 07:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Supertrend + Stoch Strategy", overlay=true)
// ---inputs---
pl = input(1.5, title="P/L", minval=0.1)
lossPercentage = input(1, title="Loss Percentage", minval=1, maxval=100)
atrPeriod = input(10, "ATR Length")
factor = input(3, "Supertrend Factor")
periodK = input(8, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
ema1l = input(25, title="EMA 1 Length", minval=1)
ema2l = input(50, title="EMA 2 Length", minval=1)
ema3l = input(100, title="EMA 3 Length", minval=1)
ema4l = input(200, title="EMA 4 Length", minval=1)
// ---lines---
ema1 = ema(close, ema1l)
ema2 = ema(close, ema2l)
ema3 = ema(close, ema3l)
ema4 = ema(close, ema4l)
trendUpper = ema1 > ema2 and ema3 > ema4
trendLower = ema1 < ema2 and ema3 < ema4
[supertrend, direction] = supertrend(factor, atrPeriod)
supertrendUpper = direction < 0
supertrendLower = direction > 0
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
stochCrossOver = crossover(k, d)
stochCrossUnder = crossunder(k, d)
// ---plot---
plot(ema1, color=color.green)
plot(ema2, color=color.orange)
plot(ema3, color=color.blue)
plot(ema4, color=color.purple)
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 95), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 95), fillgaps=false)
// ---stop place compute---
edge = 0. // periodly high/low
edge := stochCrossOver ? high : stochCrossUnder ? low : k > d ? max(edge[1], high) : k < d ? min(edge[1], low) : edge[1]
// plot(edge)
// ---trade condition---
// longCond = trendUpper and supertrendUpper and stochCrossOver
// shortCond = trendLower and supertrendLower and stochCrossUnder
longCond = trendUpper and supertrendUpper and stochCrossOver and strategy.position_size == 0
shortCond = trendLower and supertrendLower and stochCrossUnder and strategy.position_size == 0
// ---stop & take---
stop = 0.
stop := nz(stop[1], stop)
take = 0.
take := nz(take[1], take)
if longCond
stop := edge[1]
take := close + (close - stop) * pl
if shortCond
stop := edge[1]
take := close - (stop - close) * pl
// ---trade---
qty = strategy.equity / abs(stop - close) / 100 * lossPercentage
strategy.entry("Buy", strategy.long, when=longCond, qty=qty)
strategy.exit("Close Buy","Buy", limit=take, stop=stop)
strategy.entry("Sell", strategy.short, when=shortCond, qty=qty)
strategy.exit("Close Sell","Sell", limit=take, stop=stop)
stopLine = plot(strategy.position_size != 0 ? stop : na, color=color.red, style=plot.style_linebr)
takeLine = plot(strategy.position_size != 0 ? take : na, color=color.green, style=plot.style_linebr)
entryLine = plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.blue, style=plot.style_linebr)
fill(entryLine, stopLine, color.new(color.red, 90), fillgaps=false)
fill(entryLine, takeLine, color.new(color.green, 90), fillgaps=false)