Estratégia de bala de prata baseada no Box Breakout

Autora:ChaoZhang, Data: 2024-01-15 12:06:32
Tags:

img

Resumo

A estratégia detecta principalmente a ruptura da caixa formada pelos pontos altos e baixos da linha K para julgar a direção e a força do mercado. Quando há uma ruptura de caixa ascendente, a estratégia definirá uma posição longa em torno do ponto de ruptura. Quando há uma ruptura de caixa descendente, a estratégia definirá uma posição curta em torno do ponto de ruptura. Uma vez gerado um sinal de negociação, a estratégia colocará ordens para abrir posições e definir stop loss e take profit para controlar riscos.

Estratégia lógica

  1. A estratégia define um período de negociação e procura apenas oportunidades de negociação durante esse período.

  2. Após cada forma de linha K, a estratégia avalia se há uma diferença significativa entre os preços mais altos e mais baixos das duas linhas K anteriores.

    2.1 Se o preço mais baixo da 2a linha K for superior ao preço mais alto da 1a linha K, ocorre uma ruptura de caixa ascendente.

    2.2 Se o preço mais alto da 2a linha K for inferior ao preço mais baixo da 1a linha K, ocorre uma ruptura de caixa descendente.

  3. Após a confirmação do sinal de ruptura da caixa, a estratégia define um ponto de entrada longo ou curto em torno do preço mais alto ou mais baixo da linha K atual.

  4. Uma vez aberta a posição, a estratégia define o lucro baseado no dobro do intervalo de ruptura para capturar a aceleração da tendência.

  5. A estratégia também define o stop loss no preço mais baixo ou mais alto da 2a linha K para reduzir o risco de perda.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. A lógica é simples e fácil de implementar.

  2. Usar breakouts de caixa de linha K para julgar a direção e a força do mercado tem alta precisão.

  3. A configuração de take profit capta oportunidades da aceleração da tendência.

  4. Há uma lógica de stop loss clara para controlar a perda única.

  5. A ideia de estratégia é flexível e pode ser personalizada de acordo com o estilo pessoal.

Análise de riscos

No entanto, há alguns riscos na estratégia:

  1. Os sinais de fuga podem ser falsos, as perdas não podem ser completamente evitadas.

  2. O stop loss perto do ponto de entrada pode ser facilmente desencadeado por mercados agressivos.

  3. Não pode julgar a estrutura da tendência e as paradas podem ser frequentemente desencadeadas em mercados de intervalo.

  4. Não considera o impacto de diferentes produtos e períodos de tempo.

Orientações de otimização

Para otimizar ainda mais a estratégia, podemos melhorar os seguintes aspectos:

  1. Estabelecer parâmetros de stop loss e take profit adaptativos para diferentes produtos e períodos de tempo.

  2. Adicionar indicadores técnicos para o julgamento da tendência para evitar ficar preso em mercados de gama.

  3. Definir oportunidades adicionais subsequentes para rastrear corridas de tendência.

  4. Combinar indicadores de volume para avaliar a autenticidade dos sinais de fuga e filtragem.

  5. Adicionar algoritmos de aprendizagem de máquina para ajudar a determinar a direção da tendência.

Resumo

A estratégia é projetada com base no princípio de breakout simples para capturar corridas aceleradas após breakouts para retornos excessivos.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Dvitash

//@version=5
strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true)

startTime = input(defval = "1000", title = "Start Time")
endTime = input(defval = "1600", title = "End Time")
contractAmt = input.int(defval = 2, title = "Contract Amount")
fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color")
borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color")
fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length")

allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York"))
newDay = bool(ta.change(time('D')))
h = hour(time('1'), "America/New_York")

var bool fvgDrawn = na
var float entryPrice = na 
var float stopPrice = na 
var float tpPrice = na 

if newDay
    fvgDrawn := false
    // a_allBoxes = box.all
    // if array.size(a_allBoxes) > 0
    //     for i = 0 to array.size(a_allBoxes) - 1
    //         box.delete(array.get(a_allBoxes, i))

if allowedTime and barstate.isconfirmed and h <= 16
    //Long FVG
    if high[2] < low and not fvgDrawn
        // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := low[2]
        entryPrice := low
        tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry")
        fvgDrawn := true

    if low[2] > high and not fvgDrawn
        // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := high[2]
        entryPrice := high
        tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry")
        fvgDrawn := true
if h >= 16
    strategy.close_all()
    strategy.cancel_all()

strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit")
strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")

Mais.