Стратегия многоуровневой движущейся средней торговли вводит и останавливает потери на нескольких уровнях путем установки нескольких сдвижных движущихся средних линий с различными параметрами. Стратегия сначала рассчитывает 3 длинные линии и 3 короткие линии. Она длится, когда длинные линии ниже коротких линий, и становится короткой, когда короткие линии ниже длинных линий. Стратегия позволяет настраивать такие параметры, как движущийся средний период, соотношение сдвига, торгуемый временной диапазон и т. Д. Она подходит для средне-долгосрочной торговли трендом.
Вычислить простую скользящую среднюю цены src в течение периода len как базовую линию.
Установите количество длинных и коротких линий на основе длинных и коротких параметров.
Длинные линии1 и т. д. устанавливаются путем смещения базовой линии в соответствии с соотношениями длинного уровня1 и т. д. Краткие линии устанавливаются аналогично.
Вступать в сделки на нескольких уровнях, когда цена пересекает линии в течение торгуемых времен.
Стоп-лосс, когда цена достигнет базовой линии.
Силы закрыть все позиции после окончания времени.
Стратегия имеет следующие преимущества:
Многоуровневый вход позволяет получать прибыль на разных этапах тенденции.
Высоко настраиваемый с параметрами для различных продуктов и торговых стилей.
Надежная система срыва, основанная на скользящих средних.
Избегайте крупных событий, устанавливая временные диапазоны, с которыми можно торговать.
Сдержанные потери через стоп-лосс.
Некоторые риски этой стратегии:
Высокий риск от пирамидальных позиций, необходимый достаточный капитал.
Неправильные параметры могут привести к чрезмерной торговле.
Фиксированное время выхода может пропустить поздний тренд прибыли.
Не учитываются позиции на ночь и стоимость переноса.
Нет контроля над размером позиции.
Стратегия может быть улучшена в следующих аспектах:
Добавьте задержку потерь вместо времени выхода.
Рассмотрим стоимость переноса для позиций на ночь.
Добавьте остаточный стоп-лосс для получения поздней прибыли.
Динамические позиции размеров на основе текущей экспозиции.
Испытание параметров на различных продуктах и методы оптимизации конструкции.
Оптимизируйте уровни остановки потери, чтобы избежать ненужных остановок.
Многоуровневая стратегия скользящей средней прибыли от тенденций через многоуровневый вход на основе скользящих средних. Торгуемые времена и контроль стоп-лосса рискуют хорошо. Дальнейшие улучшения контроля затрат на перенос, оптимизация параметров, оптимизация стоп-лосса и т. Д. могут улучшить стратегию и стоит исследовать.
/*backtest start: 2022-09-16 00:00:00 end: 2023-09-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long") short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(3, minval = 1, title = "MA Length") src = input(ohlc4, title = "MA Source") shortlevel3 = input(15.0, title = "Short line 3") shortlevel2 = input(10.0, title = "Short line 2") shortlevel1 = input(5.0, title = "Short line 1") longlevel1 = input(-5.0, title = "Long line 1") longlevel2 = input(-10.0, title = "Long line 2") longlevel3 = input(-15.0, title = "Long line 3") needoffset = input(true, title = "Offset") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Variables size = strategy.position_size mult = 1 / syminfo.mintick //MA ma = sma(src, len) longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close //Lines colorlong1 = long >= 1 ? color.lime : na colorlong2 = long >= 2 ? color.lime : na colorlong3 = long >= 3 ? color.lime : na colorshort1 = short >= 1 ? color.red : na colorshort2 = short >= 2 ? color.red : na colorshort3 = short >= 3 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline3, offset = offset, color = colorshort1) plot(shortline2, offset = offset, color = colorshort2) plot(shortline1, offset = offset, color = colorshort3) plot(ma, offset = offset, color = color.blue) plot(longline1, offset = offset, color = colorlong1) plot(longline2, offset = offset, color = colorlong2) plot(longline3, offset = offset, color = colorlong3) //Trading lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] lots = 0.0 needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) if ma > 0 lots := round(size / lot) strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime)) lots := round(size / lot) strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime)) lots := round(size / lot) strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime)) lots := round(size / lot) strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime)) lots := round(size / lot) strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime)) lots := round(size / lot) strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime)) if size > 0 strategy.entry("TPL", strategy.short, 0, limit = ma) if size < 0 strategy.entry("TPS", strategy.long, 0, limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()