Эта стратегия основана на гибких показателях остановки, устанавливает сигналы покупки и продажи, проводит длинные и короткие позиции. Когда индикатор появляется с сигналом покупки, делайте больше; когда появляется сигнал продажи, делайте больше.
В основном эта стратегия использует эластичные паузавые индикаторы для выявления поворотных точек тренда и выполнения обратных операций. Внутренний индикатор использует индикаторы истинного диапазона для выявления предельных цен, которые рассматриваются как необычные прорывы, когда цена превышает предельные значения, и определяет вероятность реверсии тренда. В частности, индикатор поддерживает две переменные: предельную цену (EP) и цену триггера (TP). EP представляет самую высокую или самую низкую цену под текущим трендом.
В восходящем тренде, когда цена выше EP, определяется как необычный прорыв, в этом случае EP обновляется как самая высокая цена, TP - минимальная цена. Когда цена ниже TP, определяется обратный тренд, что создает сигнал продажи. В нисходящем тренде принцип схож.
Эта стратегия сочетает в себе механизм отслеживания стоп-лосса, который при открытии позиции отслеживает оптимальную цену стоп-лосса в режиме реального времени, контролируя риски при одновременном обеспечении прибыли.
В частности, в частности:
Поскольку они используют индикаторы для выявления обратных точек тренда, их не так уж и легко поймать.
Следить за механизмом остановки потерь, чтобы блокировать прибыль и избежать увеличения потерь.
Параметры показателя просты и легко реализуются.
С помощью этой системы можно настроить сигналы для покупки и продажи, что позволяет легко управлять.
Гибкость в настройке циклов рецензирования и всесторонней оценке эффективности стратегии.
В то же время в этой стратегии есть некоторые риски:
Поскольку показатели задерживаются, они могут пропустить оптимальные точки для обратного движения.
Снижение цен может быть слишком радикальным и может быть обусловлено короткосрочными колебаниями цен.
Неправильный выбор циклов повторной проверки не позволяет полностью оценить эффективность стратегии.
Необходимо обратить внимание на влияние транзакционных издержек на прибыль.
Оптимизация рисков может быть осуществлена в следующих аспектах:
Например, мы можем изменить параметры показателей, чтобы уменьшить задержку.
Оптимизируйте алгоритмы остановки убытков, чтобы избежать ошибок.
Выбор подходящего цикла повторного тестирования обеспечивает надежность.
Оптимизировать управление позициями и снизить затраты на транзакции.
Эта стратегия может быть оптимизирована в следующих аспектах:
В сочетании с трендовыми показателями, чтобы избежать обратной торговли. Можно присоединиться к таким показателям, как MA, чтобы определить большой тренд.
Оптимизировать алгоритмы управления позициями, такие как фиксированные, динамические и т.д.
Включите фильтр объема сделок, чтобы избежать ошибочных сделок, вызванных пробелами.
Оптимизируйте параметры, чтобы найти оптимальные комбинации параметров.
Присоединяйтесь к стратегии остановки, чтобы вовремя остановить тренд.
Оптимизируйте стратегию остановки, чтобы сделать остановку более плавной. Можно попробовать алгоритмы остановки, такие как Chandelier Exit.
Оптимизировать типы сделок, временные периоды и т.д. и повысить адаптивность стратегии.
Включение алгоритмов машинного обучения делает стратегию более адаптивной.
В целом стратегия более простая и надежная, использует гибкие индикаторы остановки для определения точек переворота и использует механизмы отслеживания остановки для контроля риска.
Эта стратегия основана на индикаторе Parabolic SAR для генерации сигналов купли и продажи для длинных и коротких позиций.
Основой этой стратегии является выявление точек переворота тренда с использованием индикатора Parabolic SAR для торговли контртендом. Индикатор использует истинный диапазон для обнаружения экстремальных цен. Когда цена превышает экстремальную, это считается прорывом и признаком потенциального переворота тренда. В частности, индикатор поддерживает две переменные: экстремальную цену (EP) и триггерную цену (TP). EP представляет собой самую высокую / самую низкую цену текущего тренда, в то время как TP получена из EP.
В восходящем тренде, когда цена выше EP, это считается прорывом. EP затем обновляется до самой высокой цены, а TP до самой низкой цены. Когда цена падает ниже TP, выявляется обратный тренд и генерируется сигнал продажи. Тот же принцип применяется к нисходящему тренду.
Стратегия также включает в себя механизм отслеживания стоп-лосса. После открытия позиции она будет отслеживать оптимальную цену стоп-лосса в режиме реального времени, блокируя прибыль, контролируя риски. В частности, после длинного входа стоп-лосс отслеживает закрытие низкого уровня; после короткого входа он отслеживает закрытие высокого.
Основными преимуществами этой стратегии являются:
Используйте индикатор, чтобы определить точки переворота тренда, избегая того, чтобы попасть в ловушку трендов.
Следующая остановка потери блокирует прибыль и предотвращает более широкие потери.
Простые параметры показателей, легко внедряемые.
Конфигурируемые сигналы покупки/продажи для удобства.
Гибкая конфигурация периода обратного тестирования для тщательной оценки.
Также следует учитывать некоторые риски:
Задержка показателя может пропустить оптимальные точки перехода.
Агрессивные остановки могут быть остановлены краткосрочными колебаниями.
Неправильный выбор периода обратного тестирования не может полностью оценить стратегию.
Транзакционные издержки могут ухудшить прибыль.
Некоторые способы борьбы с рисками:
Оптимизируйте параметры, чтобы уменьшить задержку.
Улучшить алгоритм стоп-лосса, чтобы избежать ненужной остановки.
Выберите подходящие периоды обратных испытаний надежности.
Оптимизировать размер позиций для снижения затрат на транзакции.
Некоторые способы дальнейшей оптимизации стратегии:
Включайте индикаторы тренда, такие как MA, чтобы не попасть в ловушку контртендов.
Оптимизировать алгоритмы размещения позиций, например, фиксированные фракционные, динамические.
Добавьте фильтр громкости, чтобы избежать ложных сигналов от пробелов.
Оптимизация параметров для поиска оптимальных комбинаций.
Используйте стратегии получения прибыли, чтобы зафиксировать прибыль в тенденциях.
Усовершенствовать алгоритмы стоп-лосса для более плавных остановок.
Оптимизируйте различные продукты, временные рамки и т. Д., Чтобы улучшить адаптивность.
Включить машинное обучение для большей адаптивности.
Вкратце, это простая и надежная стратегия, использующая Parabolic SAR для выявления отклонений и отслеживания стоп-лосса для контроля риска. Она может работать как краткосрочная стратегия среднего отклонения. Но необходимо устранить задержку индикатора и сверхчувствительные остановки. Дальнейшая оптимизация может привести к улучшению производительности.
/*backtest start: 2023-09-10 00:00:00 end: 2023-10-10 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("PB SAR BackTest - Colorbar", overlay=false) // Full credit to Sawcruhteez, Lucid Investment Strategies LLC, Casey Bowman and Peter Brandt. // This is a strategy version of the Peterbolic SAR indicator created by the above-mentioned parties. // Original version of the indicator: https://www.tradingview.com/script/6nYrH3Vm-Peterbolic-SAR/ // SAR #1 // Lucid Sar // Branded under the name "Lucid SAR" // as agreed to with Lucid Investment Strategies LLC on July 9, 2019 // https://lucidinvestmentstrategies.com/ // see branch "lucid" // SAR #2 // Peterbolic Sar // Using the name "Peterbolic SAR" // as agreed to by Peter Brandt on October 2, 2019 // - https://twitter.com/PeterLBrandt/status/1179365590668075008 // in response to request from Sawcruhteez // - https://twitter.com/Sawcruhteez/status/1179213105705836544 // Sawcruhteez gives credit to @CrazyGabey for coming up with the name // - https://twitter.com/Sawcruhteez/status/1179213196583940097 // see branch "peterbolic" // SAR #3 // Sawcruhteez Sar // Branded under the name "Sawcruhteez SAR" // as agreed to with Sawcruhteez on September 11, 2019 // see branch "sawcruhteez" // Open Source on github // https://github.com/casey-bowman/sar/blob/peterbolic/peterbolic.pine // Created by Casey Bowman on July 4, 2019 // MIT License // Copyright (c) 2019 Casey Bowman // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. TSR() => // start with uptrend var uptrend = true var EP = high // extreme price - high or low depending on trend var SP = low // setup price var TP = float(na) // trigger price var setup = low var trigger = float(na) if barstate.isnew setup := low trigger = float(na) extreme_candle = false first_extreme_candle = false setup_candle = false trigger_candle = false waiting_for_setup = false waiting_for_trigger = false var since_extreme = 0 var since_setup = 0 waiting_for_setup := not extreme_candle and not na(SP) waiting_for_trigger := not na(TP) if not barstate.isfirst if barstate.isnew and extreme_candle[1] trigger := float(na) if barstate.isnew and setup_candle[1] setup := float(na) if barstate.isnew and waiting_for_trigger since_setup := since_setup + 1 trigger := TP if barstate.isnew and waiting_for_setup since_extreme := since_extreme + 1 setup := SP if uptrend if extreme_candle EP := high SP := low else if high > EP extreme_candle := true EP := high SP := low since_extreme := 0 since_setup := 0 else if waiting_for_setup if barstate.isconfirmed if close < SP setup_candle := true SP := float(na) TP := low if waiting_for_trigger if low < TP trigger_candle := true extreme_candle := true EP := low SP := high TP := float(na) uptrend := false since_extreme := 0 since_setup := 0 else if barstate.isconfirmed and extreme_candle TP := float(na) trigger := float(na) else if extreme_candle EP := low SP := high else if low < EP extreme_candle := true EP := low SP := high since_extreme := 0 since_setup := 0 else if waiting_for_setup if barstate.isconfirmed if close > SP setup_candle := true SP := float(na) TP := high if waiting_for_trigger if high > TP trigger_candle := true extreme_candle := true EP := high SP := low TP := float(na) uptrend := true since_extreme := 0 since_setup := 0 else if barstate.isconfirmed and extreme_candle TP := float(na) trigger := float(na) [trigger_candle, trigger, since_setup, setup_candle, setup, since_extreme, extreme_candle, uptrend] [TC, T, SS, SC, S, SE, EC, up] = TSR() // Make input options that configure backtest date range StartMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) StartDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) StartYear = input(title="Start Year", type=input.integer, defval=(2019), minval=1800, maxval=2100) EndMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) EndDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) EndYear = input(title="End Year", type=input.integer, defval=(2020), minval=1800, maxval=2100) // Look if the close time of the current bar falls inside the date range inDateRange = true buytrigger = (TC and up) selltrigger = (TC and not up) buysetup = (SC and not up) sellsetup = (SC and up) IntBuy = buytrigger ? 1 : 0 IntSB = buysetup ? 0.5 : 0 IntSell= selltrigger ? -1 : 0 IntSS = sellsetup ? -0.5 : 0 bgcolor = buytrigger ? color.green : selltrigger ? color.red : buysetup ? color.yellow : sellsetup ? color.orange : color.black trans = buytrigger ? 20 : selltrigger ? 20 : 100 bgcolor(bgcolor, 30) NUM = IntBuy + IntSB + IntSell + IntSS linecolor = color.orange plot(NUM, color=linecolor, linewidth=2) alertcondition(NUM > 0.5, title="Buy Signal", message="Buy Alert") alertcondition(NUM < -0.5, title="Sell Signal", message="Sell Alert") alertcondition(NUM == 0.5, title="Buy Setup", message="Buy Setup") alertcondition(NUM == -0.5, title="Sell Setup", message="Sell Setup") //Switch on for strategy moves if(inDateRange and buytrigger) strategy.exit("SHORT", "SHORT_SL", comment="Short_Exit") strategy.entry("LONG", strategy.long, comment="") if(inDateRange and selltrigger) strategy.exit("LONG", "LONG_SL", comment="Long_Exit") strategy.entry("SHORT", strategy.short, comment="") if (not inDateRange) strategy.close_all() // plotshape(SC and not up, color = color.yellow, style = shape.triangleup, location = location.belowbar, size = size.auto, transp = 0, title = "Setup to Buy") // plotshape(TC and up, color = color.green, style = shape.triangleup, location = location.belowbar, size = size.auto, title = "Trigger to Buy") // plotshape(SC and up, color = color.yellow, style = shape.triangledown, location = location.abovebar, size = size.auto, transp = 0, title = "Setup to Sell") // plotshape(TC and not up, color = color.red, style = shape.triangledown, location = location.abovebar, size = size.auto, title = "Trigger to Sell")