Стратегия скользящего стоп-сигнала Triple EMA


Дата создания: 2023-10-17 15:05:41 Последнее изменение: 2023-10-17 15:05:41
Копировать: 2 Количество просмотров: 715
1
Подписаться
1617
Подписчики

Стратегия скользящего стоп-сигнала Triple EMA

Обзор

Эта стратегия является реализацией типичной трейдинговой стратегии движущихся средних индексов. Она генерирует торговый сигнал путем перекрестного соотношения более быстрых 5-дневных ЭМА, среднебыстрых 20-дневных ЭМА и медленных 50-дневных ЭМА. В то же время, она также сочетает в себе определенные тики роста или падения текущей K-линии по цене закрытия за день до закрытия, чтобы отфильтровать ложные сигналы. Кроме того, эта стратегия использует отслеживание стоп-убытков для блокирования прибыли.

Принципы

Если 5-дневная EMA проходит 20-дневную EMA, и все три EMA имеют множественную строку ((5-дневная EMA > 20-дневная EMA > 50-дневная EMA), и текущая цена закрытия K-линии выросла более чем на определенные тики за день до этого, сделайте больше; если 5-дневная EMA проходит 20-дневную EMA, и все три EMA имеют пустую строку ((5-дневная EMA < 20-дневная EMA < 50-дневная EMA), и текущая цена закрытия K-линии упала более чем на определенные ticks за день до этого, сделайте пустую.

После входа в рынок, если цена движется выше определенных тиков, запускается механизм отслеживания стоп-лосса, который постоянно корректируется в соответствии с ценовыми колебаниями, чтобы закрепить более выгодные ставки.

Преимущества

  1. Используя тройной EMA для формирования торговых сигналов, можно эффективно фильтровать рыночный шум, идентифицировать тренды. Быстрое EMA отражает последние изменения, среднескоростное EMA определяет направление тренда, медленное EMA фильтрует колебания.

  2. Добавление сравнения текущей цены закрытия линии K с ценой закрытия за предыдущий день позволяет дополнительно отфильтровывать ложные сигналы и уменьшать ненужные сделки.

  3. Применение механизма отслеживания стоп-лосса позволяет динамически корректировать линию стоп-лосса в зависимости от движения рынка, максимально закрепляя прибыль.

  4. Параметры стратегии могут быть настроены гибко и оптимизированы для различных видов и периодов, от солнечных до минутных.

Риск

  1. В условиях шока EMA-пересечения бывают частыми, что может привести к чрезмерному количеству сделок и увеличить торговые сборы и стоимость скольжения.

  2. Следить за остановкой может быть преждевременно в случае сильного потрясения и не может удерживать всю тенденцию.

  3. Задержка EMA может пропустить переломный момент и привести к убыткам.

  4. Необходимо оптимизировать параметры, такие как длина цикла EMA, отслеживание стоп-стиков и т. д.

Направление оптимизации

  1. Вместе с другими индикаторами, такими как MACD, KD и т. д., могут быть использованы для фильтрации торговых сигналов.

  2. Можно тестировать и оптимизировать для определения оптимального сочетания параметров в зависимости от конкретных сортов и циклов.

  3. Параметры могут быть динамически скорректированы с помощью методов, таких как искусственное вмешательство или машинное обучение.

  4. В определенных ситуациях можно рассмотреть возможность закрытия слежения за стоп-порогом и полного удержания позиции.

  5. Вместо простого отслеживания потерь можно использовать автоматическую остановку.

Подвести итог

Эта стратегия объединяет три распространенных метода технического анализа: пересечение EMA, ценовой прорыв и отслеживание остановок, чтобы создать более полную и надежную торговую систему для отслеживания тенденций. Благодаря оптимизации параметров, она может быть адаптирована к различным видам и циклам, и она лучше всего работает на рынках с заметной тенденцией. Однако в этой стратегии также есть некоторые типичные недостатки стратегии технического анализа, которые требуют дальнейшей оптимизации для более широкого спектра рыночных ситуаций.

Исходный код стратегии
/*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)