Количественная торговая стратегия, основанная на волновом тренде


Дата создания: 2023-11-28 16:17:31 Последнее изменение: 2023-11-28 16:17:31
Копировать: 1 Количество просмотров: 715
1
Подписаться
1619
Подписчики

Количественная торговая стратегия, основанная на волновом тренде

Обзор

Эта стратегия основана на волновых трендовых показателях. Волновые трендовые показатели, в сочетании с ценовым каналом и средним значением, позволяют эффективно идентифицировать рыночные тенденции и посылать сигналы о покупке и продаже.

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

  1. Вычислить треугольный скользящий средний ценовой показатель ap, а также индексный скользящий средний ценовой показатель ap esa。
  2. Вычислить индексную скользящую среднюю d {\displaystyle d} для абсолютного разрыва ap и esa.
  3. Получен показатель колебаний ci。
  4. Вычислите n2 циклические средние ци, получив волновой трендовый показатель wt1。
  5. Установите линию перекупа и линию перепродажи.
  6. Если вы пересекаете линию сверхпродажи на wt1, то сделайте больше; если вы пересекаете линию сверхпокупки на wt1, то сделайте пустое.

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

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

Риски и решения

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

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

  1. Можно рассмотреть использование с другими пакетами индикаторов, такими как KDJ, MACD и т. Д., чтобы сформировать портфель сделок и повысить стабильность стратегии.
  2. Можно спроектировать автоматические механизмы остановки убытков, такие как остановка отслеживания, остановка скоростной линии и т. д., чтобы контролировать одиночные потери.
  3. Вместе с алгоритмами глубокого обучения, можно автоматически оптимизировать параметры и повысить вероятность успешной стратегии путем обучения обратной связи данных.

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

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

Исходный код стратегии
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@author SoftKill21
//@version=4

strategy(title="WaveTrend strat", shorttitle="WaveTrend strategy")
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
Overbought = input(70, "Over Bought")
Oversold = input(-30, "Over Sold ")

// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2001, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true //and (london or newyork)

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(Overbought, color=color.red)
plot(Oversold, color=color.green)

plot(wt1, color=color.green)
longButton = input(title="Long", type=input.bool, defval=true)
shortButton = input(title="Short", type=input.bool, defval=true)

if(longButton==true)
    strategy.entry("long",1,when=crossover(wt1,Oversold) and time_cond)
    strategy.close("long",when=crossunder(wt1, Overbought))
    
if(shortButton==true)
    strategy.entry("short",0,when=crossunder(wt1, Overbought) and time_cond)
    strategy.close("short",when=crossover(wt1,Oversold))

//strategy.close_all(when= not (london or newyork),comment="time")
if(dayofweek == dayofweek.friday)
    strategy.close_all(when= timeinrange(timeframe.period, "1300-1400"), comment="friday")