Esta estratégia negocia especificamente as oscilações de preços no fim de semana, determinando a direção longa / curta com base em faixas percentuais pré-estabelecidas.
Estratégia lógica:
Estabelecer intervalos percentuais com base no fechamento da sexta-feira anterior, por exemplo, 4,5% para cima/para baixo.
Entre em curto se o preço exceder a faixa de alta, entre em longo se estiver abaixo da faixa de baixa.
Adicionar posições ao atingir novas faixas na direção existente.
Obter lucro quando os ganhos acumulados atingirem um limiar, como 10%.
Permitam no máximo duas posições simultâneas, uma em cada direcção.
Vantagens:
As bandas de percentagem fixas permitem a negociação mecânica.
As entradas de vários níveis conseguem uma melhor base de custos.
A periodicidade é estável, não afetada pelos fundamentos.
Riscos:
Incapaz de limitar o tamanho da perda de uma única transação, corre o risco de grandes transações perdidas.
Os parâmetros fixos não conseguem adaptar-se à variação da volatilidade entre períodos.
A periodicidade pode mudar ao longo do tempo, invalidando o modelo.
Em resumo, esta estratégia freqüentemente negocia o ciclo de fim de semana, mas enfrenta desafios de bloquear os lucros de forma 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()