Стратегия сжатия импульса

Автор:Чао Чжан, Дата: 2023-11-14 14:04:24
Тэги:

img

Обзор

Основная идея этой стратегии состоит в том, чтобы объединить индикатор импульса Lazy Bear и индикатор MFI Crypto Face, чтобы идти в длинный путь, когда тенденция растет, и идти в короткий путь, когда тенденция падает, реализуя количественную торговую стратегию, которая следует за рыночными тенденциями.

Логика стратегии

  1. Используйте индикатор импульса Lazy Bear BlueWave, который вычисляет линейную регрессию ценового закрытия по сравнению с 20-дневным самым высоким, самым низким и близким средним для определения направления тренда.

  2. Используйте улучшенный индикатор МФИ от Crypto Face, который рассчитывает сумму изменения цен и объема за последние 58 дней для определения денежного потока.

  3. Когда BlueWave превышает 0 и MFI больше 0, генерируется сигнал покупки для открытия длинной позиции; когда BlueWave превышает 0 и MFI меньше 0, генерируется сигнал продажи для открытия короткой позиции.

  4. Установите условия стоп-лосса и прибыли, чтобы следовать рыночной тенденции к прибыли, контролируя риски.

Преимущества

  1. Объединение двух индикаторов позволяет более точно определить направление рыночной тенденции.

  2. Плавная кривая BlueWave избегает предвзятости от отклонений, что делает суждение о тренде более надежным.

  3. МФИ могут определять денежный поток, избегая потерь от ложных вырывов.

  4. Стратегия имеет несколько параметров и легко внедряется и работает.

  5. Гибкие параметры стоп-лосса и прибыли помогают контролировать торговые риски.

  6. Торговые сессии могут быть настроены таким образом, чтобы избежать аномальной волатильности в определенное время на рынке.

Риски

  1. Продолжающаяся тенденция к снижению может привести к последовательным коротким позициям и потерям.

  2. Ложные сигналы могут привести к тому, что вы попадете в ловушку после входа на позиции.

  3. Сверхразмерные стоп-лосс могут усиливать убытки.

  4. Высокая волатильность может часто достигать точек остановки.

  5. Неправильная оптимизация параметров может привести к плохой эффективности стратегии.

  6. Слишком частые торговые сигналы могут увеличить затраты на транзакции и скольжение.

Улучшение

  1. Оптимизировать параметры BlueWave и MFI для более стабильных и надежных сигналов.

  2. Включать индикаторы тенденции, чтобы избежать длительных коротких потерь.

  3. Динамически корректируйте коэффициенты стоп-лосс/стоп-прибыль, чтобы снизить вероятность попадания в ловушку.

  4. Улучшить условия входа, чтобы уменьшить ложные сигналы.

  5. Подумайте о размерах позиций, чтобы избежать погони за ралли и сбросов.

  6. Сочетать с моделями машинного обучения для более точных пунктов входа и выхода.

Заключение

Эта стратегия сочетает в себе индикаторы BlueWave и MFI для определения направления тренда, длинного на восходящие тенденции и короткого на нисходящие тенденции, эффективно следуя рыночным тенденциям для получения прибыли. Однако существуют риски в настройках параметров, стоп-лосс / принимайте прибыль, устойчивые нисходящие тенденции и т. Д., Требующие дальнейшей оптимизации на настройке параметров, механизмы стоп-лосса, условия фильтра и т. Д. Для улучшения эффективности и надежности стратегии. В целом стратегия интуитивна и хорошо работает для долгосрочного следования тренду, но могут возникнуть потери, когда вы попали в ловушку на рыночных диапазонах.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021
strategy(title="Crypto Squeeze Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))


//// Indicator Inputs
// Lazy Bear's Momentum Indicator
BlueWave = linreg(close - avg(avg(highest(high, 20), lowest(low, 20)), sma(close, 20)), 20, 0)

// Replicated version of Crypto Face's MFI Indicator
mfiUpper = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 58)
mfiLower = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 58)
_mfiRsi(mfiUpper, mfiLower) =>
    if mfiLower == 0
        100
    if mfiUpper == 0
        0
	100.0 - (100.0 / (1.0 + mfiUpper / mfiLower))

mf = _mfiRsi(mfiUpper, mfiLower)
mfi = (mf - 50) * 3


//// Strategy
// Creating Long and Short Strategy
buy_signal = crossover(BlueWave, 0) and mfi > 0 
sell_signal = crossunder(BlueWave, 0) and mfi < 0 

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")

// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")


Больше