Стратегия торговли двойной скользящей средней

Автор:Чао Чжан, Дата: 2024-02-29 14:54:25
Тэги:

img

Обзор

Стратегия двойной движущейся средней торговой сети - это стратегия трендовой торговли, которая отслеживает перекрестки между двойными движущимися средними. Стратегия использует экспоненциальную движущуюся среднюю (EMA) и взвешенную движущуюся среднюю (WMA) в качестве торговых сигналов.

Логика стратегии

Торговые сигналы этой стратегии исходят из золотого креста и смертного креста между 10-периодным краткосрочным EMA и 20-периодным долгосрочным WMA. Когда краткосрочная EMA пересекает длинный WMA, это указывает на то, что рынок переходит вверх, следовательно, длинный. Когда краткосрочная EMA переходит ниже долгосрочного WMA, это указывает на то, что рынок переходит вниз, следовательно, короткий.

После определения направления торговли стратегия устанавливает стоп-лосс ниже или выше цены входа на 1 период ATR, с двумя прибылями - первая прибыль устанавливается на 1 ATR выше или ниже цены входа, а вторая прибыль устанавливается на 2 ATR выше или ниже цены входа.

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

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

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

Риски

Движущиеся средние сами по себе имеют большее отставание, что создает риск отсутствия сигналов.

Установка стоп-лосса является важным компонентом стратегии. Если стоп-лосс слишком мал, он подвержен рыночному шуму. Если стоп-лосс слишком большой, он может не эффективно контролировать риски.

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

Руководство по оптимизации

  1. Проверьте EMA и WMA с различными параметрами, чтобы найти оптимальную комбинацию параметров. Слишком короткие EMA или слишком длинные WMA могут повлиять на эффективность стратегии.

  2. Выбирать фиксированные точки или ATR с множественным стоп-лосом на основе различных характеристик продукта и стилей торговли.

  3. Испытывать эффекты частичной позиции задержки и полной позиции задержки.

  4. Внедрить другие индикаторы для фильтрации сигналов, чтобы помочь EMA и WMA, чтобы улучшить качество сигнала.

Резюме

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


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 3h
basePeriod: 15m
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/
// © gpadihar

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
start_month   = input(title='Start month'  ,defval=1)
start_day     = input(title='Start day'    ,defval=1)
start_hour    = input(title='Start hour'   ,defval=0)
start_minute  = input(title='Start minute' ,defval=0)
end_time      = input(title='set end time?',defval=false)
end_year      = input(title='end year'     ,defval=3019)
end_month     = input(title='end month'    ,defval=12)
end_day       = input(title='end day'      ,defval=31)
end_hour      = input(title='end hour'     ,defval=23)
end_minute    = input(title='end minute'   ,defval=59)

// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema        = ema(close,ema_period)
wma        = wma(close,wma_period)

// Entry Condition
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)



Больше