Esta estratégia baseia-se na negociação de equilíbrio, através da definição de três linhas de entrada de multi-cabeças e cabeças vazias, para realizar a abertura de posições de duas direções, pertencente à estratégia de acompanhamento de tendências. Quando o preço quebra a linha de equilíbrio, abra posições em sequência e faça mais ações, para realizar a entrada em lote por meio de folhas de suspensão.
A estratégia baseia-se principalmente na quebra da linha média para determinar a direção da tendência. Concretamente, obtém um indicador de linha média calculando a média aritmética do preço de abertura, do preço de fechamento, do preço mais alto e do preço mais baixo.
O número de pedidos para fazer mais vazio aumenta progressivamente, através da configuração de folhas de suspensão para realizar abertura de estoque. Por exemplo, a linha de entrada 1 desencadeia a abertura de 1 mão para fazer mais / vazio, a linha de entrada 2 desencadeia o aumento de 1 mão de armazenamento, a linha de entrada 3 e o aumento de 1 mão de armazenamento. Isso pode dispersar os custos de entrada e reduzir o risco de pedidos individuais.
A estratégia também estabelece um mecanismo de compensação. Quando o volume de posse não é zero, o stop loss é seguido de acordo com a configuração do preço da linha média, e se o preço cair novamente abaixo da linha média, o stop loss é eliminado. Isso pode bloquear parte dos lucros e proteger o capital.
Em geral, a estratégia aproveita os indicadores de linha média para determinar a direção da tendência, maximizando a margem de lucro através de linhas de entrada de vários níveis, enquanto configura um único risco de controle de stop loss, uma estratégia típica de acompanhamento de tendências.
A estratégia tem as seguintes vantagens:
A linha média pode ser usada para determinar a direção da tendência. A linha média pode filtrar o ruído do mercado e determinar a direção da tendência principal.
Linha de entrada de vários níveis, aproveite ao máximo a faixa de execução da tendência. Com várias linhas de entrada, é possível capturar o máximo da faixa de execução da tendência, ampliando a margem de lucro.
Abrir a posição em lotes, reduzir o risco individual. Dividir a entrada em várias vezes, pode dispersar o risco do pedido, reduzir o custo médio de posse da posição.
Estabelecer um mecanismo de compensação de perdas para controlar eficazmente o risco. Com a compensação de perdas, pode-se parar rapidamente quando o preço voltar a cair abaixo da linha média, evitando perdas excessivas.
A estratégia é clara e fácil de entender, os parâmetros são flexíveis e podem ser otimizados para diferentes mercados.
A estratégia também apresenta alguns riscos:
Probabilidade de uma linha média emitir um sinal errado. A linha média julga que há um atraso na tendência e pode emitir um sinal errado.
Risco de perda causado por uma reversão de tendência. A estratégia é baseada na tendência, e uma reversão de tendência gerará maiores perdas.
A linha de entrada é muito densa, o que aumenta a frequência de negociação e os custos de deslizamento.
A abertura em lotes aumenta o risco de concentração de posições. Quando a posse é excessiva, o risco é concentrado.
A configuração do ponto de parada não é razoável e pode parar prematuramente ou com um ponto de parada muito pequeno.
Correspondentes medidas de gestão de riscos:
Optimizar os parâmetros da média e selecionar a média periódica apropriada.
Atenção aos principais indicadores tecnológicos para avaliar sinais de reversão de tendências e para parar os prejuízos em tempo hábil.
Ajustar a distância de configuração da linha de entrada para reduzir a frequência de negociação.
Optimizar o tamanho e a proporção das posições e controlar os riscos de concentração.
Testar e otimizar pontos de parada para reduzir o risco de parada.
A estratégia pode ser otimizada em:
Teste diferentes parâmetros de linha média e fontes de dados, escolha o melhor indicador de linha média para determinar o efeito da tendência.
Otimizar o intervalo de distância e a proporção de posições da linha de entrada multi-espaço para encontrar o melhor parâmetro.
Combine outros indicadores como condições de filtragem para evitar sinais errôneos de equilíbrio, como MACD, RSI, etc.
Optimizar a posição da linha de parada, também pode ser configurado o ponto de parada de acordo com a configuração dinâmica do ATR.
Aumentar o julgamento de uma reversão de tendência, estabelecendo condições para o fechamento de todas as posições.
Parâmetros que permitem otimizar a estratégia de acordo com os diferentes períodos do mercado.
A função de ajuste dinâmico para aumentar o número de posições e determinar o número de corretores de acordo com a taxa de utilização dos fundos.
A estratégia em geral usa uma linha uniforme para determinar a direção da tendência e a principal fonte de lucro é o comportamento da tendência. Através da entrada em vários níveis e da abertura de posições em lotes, é possível capturar a tendência de forma eficaz e expandir a área de lucro. Ao mesmo tempo, o mecanismo de parada de perda é configurado para controlar o risco.
/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
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")
//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true
//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult
//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]
//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
lots := round(size / lot)
strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
lots := round(size / lot)
strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
lots := round(size / lot)
strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
strategy.cancel("TPL")
strategy.cancel("TPS")