Estrategia de negociación de la gama de fines de semana

El autor:¿ Qué pasa?, Fecha: 2023-09-13 11:53:09
Las etiquetas:

Esta estrategia opera específicamente las oscilaciones de precios del fin de semana determinando la dirección larga / corta en función de bandas porcentuals preestablecidas.

Estrategia lógica:

  1. Establecer bandas porcentuales basadas en el cierre del viernes anterior, por ejemplo, un 4,5% de subida/baja.

  2. Entra corto si el precio excede la banda alcista, entra largo si está por debajo de la banda bajista.

  3. Añadir posiciones al alcanzar nuevas bandas en la dirección existente.

  4. Tome ganancias cuando las ganancias acumuladas alcancen un umbral, como el 10%.

  5. Permitan un máximo de dos posiciones simultáneas, una en cada dirección.

Ventajas:

  1. Las bandas de porcentaje fijas permiten el comercio mecánico.

  2. Las entradas de varios niveles logran una mejor base de costos.

  3. La periodicidad es estable, no afectada por los fundamentos.

Riesgos:

  1. Incapaz de limitar el tamaño de la pérdida de una sola operación, corre el riesgo de grandes operaciones perdedoras.

  2. Los parámetros fijos no pueden adaptarse a la variación de la volatilidad a lo largo de los períodos.

  3. La periodicidad puede cambiar con el tiempo, invalidando el modelo.

En resumen, esta estrategia suele operar el ciclo del fin de semana, pero enfrenta desafíos para obtener ganancias de manera consistente.


/*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()
 






Más.