Эта стратегия представляет собой систему обратной связи, предназначенную для высоко волатильных ценных бумаг, поэтому биткоин является очень идеальной разновидностью торгов. Эта стратегия может использоваться на дневном графике или более низких временных рамках (я нашел хорошие результаты на 3-часовых временных рамках, но не тестировал их ниже 1 часа).
Стратегия рассчитывает волатильность, сравнивая изменения в цене закрытия двух предыдущих K-линий, и использует это изменение в цене для создания движущегося среднего. На движущемся среднем оборачивается стандартный диапазон, внутренний - 1 стандартный диапазон, внешний - 2 стандартные диапазоны. Если цена выше, чем предварительно установленный фильтр движущейся средней, то определяется, что мы находимся в восходящем тренде, поэтому во время восходящей тенденции, если есть отказ, который приводит к пробиванию внутреннего стандартного диапазона, посылается сигнал покупки.
Пользователи могут менять диапазон дат, которые они хотят протестировать, рассчитывать стандартную разницу в пределах внутреннего и внешнего стандартных диапазонов волатильности. Для биткоина я оставляю внутреннюю и внешнюю стандартные диапазоны волатильности в стандартных настройках, но обнаружил, что 3-циклическое отслеживание волатильности хорошо подходит для торговли на дневном графике, а 5-циклическое отслеживание волатильности - для торговли на трехчасовом графике. Поскольку это не стратегия покупки и удержания, вы можете захотеть придерживаться наиболее волатильной валюты, чтобы быстро войти и выйти на любой бирже.
Как реагировать на риски:
Выбор подходящего волатильного индикатора, контроль одноразовой позиции.
Оптимизация параметров, снижение недействительных сделок.
Применение стоп-лосса, строгое управление деньгами.
Принимая во внимание эффективность исполнения сделок, выбирайте индексы с хорошей ликвидностью
Приспособить параметры к характеристикам различных стандартов.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация циклов движущихся средних для лучшего отслеживания колебаний различных индикаторов.
Настройка параметров диапазона частоты колебаний так, чтобы они были ближе к диапазону колебаний конкретного стандарта.
Добавление дополнительных фильтров, таких как увеличение объема торгов, для дальнейшей проверки торговых сигналов.
Использование машинного обучения для динамической оптимизации параметров, чтобы сделать стратегию более адаптивной.
Тест на более частое время, чтобы поймать больше возможностей для торговли.
Добавлено мобильное отслеживание стоп-стоп-лосс, чтобы прибыль была больше закреплена в аккаунте.
В сочетании с другими показателями или моделями, создать количественную комбинацию стратегий.
Стратегия в целом является более простой и интуитивной, используя индикаторы волатильности для выявления обратных ситуаций, чтобы захватить рыночные переломные моменты. Существует большое пространство для оптимизации стратегии, которая может продолжать повышать стабильность и прибыльность стратегии путем корректировки параметров и в сочетании с другими техническими показателями.
/*backtest
start: 2023-09-11 00:00:00
end: 2023-10-11 00:00:00
period: 4h
basePeriod: 15m
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 is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.
//@version=4
strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)
//VOLATILTY
CandleChange = ((close - close[1])/close)*100 //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)
//VOLATILITY BANDS
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)
InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)
upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")
band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)
//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)
//SETTING BACK TEST 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 = 2000, title = "From Year", minval = 1970)
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate
//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65
AlertMSG = "New stategy position" + tostring(strategy.position_size)
if (time_condition)
strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
if (LongFilter)
LongStop = strategy.position_avg_price - Loss
LongProfit = strategy.position_avg_price + Profit
strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)
if (time_condition)
strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
if (ShortFilter)
ShortStop = strategy.position_avg_price + Loss
ShortProfit = strategy.position_avg_price - Profit
strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)