Estrategia de fin de semana con rango limitado


Fecha de creación: 2023-09-13 11:53:09 Última modificación: 2023-09-13 11:53:09
Copiar: 1 Número de Visitas: 635
1
Seguir
1617
Seguidores

Esta estrategia está diseñada para operar en el fin de semana, con un margen de fluctuaciones preestablecido. Se trata de una estrategia típica de operaciones de choque.

Principio de la estrategia:

  1. Con referencia al cierre del viernes de la semana pasada, establezca un rango de alza y bajada, por ejemplo, el límite máximo de rango para el cierre del viernes es un aumento del 4,5%.

  2. Cuando el precio supera el límite superior de la franja, se realiza una operación de corto plazo; cuando el precio está por debajo del límite inferior, se realiza una operación más.

  3. En el caso de que ya haya una posición, continúe acumulando dependiendo de la franja que supere la nueva capa, por ejemplo, vacío o aumento.

  4. Cuando el beneficio acumulado alcanza una cierta proporción, la posición se detiene, por ejemplo, el 10%.

  5. Posiciones de hasta dos direcciones a la vez. Todas las posiciones se borraron antes de la apertura del lunes.

Las ventajas de esta estrategia:

  1. Establecer un intervalo de fluctuaciones fijas para realizar operaciones mecanizadas.

  2. El incremento gradual de la posición permite obtener mejores costos.

  3. Las leyes de la periodicidad son estables y no se ven afectadas por los fundamentos.

El riesgo de esta estrategia:

  1. No se puede limitar el tamaño de una sola pérdida, existe el riesgo de una gran pérdida.

  2. Los parámetros fijos no pueden adaptarse a las fluctuaciones del mercado en diferentes períodos de tiempo.

  3. Las leyes periódicas pueden cambiar, lo que conlleva el riesgo de que el modelo falle.

En resumen, la estrategia utiliza la regla de la periodicidad para el comercio frecuente, pero hay una cierta dificultad para el bloqueo de ganancias. Hay que estar atento a la falla de los parámetros y el riesgo de pérdidas individuales demasiado grandes, operar con cautela.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-12 00:00:00
period: 2d
basePeriod: 1d
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,)
strategy.initial_capital=50000
leverage = input(10,"Leverage")
profitTakingPercentThreshold = input(0.10,"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 = security(syminfo.ticker,'D',close[days_since_friday])
plot(fridaycloseprice)

// 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
                if ((close<strategy.position_avg_price*0.955))
                    strategy.entry("Adding to Long Entry",strategy.long,leverage)
    // On Monday, if we have any open positions, close them 
    if (dayofweek==2.0)
        strategy.close_all()