
A estratégia de retorno à média gradual de abertura de posição é um script de estratégia de negociação quantitativa avançada projetado pela HedgerLabs, com foco na técnica de retorno à média dos mercados financeiros. A estratégia aponta para os comerciantes que preferem a metodologia sistematizada e enfatizam a abertura de posição gradual com base na média móvel relativa dos preços.
O núcleo da estratégia é a média móvel simples (SMA). Todas as entradas e saídas são feitas em torno da média móvel. O comerciante pode personalizar o comprimento do MA para que ele se adapte a diferentes estilos de negociação e períodos de tempo.
O que torna esta estratégia única é o seu mecanismo de abertura de posição gradual. Quando o preço se desvia da média móvel em mais de uma determinada porcentagem, a estratégia inicia a primeira posição. Em seguida, a estratégia aumenta a posição de forma gradual, conforme o preço continua a se desviar da média móvel.
A estratégia também administra posições de forma inteligente. Quando o preço está abaixo da média móvel, faz mais e quando está acima, faz mais para se adaptar a diferentes condições de mercado. O ponto de equilíbrio é definido quando o preço toca a média móvel, com o objetivo de capturar potenciais pontos de reversão para obter o fechamento ideal da posição.
Através da ativaçãocalc_on_every_tickA estratégia permite avaliar continuamente as condições do mercado e reagir em tempo hábil.
A estratégia de abertura de posição gradual de regressão à média tem as seguintes vantagens:
A estratégia também apresenta alguns riscos:
Os riscos acima mencionados podem ser mitigados através de uma otimização apropriada das saídas, de um melhor julgamento de tendências ou de uma redução apropriada da margem de abertura de posições.
A estratégia pode ser melhorada em vários aspectos:
A estratégia de abertura de posição gradual de retorno à mediana concentra-se na técnica de negociação de retorno à mediana, usando posições de abertura de posição gradual sistematizadas, com parâmetros personalizáveis para diferentes variedades de negociação. A estratégia funciona bem em mercados voláteis e é adequada para os comerciantes de quantidade que se concentram em operações de linha curta.
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion with Incremental Entry by HedgerLabs", overlay=true, calc_on_every_tick=true)
// Input for adjustable settings
maLength = input.int(30, title="MA Length", minval=1)
initialPercent = input.float(5, title="Initial Percent for First Order", minval=0.01, step=0.01)
percentStep = input.float(1, title="Percent Step for Additional Orders", minval=0.01, step=0.01)
// Calculating Moving Average
ma = ta.sma(close, maLength)
// Plotting the Moving Average
plot(ma, "Moving Average", color=color.blue)
var float lastBuyPrice = na
var float lastSellPrice = na
// Function to calculate absolute price percentage difference
pricePercentDiff(price1, price2) =>
diff = math.abs(price1 - price2) / price2 * 100
diff
// Initial Entry Condition Check Function
initialEntryCondition(price, ma, initialPercent) =>
pricePercentDiff(price, ma) >= initialPercent
// Enhanced Entry Logic for Buy and Sell
if (low < ma)
if (na(lastBuyPrice))
if (initialEntryCondition(low, ma, initialPercent))
strategy.entry("Buy", strategy.long)
lastBuyPrice := low
else
if (low < lastBuyPrice and pricePercentDiff(low, lastBuyPrice) >= percentStep)
strategy.entry("Buy", strategy.long)
lastBuyPrice := low
if (high > ma)
if (na(lastSellPrice))
if (initialEntryCondition(high, ma, initialPercent))
strategy.entry("Sell", strategy.short)
lastSellPrice := high
else
if (high > lastSellPrice and pricePercentDiff(high, lastSellPrice) >= percentStep)
strategy.entry("Sell", strategy.short)
lastSellPrice := high
// Exit Conditions - Close position if price touches the MA
if (close >= ma and strategy.position_size > 0)
strategy.close("Buy")
lastBuyPrice := na
if (close <= ma and strategy.position_size < 0)
strategy.close("Sell")
lastSellPrice := na
// Reset last order price when position is closed
if (strategy.position_size == 0)
lastBuyPrice := na
lastSellPrice := na