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


Дата создания: 2023-11-13 17:51:20 Последнее изменение: 2023-11-13 17:51:20
Копировать: 0 Количество просмотров: 619
1
Подписаться
1617
Подписчики

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

Обзор

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

Стратегический принцип

Эта стратегия используется для выявления рыночных настроений с помощью следующих расчетов:

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

  2. Применяя индексные скользящие средние для изменения цены и объема сделок в отдельности, затем делите EMA изменения цены на EMA объема сделок. Таким образом, вы можете отфильтровать часть шума и получить более гладкую кривую эмоций на рынке.

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

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

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

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

  1. По мнению экспертов, это может быть более убедительным, если использовать информацию о количестве сделок, чтобы оценить настроения участников рынка.

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

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

  4. Постная диаграмма может отклоняться и обнаруживать потенциальные переломные моменты.

  5. Код имеет четкую структуру, его легко понять и оптимизировать.

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

Также существуют риски:

  1. Количество сделок может отражать настроения рынка, но не гарантирует, что торговые сигналы верны.

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

  3. Отступление от сигнала может быть ложным, и не может быть определен обратный тренд, поэтому следует быть осторожным.

  4. Существует риск, что поздний вход будет закрыт. Можно подождать, чтобы отследить потерю, или разумно проверить с тенденциями и соответствующими сортами.

Направление оптимизации

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

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

  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))