
A estratégia é uma implementação da típica estratégia de negociação de médias móveis de índices triplicados. Ela gera um sinal de negociação através de uma cruz entre uma EMA de 5 dias mais rápida, uma EMA de 20 dias mais rápida e uma EMA de 50 dias mais lenta.
Quando 5 dias EMA atravessou 20 dias EMA, e três EMAs estão em uma ordem múltipla ((5 dias EMA > 20 dias EMA > 50 dias EMA), e o atual preço de fechamento K linha do dia anterior aumento do preço de fechamento acima de certos ticks, fazer mais; quando 5 dias EMA atravessou 20 dias EMA, e três EMAs estão em uma ordem vazia ((5 dias EMA < 20 dias EMA < 50 dias EMA), e o atual preço de fechamento K linha do dia anterior queda do preço de fechamento acima de certos ticks, fazer vazia.
Após a entrada, se o preço estiver acima de certos ticks, o mecanismo de rastreamento de stop loss será ativado, ajustando continuamente a linha de stop loss de acordo com a flutuação do preço para bloquear o lucro mais lucrativo.
O uso de três EMAs para formar sinais de negociação pode filtrar o ruído do mercado e identificar tendências. O EMA rápido reflete as últimas mudanças, o EMA médio determina a direção da tendência e o EMA lento filtra oscilações.
Aumentar a comparação entre o preço de fechamento atual da linha K e o preço de fechamento do dia anterior pode filtrar ainda mais os sinais falsos e reduzir as transações desnecessárias.
O mecanismo de rastreamento de stop loss permite ajustar a linha de stop loss de forma dinâmica, de acordo com a evolução do mercado, maximizando o lucro.
A configuração de parâmetros da estratégia é flexível e pode ser otimizada para diferentes variedades e períodos, desde a linha do dia até a linha do minuto.
Em situações de turbulência, os sinais de cruzamento EMA são frequentes e podem gerar excesso de negociação, aumentando as taxas de transação e os custos de deslizamento.
O tracking stop pode parar prematuramente em grandes movimentos e não pode manter toda a tendência.
A característica de atraso da EMA pode perder o ponto de reversão da tendência e gerar perdas.
Os parâmetros necessários para a otimização, como a duração do ciclo EMA, rastreamento de ticks de parada e outros, variam muito entre as variedades e os ciclos de eficácia.
Pode ser combinado com outros indicadores, como MACD, KD, etc. para auxiliar a filtragem de sinais de negociação.
Pode ser testado e otimizado para encontrar a melhor combinação de parâmetros com base em variedades específicas e parâmetros de ciclo.
Os parâmetros podem ser ajustados dinamicamente por meio de métodos como intervenção manual ou aprendizado de máquina.
Pode-se considerar o fechamento do tracking stop loss, a tendência de posse total em determinadas circunstâncias.
Pode ser combinado com um stop automático para substituir o simples stop de rastreamento.
A estratégia integra os três métodos de análise técnica comuns de cruzamento de EMA, breakout de preço e rastreamento de stop loss, formando um sistema de negociação de acompanhamento de tendências mais abrangente e confiável. Através da otimização de parâmetros, pode ser adaptado a todas as variedades e períodos e funciona melhor em mercados com tendências evidentes.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
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/
// © Matt Dearden - IndoPilot
// @version=4
/////////////////////////////////////////////////////// Initial Parameters ///////////////////////////////////////////////////////
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true
strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax,
default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent,
commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500,
max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false)
///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////
DateFilter = input(false, "═════ Data Filtering ═════")
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000)
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000)
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000)
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000)
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000)
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000)
//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////
var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1])
OrderQty = 1
Buffer = InitBuffer / (Multiplier * 100)
/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////
EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)
//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer)
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer)
/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////
if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))
StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier)))
strategy.exit("Long Stoploss", "Long")
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier)))))
StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
strategy.exit("Short Stoploss", "Short")
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////
if (longCondition)
StartPrice := close
StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier))
strategy.entry("Long", strategy.long, qty=OrderQty)
strategy.exit("Long Stoploss", "Long")
if (shortCondition)
StartPrice := close
StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier))
strategy.entry("Short", strategy.short, qty=OrderQty)
strategy.exit("Short Stoploss", "Short")
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)