Esta estratégia é uma estratégia de negociação baseada em várias linhas de equilíbrio para estabelecer um limite de preço. Esta estratégia define um número diferente de ações ou ações de limite de preço, de acordo com o preço quebra de diferentes linhas de equilíbrio, formando uma posição de pirâmide. Quando o preço re-quebrar a linha de equilíbrio, uma posição de abertura de limite de preço é feita.
A estratégia usa um indicador de linha média para determinar a direção da tendência. Concretamente, o número de pedidos de limite máximo é determinado com base no fato de o preço ter quebrado a linha média de 3 linhas para cima. O número de pedidos de limite máximo é determinado com base no fato de o preço ter quebrado a linha média de 3 linhas para baixo.
Assim, quanto mais forte a tendência de preços, mais pedidos de limite de equilíbrio são estabelecidos; Quando o preço apresenta um sinal de reversão, a abertura de posição reversa é realizada. A linha de equilíbrio do eixo central é usada para julgar a ruptura da posição, emitindo um sinal de posição semelhante.
Toda a estratégia forma uma forma de negociação que combina posições abertas em forma de pirâmide com posições baixas de ruptura. O objetivo é abrir posições a preços médios múltiplos, reduzir custos; a linha média do eixo central para parar o risco.
A estratégia tem as seguintes vantagens:
A utilização de tendências de medição, simples e intuitiva.
A posição em pirâmide permite obter melhores custos no início da tendência.
A perda de linha média do eixo central pode ser interrompida em tempo hábil para controlar o risco.
A posição de limite evita um ponto de deslizamento.
Parâmetros personalizáveis para diferentes variedades.
A estrutura é clara, fácil de entender e de expandir.
A estratégia também apresenta os seguintes riscos:
O índice de linha média está atrasado, o que pode levar a um julgamento equivocado.
O fracasso do ticket limit pode levar a perder a oportunidade de entrar.
O ponto de equilíbrio do eixo central pode ser muito grosso e não pode ser atingido. Julgar.
A configuração incorreta dos parâmetros pode causar uma posição de pirâmide excessiva.
O tempo de detecção insuficiente pode levar a uma curva de sobreajuste.
Não tem em conta os custos.
A solução para o risco é a seguinte:
Parâmetros de confirmação e otimização em combinação com outros indicadores.
Configure o prazo de validade e ajuste o preço do limite.
Coloque um parâmetro no eixo médio, ou adicione a lógica de julgamento de ruptura.
Parâmetros de otimização para avaliar o lucro/dívida.
Ampliação do tempo de resposta, resposta multi-mercado.
Adição de taxas e logística de deslizamento.
A estratégia pode ser otimizada em:
Parâmetros de otimização para mais variedades. Métodos de aprendizado de máquina podem ser usados.
Adicionar filtros de confirmação de outros indicadores, como MACD, KDJ, etc.
Aumentar a lógica de parada no eixo médio.
Ajuste dinâmico da taxa de abertura e da posição de parada.
Optimizar a configuração de preços de oferta, melhorar os custos. Por exemplo, definir preços de acordo com a amplitude de flutuação.
Aumentar a gestão dos custos e evitar a cobrança excessiva.
Teste os efeitos dos parâmetros de diferentes variedades, construindo um pool de parâmetros.
A estratégia é simples, clara, fácil de entender e expandir. Mas pode ser melhorada pela introdução de outros indicadores, parâmetros de otimização e melhorias na lógica do preço de limite. Em geral, a estratégia oferece um pensamento de preço de limite simples e prático, com um certo valor de referência.
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", 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
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
//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 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close
//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]
lots = 0.0
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)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()