
Целью этой стратегии является низкорисковая стратегия отслеживания трендовых акций (или других трендовых рынков) с целью достижения минимальной рентабельности (например, на момент написания статьи AAPL имеет рентабельность только около 1,36%, FB - около 1,93% и SPY - 0,80%, все из которых остаются прибыльными).
Стратегия использует 200-дневную скользящую среднюю, пользовательские брин-полосы, 52-циклические взвешенные скользящие средние значения TSI и ADX.
Покупательский сигнал: цена закрытия выше 200-дневного скользящего среднего + цена закрытия 5 K-линий выше верхней пользовательской бурин-полосы + TSI положительная + ADX выше 20。
Из-за обратной оценки, эта стратегия применяется только к трендовым акциям, и некоторые условия продажи/декодирования были удалены, и используются только многозаказные ордера.
Преимущества этой стратегии заключаются в низком уровне вывода, минимальном риске и применении к низким рискам для большинства тенденциозных акций. Согласно тестовым данным, высокая доходность и максимальный вывод только AAPL составляют 1.36%, FB - 1.93% в течение периода ретроспективного анализа.
Используя в комбинации различные технические показатели, такие как Брин-лента, средняя MA, TSI, а также ADX, чтобы определить сильную или слабую тенденцию, покупайте при определении тенденции к росту, пытаясь захватить рывок на средней и длинной линиях трендовых акций. По сравнению с оценкой по одному показателю, эта стратегия использует несколько технических показателей, чтобы определить более точный, надежный и менее рискованный.
Стратегия также включает в себя стратегию остановки убытков, своевременную остановку убытков при изменении направления показателя ТСИ, максимальную блокировку прибыли и эффективный контроль риска.
Основные риски этой стратегии состоят в двух аспектах:
Риск внезапных событий. Некоторые события черной лебеди могут привести к резкому падению цен на акции, которое невозможно остановить.
Риск окончания тренда. Когда акции выходят из тренда, они могут выйти из него.
Для риска I можно установить более строгий механизм остановки убытков или остановку убытков с помощью искусственного вмешательства. Для риска II можно объединить более важные факторы для определения конца тренда, например, увеличение показателя объема оборота и т. д.
Эта стратегия также может быть оптимизирована в следующих аспектах:
Повышение стратегии остановки убытков, более точные точки остановки убытков и улучшение управления рисками.
Оптимизация среднелинейных параметров, тестирование стабильности различных комбинаций параметров.
Повышение количественных показателей, таких как система оценки, позволяет более точно определить начало и конец тренда.
Тестирование параметров более длинных временных циклов, адаптированных к более длинным линиям.
Эта стратегия использует ADX для определения силы тренда, TSI для определения направления тренда, Brin Belt для определения прорыва, Moving Average для определения долгосрочного тренда, многочисленные показатели взаимно проверяют друг друга, чтобы определить время покупки. Стоп-стратегия может эффективно контролировать риск. Эта стратегия подходит для долгосрочного отслеживания тренда акций, низкая ставка отступления, высокая прибыль, имеет определенное преимущество.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gary_trades
//This script has been designed to be used on trending stocks as a low risk trade with minimal drawdown, utilising 200 Moving Average, Custom Bollinger Band, TSI with weighted moving average and ADX strength.
//Backtest dates are set to 2010 - 2020 and all other filters (moving average, ADX, TSI , Bollinger Band) are not locked so they can be user amended if desired.
//Buy signal is given when trading above the 200 moving average + 5 candles have closed above the upper custom Bollinger + the TSI is positive + ADX is above 20.
//As back testing proved that this traded better only in tends then some Sell/Short conditions have been removed and this focueses on Long orders.
//Only requires 2 additional lines of code to add shorting orders.
//Close for either long or short trades is signaled once the TSI crosses in the opposite direction indicating change in trend strength or if stop loss is trggered.
//Further optimization could be achieved by adding a stop loss.
//NOTE: This only shows the lower indicators however for visualization you can use my script "CUSTOM BOLLINGER WITH SMA", which is the upper indicators in this stratergy.
//------------
//@version=4
strategy(shorttitle="Trend Chaser", title="ADX_TSI_Bol Band Trend Chaser", overlay=false, pyramiding=0,
currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10,
initial_capital=10000, commission_value=0.1)
//------------
//Custom Bollinger Band
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(0.382, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=color.gray, offset = offset, display=display.none)
p1 = plot(upper, "Upper", color=color.gray, offset = offset, display=display.none)
p2 = plot(lower, "Lower", color=color.gray, offset = offset, display=display.none)
fill(p1, p2, title = "Background", color=#787B86, transp=85)
//------------
//Moving Average
MAlen = input(200, minval=1, title="Length")
MAout = sma(src, MAlen)
plot(MAout, color=color.black, title="MA", offset=offset, linewidth=2, display=display.none)
//------------
//True Strength WMA
TSlong = input(title="Long Length", type=input.integer, defval=25)
TSshort = input(title="Short Length", type=input.integer, defval=13)
TSsignal = input(title="Signal Length", type=input.integer, defval=52)
double_smooth(src, TSlong, TSshort) =>
fist_smooth = wma(src, TSlong)
wma(fist_smooth, TSshort)
price = close
pc = change(price)
double_smoothed_pc = double_smooth(pc, TSlong, TSshort)
double_smoothed_abs_pc = double_smooth(abs(pc), TSlong, TSshort)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2 = wma(tsi_value, TSsignal)
plot(tsi_value, color=color.blue)
plot(wma(tsi_value, TSsignal), color=color.red)
hline(0, title="Zero")
//------------
//ADX
adxlen = input(13, title="ADX Smoothing")
dilen = input(13, title="DI Length")
keyLevel = input(20, title="Keylevel for ADX")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
plot(sig, color=color.black, title="ADX", style=plot.style_histogram, transp=40)
plot(20, color=color.green, title="ADX Keyline", linewidth=1)
//------------
//Identify Triggers
//Back Test Range
start = timestamp("America/New_York", 2010, 1, 1, 9,30)
end = timestamp("America/New_York", 2030, 7, 1, 0, 0)
//Custom Bollinger Band
Long1 = close > upper[5] and close[5] > upper [6]
Short1 = close < lower[5] and close[5] < lower [6]
//Moving Average
Long2 = close >= MAout[1]
Short2 = close <= MAout[1]
//True Strength WMA
Long3 = tsi_value > tsi2
Short3 = tsi_value < tsi2
//ADX
ADXkey = adx(dilen, adxlen) > 20 and adx(dilen, adxlen) < 100
//Buy
Buy = Long1 and Long2 and Long3 and ADXkey
CloseLong = crossunder(tsi_value,tsi2)
//Short
Sell = Short1 and Short2 and Short3 and ADXkey
CloseShort = crossover(tsi_value,tsi2)
//------------
//Entry and Exit
if time >= start and time <= end
strategy.entry("Long", true, when = Buy)
strategy.close("Long", when = CloseLong)