Стратегия торговли волновым трендом на основе LazyBear

Автор:Чао Чжан, Дата: 2023-12-19 12:07:14
Тэги:

img

Обзор

Это торговая стратегия, основанная на индикаторе Wave Trend LazyBear. Стратегия определяет настроение рынка путем вычисления волновой тенденции колебаний цен и принимает долгие и короткие решения соответственно.

Логика стратегии

Основой этой стратегии является индикатор волнового тренда LazyBear. Он сначала рассчитывает среднюю цену (AP), затем экспоненциальную скользящую среднюю AP (ESA) и абсолютное движение цены (D). Основываясь на ESA и D, стратегия рассчитывает индекс волатильности (CI), который затем вводит в экспоненциальную скользящую среднюю, чтобы генерировать линию волнового тренда (WT). WT далее обрабатывается в WT1 и WT2 с использованием простых скользящих средних. Когда WT1 пересекает WT2, он запускает золотой крест и идет на длинный. Когда WT1 пересекает ниже WT2, он запускает смертельный крест и идет на короткий.

Анализ преимуществ

Это очень простая, но практичная стратегия.

  1. Он определяет ценовую тенденцию и настроение рынка на основе индикатора Wave Trend.
  2. Простая логика торговли длинной/короткой на основе золотых/смертных крестов линий WT
  3. Настраиваемые параметры для регулирования чувствительности WT для различных циклов
  4. Гибкость добавления дополнительных фильтров, таких как время торговли

Анализ рисков

Эта стратегия сопряжена с некоторыми рисками:

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

Основными решениями являются:

  1. Оптимизировать параметры для настройки чувствительности WT
  2. Добавить другие индикаторы для подтверждения, чтобы избежать ложных сигналов
  3. Использовать стоп-лосс и прибыль
  4. Ограничение суточных сделок или позиций

Руководство по оптимизации

Есть возможности для дальнейшей оптимизации:

  1. Оптимизировать параметры WT для лучшей чувствительности или стабильности
  2. Использовать различные наборы параметров на основе циклов
  3. Добавьте такие показатели, как объем, волатильность для подтверждения
  4. Добавить стоп-лосс и взять прибыль
  5. Обогатите логику торговли, например, пирамиды, торговые сети.
  6. Исследуйте лучшие функции и правила с помощью машинного обучения

Резюме

В общем, это очень простая и практичная стратегия трендоустройства. Моделируя трендоустройство колебаний цен, он определяет условия рынка с перекупленными и перепроданными, чтобы генерировать торговые сигналы с использованием золотых крестов и смертных крестов WT. Стратегия проста в реализации, но может потребовать дальнейшей оптимизации для чувствительности и стабильности.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//
// @author LazyBear
//
// If you use this code in its original/modified form, do drop me a note. 
//
//@version=4
     
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
 
ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=3)
plot(osLevel2, color=color.green, style=3)

plot(wt1, color=color.white)
plot(wt2, color=color.fuchsia)
plot(wt1-wt2, color=color.new(color.blue, 80), style=plot.style_area)

//Strategy
strategy(title="T!M - Wave Trend Strategy", overlay = false, precision = 8, max_bars_back = 200, pyramiding = 0, initial_capital = 1000, currency = currency.NONE, default_qty_type = strategy.cash, default_qty_value = 1000, commission_type = "percent", commission_value = 0.1, calc_on_every_tick=false, process_orders_on_close=true)
    
longCondition  = crossover(wt1, wt2)
shortCondition = crossunder(wt1, wt2)

strategy.entry(id="Long Entry", comment="buy", long=true, when=longCondition and window())
strategy.close("Long Entry", comment="sell", when=shortCondition and window())      

//strategy.entry(id="Short Entry", long=false, when=shortCondition)

Больше