Эта стратегия показывает настроение на рынке, сравнивая изменения цены с объемом, и представляет его в формате MACD для генерации торговых сигналов.
Стратегия в основном использует следующие методы для выявления настроения рынка:
Изменение цены по объему каждого слитка. Это прямо показывает силу покупательных и продающих сил.
Применять экспоненциальные скользящие средние на изменение цены и объем отдельно, а затем делить EMA изменения цены на EMA объема.
Применять быстрые и медленные EMA на
Хистограмма, пересекающая выше 0, сигнализирует о росте бычьих настроений, в то время как пересечение ниже 0 сигнализирует о росте медвежьих настроений.
Стратегия имеет следующие преимущества:
Использует информацию о объеме для оценки настроения рынка, более убедительно.
Форма MACD интуитивна и проста в использовании.
Настраиваемые параметры для различных продуктов и временных рамок.
Может обнаружить расхождения на гистограмме, чтобы найти потенциальные обратные тенденции.
Ясная структура кода, легкая для понимания и оптимизации.
Стратегия также имеет следующие риски:
Объем отражает настроение, но не гарантирует правильных сигналов.
Неправильное установление параметров MACD может привести к пропущенным или ложным сигналам. Параметры необходимо оптимизировать для конкретных продуктов и временных рамок.
Дивергенции могут быть ложными сигналами, не способными подтвердить обратную динамику, поэтому их необходимо тщательно интерпретировать.
Риск позднего входа и быть пойманным в ловушку.
Стратегия может быть оптимизирована в следующих аспектах:
Испытать комбинации параметров на различных продуктах и временных рамках для поиска оптимальных параметров.
Добавить стоп-лосс для снижения риска потерь.
Сочетать с соответствующими тенденциями цен на продукты для подтверждения сигналов.
Используйте машинное обучение для динамической оптимизации параметров.
Добавить фильтры для уменьшения ложных сигналов, например, более высокие тенденции временных рамок, волатильность и т.д.
Стратегия оценивает настроение рынка путем сравнения изменения цен и объема и генерирует сигналы в формате MACD. Рассмотрение объема в дополнение к простой цене может более точно определить силу покупателей и продавцов. Параметры могут быть оптимизированы для разных продуктов и временных рамок, с дальнейшим потенциалом оптимизации. В целом, стратегия имеет новую идею, простую в использовании, эффективно захватывает рыночный импульс и стоит дальнейшего развития.
/*backtest start: 2023-10-13 00:00:00 end: 2023-11-12 00:00:00 period: 1h 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/ // © dannylimardi //@version=4 strategy("Sentiment Oscillator", "Sentiment", overlay=false, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.08) //Inputs msLen = input(49, type=input.integer, title="Market Sentiment Lookback Length") emaLen1 = input(40, type=input.integer, title="Fast EMA Length") emaLen2 = input(204, type=input.integer, title="Slow EMA Length") signalLen = input(20, type=input.integer, title="Signal Length") showMs = input(false, type=input.bool, title="Show Market Sentiment?") showHist = input(true, type=input.bool, title="Show Momentum?") showMacd = input(false, type=input.bool, title="Show MACD Line?") showSignal = input(false, type=input.bool, title="Show Signal Line?") showCpv = input(false, type=input.bool, title="(Show Change/Volume for Each Bar?)") showEma1 = input(false, type=input.bool, title="(Show Fast EMA?)") showEma2 = input(false, type=input.bool, title="(Show Slow EMA?)") //Calculations priceChange = close - close[1] changePerVolume = (priceChange/volume) * 10000000 // (The 1000000 doesn't have any significance, it's just to avoid color-change errors when the values are too emall.) priceChangeEma = ema(priceChange, msLen) volumeEma = ema(volume, msLen) marketSentiment = priceChangeEma/volumeEma * 100000000 msEma1 = ema(marketSentiment, emaLen1) msEma2 = ema(marketSentiment, emaLen2) macd = msEma1-msEma2 signal = ema(macd, signalLen) hist = macd-signal //Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 //Drawings plot(showHist ? hist : na, title="Histogram", style=plot.style_area, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)), transp=0 ) plot(showMacd ? macd : na, title="MACD", color=col_macd, transp=0) plot(showSignal ? signal : na, title="Signal", color=col_signal, transp=0) plot(showCpv ? changePerVolume : na, color=changePerVolume > changePerVolume[1] ? color.teal : color.red) plot(0, color=color.white, transp=80) plot(showEma1 ? msEma1 : na, color=color.aqua) plot(showEma2 ? msEma2 : na, color=color.yellow) plot(showMs ? marketSentiment : na, color=color.lime) //Strategy strategy.entry("Buy", strategy.long, when=crossover(hist, 0)) strategy.close("Buy", when=crossunder(hist, 0))