Estratégia de gama da EHMA

Autora:ChaoZhang, Data: 2022-05-09 23:31:59
Tags:EHMA

Este script é uma versão modificada do script do @borserman para a média móvel exponencial do casco Todo o crédito pela EHMA é dele.

Além do EHMA, este script funciona com um intervalo em torno do EHMA (que pode ser modificado), em uma tentativa de ser robusto contra sinais falsos. Muitas vezes uma barra fechará abaixo de uma média móvel, apenas para reverter novamente a próxima barra, o que consome seus lucros. Especialmente em prazos mais curtos, mas também em prazos mais longos chocantes, isso pode tornar uma estratégia pouco atraente de usar.

Com a faixa em torno do EHMA, a estratégia só entra em uma posição longa/saída curta se uma barra cruzar acima da faixa superior. vice-versa, ela só entra em uma posição curta/saída longa se uma barra cruzar abaixo da faixa inferior. Isso evita posições se as barras se comportarem chocantes dentro da faixa EHMA e só entra em uma posição se o mercado estiver confiante em sua direção. Dito isso, falsificações ainda são possíveis, mas muito menos frequentes. Tendo testado essa estratégia versus a estratégia EHMA regular (e tendo experimentado várias configurações), essa versão parece ser muito mais robusta e lucrativa!

Disclaimer Lembre-se de que o desempenho passado pode não ser indicativo dos resultados futuros. Devido a vários fatores, incluindo a mudança das condições de mercado, a estratégia pode deixar de funcionar tão bem como no backtesting histórico. Este post e o roteiro não fornecem nenhum conselho financeiro.

backtest

img


/*backtest
start: 2021-05-08 00:00:00
end: 2022-05-07 23:59:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
//strategy(
//  title="EHMA Range Strategy",
//  process_orders_on_close=true,
//  explicit_plot_zorder=true,
//  overlay=true, 
//  initial_capital=1500, 
//  default_qty_type=strategy.percent_of_equity, 
//  commission_type=strategy.commission.percent, 
//  commission_value=0.085,
//  default_qty_value=100
//  )
  

// Position Type
pos_type = input(defval = "Both", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
//startDate  = input(timestamp("2017-01-01T00:00:00"))
//finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

Relacionados

Mais.