Estratégia de Trailing Stop Triplo EMA


Data de criação: 2023-10-17 15:05:41 última modificação: 2023-10-17 15:05:41
cópia: 2 Cliques: 715
1
focar em
1617
Seguidores

Estratégia de Trailing Stop Triplo EMA

Visão geral

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.

Princípios

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.

Vantagens

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Riscos

  1. 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.

  2. O tracking stop pode parar prematuramente em grandes movimentos e não pode manter toda a tendência.

  3. A característica de atraso da EMA pode perder o ponto de reversão da tendência e gerar perdas.

  4. 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.

Direção de otimização

  1. Pode ser combinado com outros indicadores, como MACD, KD, etc. para auxiliar a filtragem de sinais de negociação.

  2. 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.

  3. Os parâmetros podem ser ajustados dinamicamente por meio de métodos como intervenção manual ou aprendizado de máquina.

  4. Pode-se considerar o fechamento do tracking stop loss, a tendência de posse total em determinadas circunstâncias.

  5. Pode ser combinado com um stop automático para substituir o simples stop de rastreamento.

Resumir

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.

Código-fonte da estratégia
/*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)