Estratégia de negociação de volatilidade de fim de semana

Autora:ChaoZhang, Data: 2023-11-16 10:53:01
Tags:

img

Resumo

Esta estratégia estabelece condições de entrada longas e curtas com base no preço de fechamento da sexta-feira, e fica longa ou curta após a abertura dos sábados e domingos, saindo de todas as posições antes da abertura da segunda-feira.

Princípios

  1. Registre o preço de encerramento de sexta-feira como preço de referência
  2. Sábado e domingo:
    • Se o preço for superior a 105% do fechamento de sexta-feira, vá curto.
    • Se o preço estiver abaixo de 95% do fechamento de sexta-feira, vá longo.
  3. O lucro é fixado em 3% do capital inicial
  4. Fechar todas as posições antes da abertura de segunda-feira

Análise das vantagens

  1. O volume e a volatilidade das transacções no fim de semana são baixos para reduzir o risco de mercado
  2. Regras claras de entrada e saída simplificam a execução da estratégia
  3. Procurar pequenos lucros constantes com negócios de curto prazo
  4. Alta rotação de capitais com ciclo curto

Análise de riscos

  1. A flutuação dos preços no fim de semana pode ser menor do que o esperado, não sendo possível abrir posições
  2. A volatilidade excessiva pode provocar uma parada de perdas
  3. Eventos significativos na segunda-feira podem causar diferenças de preços, incapazes de parar a perda a tempo

Soluções de riscos:

  1. Ajustar a faixa de flutuação das entradas
  2. Estabelecer pontos de stop loss adequados
  3. Fechar posições cedo, evitar a retenção durante os fins de semana

Orientações de otimização

  1. Ajustar os limiares de entrada com base nas diferentes características dos produtos
  2. Otimizar as regras de lucro com base nos resultados dos backtests
  3. Selecionar alavancagem com base na dimensão do capital
  4. Adicionar filtros de indicadores, tais como média móvel para entradas de tempo

Resumo

Esta estratégia de negociação de curto prazo tem uma lógica muito clara e medidas de controle de risco. Com ajuste adequado dos parâmetros e teste contínuo e otimização, ele pode gerar retornos de investimento estáveis. Ao mesmo tempo, o risco de grandes perdas de fim de semana devido à volatilidade excessiva precisa ser gerenciado por meio de controle de risco adequado.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Copyright Boris Kozak 
strategy("XBT Weekend Trade Strategy", overlay=true, default_qty_type=strategy.percent_of_equity,initial_capital=20000)
leverage = input(1,"Leverage")
profitTakingPercentThreshold = input(0.03,"Profit Taking Percent Threshold")

//****Code used for setting up backtesting.****///
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(12, "Backtest Start Month")
testStartDay = input(10, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2025, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FFFF : na
bgcolor(testPeriodBackgroundColor, transp=50)

testPeriod() => true
    
//****END Code used for setting up backtesting.****///


//*** Main entry point is here***//
// Figure out how many days since the Friday close 
days_since_friday = if dayofweek == 6
    0
else 
    if dayofweek == 7
        1
    else
        if dayofweek == 1
            2
        else
            if dayofweek == 2
                3
            else
                if dayofweek == 3
                    4
                else
                    if dayofweek == 4
                        5
                    else
                        6
    
// Grab the Friday close price
fridaycloseprice = request.security(syminfo.tickerid,'D',close[days_since_friday])
plot(fridaycloseprice)
strategy.initial_capital = 50000
// Only perform backtesting during the window specified 
if testPeriod()
    // If we've reached out profit threshold, exit all positions 
    if ((strategy.openprofit/strategy.initial_capital) > profitTakingPercentThreshold)
        strategy.close_all()
    // Only execute this trade on saturday and sunday (UTC)
    if (dayofweek == 7.0 or dayofweek == 1.0)
        // Begin - Empty position (no active trades)
        if (strategy.position_size == 0)
            // If current close price > threshold, go short 
            if ((close>fridaycloseprice*1.045))
                strategy.entry("Short Entry", strategy.short, leverage)
            else
                // If current close price < threshold, go long
                if (close<(fridaycloseprice*0.955))
                    strategy.entry("Long Entry",strategy.long, leverage)
        // Begin - we already have a position
        if (abs(strategy.position_size) > 0)
            // We are short 
            if (strategy.position_size < 0)
                if ((close>strategy.position_avg_price*1.045))
                    // Add to the position
                    strategy.entry("Adding to Short Entry", strategy.short, leverage)
            else
                strategy.entry("Long Entry",strategy.long,leverage)
    // On Monday, if we have any open positions, close them 
    if (dayofweek==2.0)
        strategy.close_all()
 






Mais.