Esta estratégia adota cruzamento da EMA para rastrear as tendências de preços. Ele vai longo quando a EMA rápida cruza acima da EMA lenta e fecha a posição quando a EMA rápida cruza abaixo da EMA lenta. Principalmente adequado para produtos com tendências óbvias, seguindo efetivamente as tendências e ganhando retornos excessivos.
O principal indicador desta estratégia é a EMA, cuja fórmula é:
EMA (t) = C (t) ×2/ (n+1) + EMA (t-1) × (n-1) / (n+1)
onde t é o tick atual, C(t) é o preço de fechamento atual e n é o valor do parâmetro N. A EMA é uma técnica de média móvel com um fator ponderado, atribuindo mais peso aos preços recentes, reagindo assim mais rapidamente às últimas mudanças de preço.
A estratégia constrói EMAs rápidas e lentas e assume a travessia rápida da EMA acima da EMA lenta como sinal de compra e a travessia rápida da EMA abaixo da EMA lenta como sinal de venda.
As vantagens desta estratégia são as seguintes:
Os principais riscos são:
Para reduzir os riscos acima referidos, podem ser adoptadas as seguintes medidas de otimização:
A estratégia pode ser otimizada a partir dos seguintes aspectos:
Em resumo, esta é uma estratégia de tendência simples e prática que utiliza a EMA para julgar as tendências de preços. A lógica é clara e fácil de implementar. As vantagens estão na simplicidade de ajustar parâmetros e seguir as tendências efetivamente. As desvantagens são propensas a sinais falsos e o desempenho real pode ser inferior aos backtests. As próximas etapas de otimização podem se concentrar em adicionar filtros, parâmetros dinâmicos, construção de modelos para tornar a estratégia mais robusta.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("EMA交叉策略by GPT", format = format.inherit, overlay = true, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, initial_capital = 1000000) // 定義回測交易開始和結束時間的變數 start_time = input(title="開始時間", type=input.time, defval=timestamp("01 Jan 2020 00:00 +0000")) end_time = input(title="結束時間", type=input.time, defval=timestamp("31 Dec 2050 23:59 +0000")) // 判斷是否在回測交易時間範圍內 in_range = true // Define input variables fast_length = input(title="Fast EMA Length", type=input.integer, defval=5) slow_length = input(title="Slow EMA Length", type=input.integer, defval=20) // Define EMAs fast_ema = ema(close, fast_length) slow_ema = ema(close, slow_length) // Define buy and sell signals buy_signal = crossover(fast_ema, slow_ema) sell_signal = crossunder(fast_ema, slow_ema) // Buy signal if in_range and buy_signal strategy.entry("Buy", strategy.long, when=in_range) // Sell signal if in_range and sell_signal strategy.close("Buy", when=sell_signal)