
Эта стратегия использует индикатор WaveTrend для определения ценового тренда и перепродажи, в сочетании с индикатором RSI для фильтрации сигналов, используя метод отслеживания тренда, чтобы совершить обратную операцию на перепродаже.
Эта стратегия использует индикатор WaveTrend для определения направления ценовой тенденции. WaveTrend, основанный на Rainbow, улучшается для определения направления ценовой тенденции путем вычисления разницы между средней линией Heikin-Ashi и абсолютным значением цены.
В частности, формула WaveTrend в стратегии гласит:
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
Из них esa - рассчитанная средняя линия Хейкина-Аши, d - среднее значение разницы между средней линией Хейкина-Аши и абсолютным значением цены.
RSI используется для определения перекупа и перепродажи. Формула RSI в коде:
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
Стандартные значения от 0 до 100: выше 70 - это зоны сверхпокупок, ниже 30 - зоны сверхпродаж.
В сочетании с этими двумя показателями, когда RSI ниже 25, WaveTrend ниже 60 является сверхпродажной зоной, делая сигнал; когда RSI выше 75, WaveTrend выше 60 является сверхпокупной зоной, делая сигнал.
Эта стратегия имеет следующие преимущества:
Однако эта стратегия также несет в себе некоторые риски:
Ответ:
Эта стратегия может быть оптимизирована в следующих направлениях:
Замена или увеличение показателей суждения для оптимизации точности сигнала. Например, добавление таких показателей суждения, как MACD, KD.
Оптимизация параметров для различных типов торгов. Например, корректировка циклов сглаживания для поиска оптимальной комбинации параметров.
Присоединяйтесь к стратегии отслеживания стоп-убытков, чтобы эффективно контролировать единичные потери. Например, остаточный процентный стоп-убыток, мобильный стоп-убыток и т. Д.
Рассмотрите различные стратегии набора запасов. Например, использование набора Мартингеля вместо первоначального фиксированного набора запасов.
Оптимизация диапазона параметров адаптивности, поиск оптимальных параметров для повышения точности суждения.
Стратегия имеет четкую общую концепцию, использует показатели волатильности для определения ценовых тенденций и эффективно фильтрует торговые сигналы шума. Стратегия имеет большое пространство для оптимизации и может быть улучшена с нескольких сторон, что делает стратегию более стабильной и надежной.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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")
//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)
//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if up1
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn1
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()