
Esta estratégia é uma típica estratégia de cruzamento de médias móveis, que usa dois conjuntos de médias médias, um conjunto de médias médias rápidas e um conjunto de médias médias lentas ao mesmo tempo. Quando a média rápida atravessa a média lenta, gera um sinal de compra; Quando a média rápida atravessa a média lenta, gera um sinal de venda.
A lógica principal da estratégia é baseada no cruzamento de dois conjuntos de linhas médias rápidas e lentas para determinar o tempo de entrada e saída.
Em primeiro lugar, calculemos dois conjuntos de medias rápidas e lentas:
Então, julgue se o EMA rápido é o SMA de ouro ou o SMA de forquilho:
Para filtrar os sinais falsos, foi adicionado um segundo grupo de confirmações de EMA e SMA:
Assim, através de dois conjuntos de confirmação de equilíbrio rápido e lento, muitos falsos sinais podem ser filtrados, aumentando a confiabilidade do sinal.
Quando o julgamento produz um sinal de compra, faça mais entrada; Quando o julgamento produz um sinal de venda, faça entrada em branco.
Além disso, a estratégia também configura uma lógica de stop-loss. Quando a posição é mantida, o preço de stop-loss e stop-loss é monitorado de acordo com a taxa de ganho e perda definida.
A estratégia tem as seguintes vantagens:
A estratégia também apresenta alguns riscos:
Para controlar os riscos, recomenda-se:
A estratégia também pode ser melhorada em alguns aspectos:
Em geral, a estratégia de duplo equilíbrio de forquilhos e forquilhos forma um sinal de negociação através do cruzamento de equilíbrios rápidos e lentos, configura um risco de controle de parada e perda, tem características simples, intuitivas e fáceis de implementar. A estratégia pode ser otimizada por parâmetros de acordo com o mercado e a demanda, e também pode ser usada com outros indicadores técnicos ou combinações de estratégias.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JMLSlop
//@version=4
src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)
// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len)
//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)
//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)
//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)
// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01
plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")
// Orders config
takeProfitPrice =
(strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na
longStopPrice = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)
longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
strategy.entry("Enter L", strategy.long)
shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
strategy.entry("Enter S", strategy.short)
if (strategy.position_size > 0)
strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)