
Эта стратегия использует индикатор ZigZag для определения направления тренда, а после подтверждения тренда проводит его отслеживание.
Эта стратегия основана на определении направления тенденции цены с помощью индикатора ZigZag. Индикатор ZigZag может фильтровать рыночный шум и определять направление основных колебаний цен. ZigZag подает торговый сигнал, когда цена создает новый высокий или новый низкий уровень.
В частности, стратегия сначала рассчитывает значение ZigZag, когда цена создает более высокий пик, ZigZag для высокой цены; когда цена создает более низкую низкую цену, ZigZag для низкой цены. Таким образом, ZigZag может четко отражать основные направления колебаний цены.
Стратегия определяет направление тренда на основе значения ZigZag. Когда ZigZag повышается, указывает на то, что он находится в тенденции к росту; когда ZigZag падает, указывает на то, что он находится в тенденции к снижению. Стратегия открывает позиции при повороте ZigZag, чтобы отслеживать направление тренда.
В частности, стратегия открывает многопорядочные позиции при формировании нового высокого уровня в результате поворота ZigZag, и открывает пустые позиции при формировании нового низкого уровня в результате поворота ZigZag. Условия плавного положения для поворота ZigZag снова и наоборот. Таким образом, реализуется автоматическая стратегия торговли, основанная на тенденции, которую определяет ZigZag.
Риски можно снизить следующими способами:
Эта стратегия может быть оптимизирована в следующих аспектах:
Добавление стратегии стоп-лосса для управления риском однократного убытка. Можно установить движущийся стоп-лосса или привязанный стоп-лосса.
Добавление механизма определения обратного тренда. Можно использовать MACD, движущиеся средние и другие показатели, чтобы закрыть позицию, когда будет определено обратное тренд.
Присоединяйтесь к модулю повторного входа. Если тенденция продолжится, вы можете надлежащим образом увеличить свои позиции, чтобы получить больше прибыли.
Добавление моделей машинного обучения. Модели глубокого обучения, такие как LSTM, могут быть обучены, чтобы помочь ZigZag определить направление тенденций.
Оптимизация механизма управления капиталом. Размер позиции может быть оптимизирован в соответствии с теорией вывода или корреляции.
Настройка параметров полной оптимизации. Параметры оптимизации могут быть установлены с помощью исторической обратной связи и ссылки на профессиональные книги, такие как длина цикла ZigZag.
Эта стратегия использует показатель ZigZag для определения направления тренда, реализуя торговую стратегию, основанную на тренде. Логика стратегии проста, ясна и легко реализуема. Однако существуют такие проблемы, как зависимость от одного показателя и риск обратного тренда. Мы можем использовать многомерную оптимизацию с точки зрения остановки, вспомогательных показателей, модулей повторного входа и машинного обучения, чтобы сделать стратегию более стабильной и рациональной.
/*backtest
start: 2022-10-23 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's ZZ Strategy v1.0", shorttitle = "ZZ str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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")
//ZigZag
zigzag() =>
_isUp = close >= open
_isDown = close <= open
_direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
_zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)
//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)
//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)
//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()