Адаптивная стратегия торговли на основе множественных скользящих средних с прорывом импульса

SMMA ZLEMA EMA MA SMA
Дата создания: 2025-01-10 15:27:53 Последнее изменение: 2025-01-10 15:27:53
Копировать: 0 Количество просмотров: 433
1
Подписаться
1617
Подписчики

Адаптивная стратегия торговли на основе множественных скользящих средних с прорывом импульса

Обзор

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

Стратегический принцип

Стратегия использует четыре ключевые скользящие средние: src (SMMA на основе HLC3), hi (SMMA на основе high), lo (SMMA на основе low) и mi (ZLEMA на основе src). Торговые сигналы в основном основаны на пересечении и позиционных соотношениях между этими скользящими средними. Сочетание нескольких сигнальных условий обеспечивает надежность торговых сигналов. Сигналы на покупку включают четыре различные комбинации условий, а сигналы на продажу также включают четыре различные комбинации условий. Сигнал закрытия основан на пересечении цены и скользящей средней mi, а также на позиционном соотношении между скользящими средними.

Стратегические преимущества

  1. Механизм подтверждения множественных сигналов повышает точность транзакций
  2. Адаптивные функции позволяют стратегиям адаптироваться к различным рыночным условиям
  3. Использование SMMA и ZLEMA для снижения влияния ложных сигналов
  4. Многоуровневая система сигналов обеспечивает больше возможностей для торговли
  5. Четкие условия закрытия помогают контролировать риски

Стратегический риск

  1. Пересечение скользящих средних может вызвать задержку, влияющую на время входа
  2. Множество условий могут привести к упущению некоторых важных торговых возможностей
  3. Может генерировать слишком много ложных сигналов на нестабильном рынке
  4. Неправильные настройки параметров могут повлиять на эффективность стратегии
  5. Необходимо учитывать влияние транзакционных издержек на доходность стратегии

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

  1. Внедрение фильтров волатильности для корректировки параметров стратегии в периоды высокой волатильности
  2. Добавьте анализ объема торгов для повышения надежности сигнала
  3. Адаптивный механизм оптимизации параметров скользящего среднего
  4. Добавить индикатор силы тренда для повышения точности оценки тренда.
  5. Разработать динамический механизм остановки потерь для улучшения возможностей контроля рисков

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

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

Исходный код стратегии
/*backtest
start: 2024-01-10 00:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6

//study("Limit order strategy", overlay=true)
strategy('Limit order strategy', overlay = true)

lengthMA = input(1)
lengthmi = input(14)
lengthhigh = input(14)
lengthlow = input(14)

calc_smma(src, len) =>
    smma = 0.0
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d


src = calc_smma(hlc3, lengthMA)
hi = calc_smma(high, lengthhigh)
lo = calc_smma(low, lengthlow)
mi = calc_zlema(src, lengthmi)

plot(src, color = color.new(#FF1493, 0), linewidth = 2, title = 'src')
plot(hi, color = color.new(#7CFC00, 0), linewidth = 2, title = 'hi')
plot(lo, color = color.new(#FF0000, 0), linewidth = 2, title = 'lo')
plot(mi, color = color.new(#00FFFF, 0), linewidth = 2, title = 'mi')


//strategy.order("buy", true, 1, stop = na, when = openbuy) // buy by market if current open great then previous high
//strategy.order("sell", false, 1, stop = na, when = opensell) // sell by market if current open less then previous low
//if src >= mi and src[1] <= mi[1] and src[1] <= lo[1]
//	strategy.entry("buy 1", strategy.long, qty = 15)
sigorderbuy1 = src > mi and src[1] < mi[1] and src < lo and mi < lo
sigorderbuy2 = src > lo and src[1] < lo[1] and mi < lo
sigorderbuy3 = src > hi and src[1] < hi[1] and mi < hi
sigorderbuy4 = src > mi and src[1] < mi[1] and src > hi and mi > hi
//sigorderbuy5 = mi > hi and  src > hi  and src > mi and src[1] < mi[1] 
//sigorderbuy6 = mi < hi and src > hi and src[1] < hi[1]
sigclosebuy = src < mi and src[1] > mi[1] or mi < lo and src < lo and src[1] > lo[1]

sigordersell1 = src < mi and src[1] > mi[1] and src > hi and mi > hi
sigordersell2 = src < hi and src[1] > hi[1] and mi > hi
sigordersell3 = src < lo and src[1] > lo[1] and mi > lo
sigordersell4 = src < mi and src[1] > mi[1] and src < lo and mi < lo
//sigordersell5 = mi < lo and  src < lo  and src < mi and src[1] > mi[1] 
//sigordersell6 = mi > lo and src < lo and src[1] > lo[1]
sigclosesell = src > mi and src[1] < mi[1] or mi > hi and src > hi and src[1] < hi[1]

plot(sigorderbuy1 ? 1 : 0, 'sigorderbuy1')
plot(sigorderbuy2 ? 1 : 0, 'sigorderbuy2')
plot(sigorderbuy3 ? 1 : 0, 'sigorderbuy3')
plot(sigorderbuy4 ? 1 : 0, 'sigorderbuy4')
//plot(sigorderbuy5 ? 1 : 0,"sigorderbuy5") 
//plot(sigorderbuy6 ? 1 : 0,"sigorderbuy6") 

plot(sigordersell1 ? 1 : 0, 'sigordersell1')
plot(sigordersell2 ? 1 : 0, 'sigordersell2')
plot(sigordersell3 ? 1 : 0, 'sigordersell3')
plot(sigordersell4 ? 1 : 0, 'sigordersell4')
//plot(sigordersell5 ? 1 : 0,"sigordersell5") 
//plot(sigordersell6 ? 1 : 0,"sigordersell6")

plot(sigclosebuy ? 1 : 0, 'sigclosebuy')
plot(sigclosesell ? 1 : 0, 'sigclosesell')


openbuy = sigorderbuy1 or sigorderbuy2 or sigorderbuy3 or sigorderbuy4 // or sigorderbuy5 or sigorderbuy6
opensell = sigordersell1 or sigordersell2 or sigordersell3 or sigordersell4 //or sigordersell5 or sigordersell6
openclosebuy = sigclosebuy
openclosesell = sigclosesell

alertcondition(condition = openbuy, title = 'sigorderbuy all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Buy {{ticker}} sig_b1={{plot("sigorderbuy1")}} sig_b2={{plot("sigorderbuy2")}} sig_b3={{plot("sigorderbuy3")}} sig_b4={{plot("sigorderbuy4")}}"}')
alertcondition(condition = opensell, title = 'sigordersell all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Sell {{ticker}} sig_s1={{plot("sigordersell1")}} sig_ss={{plot("sigordersell2")}} sig_s3={{plot("sigordersell3")}} sig_s4={{plot("sigordersell4")}} sig_s5={{plot("sigordersell5")}} sig_61={{plot("sigordersell6")}}"}')

alertcondition(condition = sigclosebuy, title = 'Close buy', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=short"}')
alertcondition(condition = sigclosesell, title = 'Close sell', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=long"}')

if sigorderbuy1
    strategy.order('Buy 1', strategy.long, 1)
if sigorderbuy2
    strategy.order('Buy 2', strategy.long, 1)
if sigorderbuy3
    strategy.order('Buy 3', strategy.long, 1)
if sigorderbuy4
    strategy.order('Buy 4', strategy.long, 1)


if sigordersell1
    strategy.order('sell 1', strategy.short, 1)
if sigordersell2
    strategy.order('sell 2', strategy.short, 1)
if sigordersell3
    strategy.order('sell 3', strategy.short, 1)
if sigordersell4
    strategy.order('sell 4', strategy.short, 1)
//strategy.order("sell 5", false, 1, when = sigordersell5)
//strategy.order("sell 6", false, 1, when = sigordersell6)