동력 시장 감정 지표 전략

저자:차오장, 날짜: 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))

더 많은