
이 전략은 가격의 변화와 거래량을 비교하여 시장 참가자의 감정을 밝히고 MACD의 형태로 표시하고 거래 신호를 발산합니다.
이 전략은 주로 다음과 같은 몇 가지 계산을 통해 시장의 정서를 밝힌다.
K선마다의 가격 변화를 거래량으로 나누면 구매와 매매의 강도를 알 수 있다.
가격변동과 거래량에 각각 지수를 평평한 이동 평균을 적용하고, 가격변동의 EMA를 거래량의 EMA로 나눈다. 이렇게 하면 일부 잡음을 필터링하여 비교적 평평한 ?? 시장 감정 곡선을 얻을 수 있다.
시장 감정 에 EMA를 계산하여 MACD와 유사한 곡선을 얻는다. MACD선은 운동량 방향과 강도를 나타내고, 신호선은 이동 평균이며, 기둥 모양의 도표는 두 곡선의 차수를 나타내고, 운동량 변화를 나타낸다.
기둥 모양의 도표 위에 0을 착용하면 다목 시장 정서가 강화되는 신호, 아래 0을 착용하면 빈 머리 시장 정서가 강화되는 신호이다. 또한 기둥 모양의 도표의 이탈 현상을 관찰 할 수 있다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
거래량 정보를 사용하여 시장 참여자의 감정을 판단하는 것이 더 설득력이 있습니다.
MACD 형식은 직관적이고 사용하기 쉽습니다.
매개 변수는 조정할 수 있으며, 다른 품종과 주기에도 적용된다.
기둥 모양의 도표의 이탈을 감지하여 잠재적인 트렌드 전환점을 발견할 수 있습니다.
코드 구조는 명확하고 이해하기 쉽고 최적화됩니다.
이 전략에는 다음과 같은 위험도 있습니다.
거래량은 시장의 정서를 반영하지만 거래 신호의 정확성을 보장하지 않습니다. 가격 움직임과 함께 판단해야합니다.
MACD 매개 변수를 잘못 설정하면 잘못된 신호가 발생하거나 가짜 신호가 발생할 수 있다. 종류와 주기에 맞는 매개 변수를 최적화해야 한다.
트렌드 전환을 확인할 수 없는 잘못된 신호일 수 있으므로 주의해야 합니다.
늦은 진입에 걸리는 위험이 있다. 타당하게 추적 상쇄를 기다려야 한다. 또는 트렌드와 관련 품종과 합리적 검증을 해야 한다.
이 정책은 다음과 같은 측면에서 최적화될 수 있습니다.
testing 다양한 품종과 주기에서 최적의 변수를 찾아내는
손실을 줄이기 위해 Stop Loss Strategies에 가입하십시오.
관련 품종 가격 추세와 결합하여 거래 신호를 확인한다.
기계학습을 이용한 동적으로 최적화하는 매개변수.
필터링 조건을 추가하여 잘못된 신호를 줄여줍니다. 예를 들어, 대차 트렌드, 변동률 등이 있습니다.
이 전략은 가격 변화와 거래량 비율을 활용하여 시장 정서를 판단하여 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))