Стратегия индикатора рыночного настроения

Автор:Чао Чжан, Дата: 2023-11-13 17:51:20
Тэги:

img

Обзор

Эта стратегия показывает настроение на рынке, сравнивая изменения цены с объемом, и представляет его в формате MACD для генерации торговых сигналов.

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

Стратегия в основном использует следующие методы для выявления настроения рынка:

  1. Изменение цены по объему каждого слитка. Это прямо показывает силу покупательных и продающих сил.

  2. Применять экспоненциальные скользящие средние на изменение цены и объем отдельно, а затем делить EMA изменения цены на EMA объема.

  3. Применять быстрые и медленные EMA на сентимент рынка для получения линий, похожих на MACD. Линия MACD показывает направление и силу импульса, линия сигнала - его скользящая средняя, а гистограмма показывает их разницу, представляющую изменение импульса.

Хистограмма, пересекающая выше 0, сигнализирует о росте бычьих настроений, в то время как пересечение ниже 0 сигнализирует о росте медвежьих настроений.

Анализ преимуществ

Стратегия имеет следующие преимущества:

  1. Использует информацию о объеме для оценки настроения рынка, более убедительно.

  2. Форма MACD интуитивна и проста в использовании.

  3. Настраиваемые параметры для различных продуктов и временных рамок.

  4. Может обнаружить расхождения на гистограмме, чтобы найти потенциальные обратные тенденции.

  5. Ясная структура кода, легкая для понимания и оптимизации.

Анализ рисков

Стратегия также имеет следующие риски:

  1. Объем отражает настроение, но не гарантирует правильных сигналов.

  2. Неправильное установление параметров MACD может привести к пропущенным или ложным сигналам. Параметры необходимо оптимизировать для конкретных продуктов и временных рамок.

  3. Дивергенции могут быть ложными сигналами, не способными подтвердить обратную динамику, поэтому их необходимо тщательно интерпретировать.

  4. Риск позднего входа и быть пойманным в ловушку.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Испытать комбинации параметров на различных продуктах и временных рамках для поиска оптимальных параметров.

  2. Добавить стоп-лосс для снижения риска потерь.

  3. Сочетать с соответствующими тенденциями цен на продукты для подтверждения сигналов.

  4. Используйте машинное обучение для динамической оптимизации параметров.

  5. Добавить фильтры для уменьшения ложных сигналов, например, более высокие тенденции временных рамок, волатильность и т.д.

Заключение

Стратегия оценивает настроение рынка путем сравнения изменения цен и объема и генерирует сигналы в формате 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))

Больше