В процессе загрузки ресурсов... загрузка...

Адаптивная стратегия торговли с прорывным импульсом Multi-MA

Автор:Чао Чжан, Дата: 2025-01-10 15:27:53
Тэги:СММАЗЛЕМАЕМАМ.А.SMA

 Adaptive Multi-MA Momentum Breakthrough Trading Strategy

Обзор

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

Принцип стратегии

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

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

  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)


Связанные

Больше