Эта стратегия является системой pullback, предназначенной для ценных бумаг с высокой волатильностью, поэтому, естественно, Биткоин является отличным выбором для торговли этим.
Стратегия рассчитывает волатильность, сравнивая изменение в цене закрытия предыдущих 2 свечей и использует это изменение в цене для создания скользящей средней. Полоса обернута вокруг скользящей средней со стандартным отклонением 1 для внутренней полосы и 2 для внешней полосы. Если цена выше предварительно установленного фильтра MA (движущегося среднего), то определяется, что мы находимся в восходящем тренде, поэтому стратегия выпустит сигнал, когда мы находимся в восходящем тренде, и произойдет откат, который приводит к увеличению нижней полосы внутреннего отклонения, но если цена продолжается и падает через полосу внешнего отклонения, то сигнал покупки не будет выпущен, поскольку это наносит ущерб тому, что рост волатильности слишком велик. Вы можете увидеть рост
Пользователь может изменить диапазон дат, который он хочет проверить, скользящий средний период для отслеживания волатильности и отклонений внутренней и внешней полос. На BTC я оставил внутреннее отклонение и наружные отклонения на стандартных настройках, но обнаружил, что отслеживание волатильности 3 периода хорошо для торговли 1 дневным диаграммой и отслеживание волатильности 5 периода хорошо для 3hr-графика. Поскольку это не стратегия покупки и хранения, то для торговли вы, вероятно, захотите придерживаться самых ликвидных монет, чтобы вы могли очень быстро входить и выходить на любой бирже. Если вы хотите использовать это на менее волатильных рынках, то изменение диапазона внутреннего отклонения до ~ 0,75 будет работать в порядке и на различных фьючерсных рынках.
Методы снижения риска:
Выберите подходящие подлежащие изменчивости, контроль размеров позиций.
Оптимизируйте параметры для уменьшения неэффективных сделок.
Используйте стоп-лосс и прибыль, строгое управление деньгами.
Сосредоточьтесь на эффективности исполнения, выбирайте жидкие основы.
Настраивайте параметры в соответствии с различными основными характеристиками.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать скользящий средний период для лучшего отслеживания волатильности различных базовых активов.
Корректировать параметры диапазона волатильности, чтобы лучше соответствовать диапазону волатильности конкретного базового актива.
Добавьте другие фильтры, такие как пик громкости, чтобы подтвердить сигналы.
Использовать методы машинного обучения для динамической оптимизации параметров адаптивности.
Испытание на более высокой частоте временных рамок для захвата больше торговых возможностей.
Добавьте движущийся стоп-лосс/take profit для отслеживания прибыли.
Сочетать с другими показателями или моделями для создания количественных стратегий портфеля.
Стратегия в целом довольно простая и интуитивная, она позволяет выявлять обратные тенденции с помощью индикатора волатильности для захвата переломных моментов на рынке. Существует большое пространство для оптимизации путем корректировки параметров и включения других технических индикаторов для дальнейшего повышения стабильности и прибыльности. Однако трейдеры должны быть осведомлены о проблемах с перенапряжением и настройкой кривой. Эта стратегия больше подходит для краткосрочной торговли, требуя строгого управления деньгами для контроля рисков.
/*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)