
Эта стратегия позволяет выявить настроения участников рынка, сравнивая изменения цен и объемы торгов, и представлять и подавать торговые сигналы в виде MACD.
Эта стратегия используется для выявления рыночных настроений с помощью следующих расчетов:
Изменение цены на каждую K-линию, разделенное на объем сделки. Это прямо показывает, насколько сильна сила купли-продажи.
Применяя индексные скользящие средние для изменения цены и объема сделок в отдельности, затем делите EMA изменения цены на EMA объема сделок. Таким образом, вы можете отфильтровать часть шума и получить более гладкую кривую эмоций на рынке.
На криптовалютной рыночной эмоциональной крипте быстро и медленно рассчитывается EMA, получается кривая, похожая на MACD. В ней MACD-линия показывает направление и интенсивность динамики, сигнальная линия - ее движущееся среднее, а столбиковый график показывает разницу между двумя кривыми, представляя изменение динамики.
Сигнал усиления настроения на рынке с несколькими головами, когда столбчатый график носит 0, сигнал усиления настроения на рынке с пустыми головами, когда он носит 0. Также можно наблюдать отклонение от столбчатого графика.
Эта стратегия имеет следующие преимущества:
По мнению экспертов, это может быть более убедительным, если использовать информацию о количестве сделок, чтобы оценить настроения участников рынка.
Форма MACD интуитивно понятна и проста в использовании.
Параметры регулируются для различных сортов и периодов.
Постная диаграмма может отклоняться и обнаруживать потенциальные переломные моменты.
Код имеет четкую структуру, его легко понять и оптимизировать.
Также существуют риски:
Количество сделок может отражать настроения рынка, но не гарантирует, что торговые сигналы верны.
Неправильная настройка параметров MACD может привести к ошибочному сигналу или созданию ложного сигнала. Необходимо оптимизировать параметры для разновидностей и периодов.
Отступление от сигнала может быть ложным, и не может быть определен обратный тренд, поэтому следует быть осторожным.
Существует риск, что поздний вход будет закрыт. Можно подождать, чтобы отследить потерю, или разумно проверить с тенденциями и соответствующими сортами.
Эта стратегия может быть оптимизирована в следующих аспектах:
testing комбинации параметров для разных сортов и циклов, чтобы найти оптимальные параметры.
Присоединяйтесь к стратегии “стоп-лосс”, чтобы снизить риск потерь.
В сочетании с ценовыми тенденциями соответствующих сортов проверяются торговые сигналы.
Динамическая оптимизация параметров с использованием методов машинного обучения.
Увеличение фильтрационных условий, уменьшение ложных сигналов, таких как крупномасштабные тенденции, волатильность и т.д.
Эта стратегия использует изменение цены в соотношении цены и объема сделок, чтобы оценить настроение рынка и генерировать торговые сигналы в форме 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))