Estratégia de stop-limit móvel baseada no índice de fibra


Data de criação: 2024-02-06 14:33:06 última modificação: 2024-02-06 14:33:06
cópia: 0 Cliques: 677
1
focar em
1617
Seguidores

Estratégia de stop-limit móvel baseada no índice de fibra

Visão geral

A estratégia usa o indicador de silos para definir automaticamente os preços de stop loss e stop loss, permitindo a negociação móvel de stop loss limit. Pode obter mais lucro em situações de tendência e, ao mesmo tempo, reduzir os prejuízos em situações de turbulência.

Princípio da estratégia

A estratégia baseia-se principalmente em indicadores de curvas para definir os preços. Os indicadores de curvas podem refletir o suporte e a resistência potenciais do mercado. A estratégia usa os diferentes níveis dos indicadores de curvas como preços de parada e parada.

Concretamente, a estratégia rastreia os altos e baixos e calcula um intervalo de preços de 10 cêntimos. Em seguida, selecione um preço de um cêntimo como estratégia de entrada de acordo com a configuração. Quando o preço quebra esse cêntimo, a estratégia faz mais de acordo com a alavancagem da configuração.

Após o pedido, a estratégia continua a acompanhar o preço do último segmento. Quando ocorre um segmento mais baixo, a estratégia cancela a encomenda original, refaz o pedido e realiza o stop loss móvel. Quando o aumento do preço quebra o preço de stop, a estratégia paira.

Análise de vantagens

A maior vantagem da estratégia é que pode ser dinamicamente ajustado para parar e parar o preço, especificamente para a situação de tendência. Tem as seguintes características:

  1. A capacidade de obter mais lucro em situações de tendência. A configuração de parada baseada no preço médio de entrada permite o máximo de participação em situações de tendência e maior lucro.

  2. É capaz de reduzir os prejuízos em situações de turbulência. Quando o preço volta a atingir um nível mais baixo, os prejuízos serão interrompidos em tempo hábil, evitando a queda durante a turbulência.

  3. Suporte para a posição. Configuração para a posição, que aumenta a posição quando o preço cai para um determinado valor, reduzindo o custo médio de posse.

  4. A operação é simples. Basta configurar o tempo e a proporção de interrupção, e a transação é totalmente automática, sem a necessidade de operação manual.

Análise de Riscos

A estratégia também apresenta alguns riscos, que se concentram nos seguintes pontos:

  1. É suscetível a ser detido repetidamente durante a liquidação de choques. Quando ocorre uma corrida horizontal ou de choque, o preço pode subir e descer várias vezes, aumentando a frequência de negociação e os gastos com processamento.

  2. Não há paralisação. A estratégia não tem paralisação para obter mais lucro. Se houver uma reversão significativa da tendência, pode haver grandes perdas.

  3. Não há restrições quanto ao número e quantidade de adições.

Resolução:

  1. Pode-se estabelecer condições para a suspensão de transações em caso de turbulência.
  2. A partir de agora, o banco pode monitorar manualmente a situação e, se necessário, forçar o stop loss.
  3. Limitação do número e do montante de adições.

Direção de otimização

A estratégia também tem um grande espaço para otimização, principalmente em relação aos seguintes aspectos:

  1. A confirmação de entrada pode ser feita com a utilização de outras combinações de indicadores. A confirmação de indicadores como EMA, MACD e outros pode ser incluída nas condições de entrada, evitando a inclusão em situações de tremor.

  2. A inclusão de um mecanismo de stop loss. Configurar um stop loss fixo ou um stop loss de rastreamento pode evitar perdas enormes em situações extremas.

  3. Optimizar a lógica de aquisição. Pode ser otimizado de acordo com a situação específica do mercado, a faixa de preços e a frequência de aquisição.

  4. Combinação de algoritmos de aprendizagem de máquina. Por exemplo, o uso de algoritmos como o LSTM para prever o possível movimento dos preços e a resistência de suporte. Ajudar a determinar uma melhor lógica de entrada e saída.

Resumir

A estratégia, como um todo, é adequada para acompanhar a tendência. Pode obter mais lucro através do ajuste dinâmico do preço de parada. Também existe um certo risco, que precisa ser otimizado e melhorado em combinação com outros mecanismos para que possa se adaptar a um ambiente de mercado mais complexo.

Código-fonte da estratégia
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CryptoRox

//@version=4
//Paste the line below in your alerts to run the built-in commands.
//{{strategy.order.alert_message}}
strategy(title="Fibs limit only", shorttitle="Strategy", overlay=true, precision=8, pyramiding=1000, commission_type=strategy.commission.percent, commission_value=0.04)

//Settings 
testing = input(false, "Live")
//Use epochconverter or something similar to get the current timestamp.
starttime = input(1600976975, "Start Timestamp") * 1000
//Wait XX seconds from that timestamp before the strategy starts looking for an entry.
seconds = input(60, "Start Delay") * 1000
testPeriod = true


leverage = input(1, "Leverage")
tp = input(1.0, "Take Profit %") / leverage
dca = input(-1.0, "DCA when < %") / leverage *-1
fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"])

//Strategy Calls
equity = strategy.equity
avg = strategy.position_avg_price
symbol = syminfo.tickerid
openTrades = strategy.opentrades
closedTrades = strategy.closedtrades
size = strategy.position_size

//Fibs
lentt = input(60, "Pivot Length")
h = highest(lentt)
h1 = dev(h, lentt) ? na : h
hpivot = fixnan(h1)
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
z = 400
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)

fib0 = (((hpivot - lpivot)) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)

notna = nz(fib10[60])
entry = 0.0
if fibEntry == "1"
    entry := fib10
if fibEntry == "2"
    entry := fib9
if fibEntry == "3"
    entry := fib0
if fibEntry == "4"
    entry := fib1
if fibEntry == "5"
    entry := fib2
if fibEntry == "6"
    entry := fib3
if fibEntry == "7"
    entry := fib4
if fibEntry == "8"
    entry := fib5
if fibEntry == "9"
    entry := fib6
if fibEntry == "10"
    entry := fib7
profit = avg+avg*(tp/100)
pause = 0
pause := nz(pause[1])
paused = time < pause

fill = 0.0
fill := nz(fill[1])
count = 0.0
count := nz(fill[1])

filled = count > 0 ? entry > fill-fill/100*dca : 0
signal = testPeriod and notna and not paused and not filled ? 1 : 0

neworder = crossover(signal, signal[1])
moveorder = entry != entry[1] and signal and not neworder ? true : false
cancelorder = crossunder(signal, signal[1]) and not paused
filledorder = crossunder(low[1], entry[1]) and signal[1]

last_profit = 0.0
last_profit := nz(last_profit[1])

if neworder and signal
    strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) 
if moveorder
    strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if filledorder and size < 1
    fill := entry
    count := count+1 
    pause := time + 60000
    p = close+close*(tp/100)
    strategy.entry("Filled", 1, 1,  alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(p))
if filledorder and size >= 1
    fill := entry
    count := count+1 
    pause := time + 60000
    strategy.entry("Filled", 1, 1,  alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(profit))

if cancelorder and not filledorder
    pause := time + 60000
    strategy.order("Cancel", 1, 0.0001,  alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order')

if filledorder
    last_profit := profit

closeit = crossover(high, profit) and size >= 1
if closeit
    strategy.entry("Close ALL", 0, 0, alert_message='Profit')
    count := 0
    fill := 0.0
    last_profit := 0.0
    
//Plots
bottom = signal ? color.green : filled ? color.red : color.white
plot(entry, "Entry", bottom)