
쌍평평선 역추적 전략은 이동 평균의 교차를 거래 신호로 사용하는 양적 거래 전략이다. 이 전략은 MACD 지표의 빠른 느린 평균 선의 차치값과 그 신호 선, 그리고 거래량의 다공평 비율 판단을 결합하여 거래 신호를 형성하여 시장 역추적 기회를 잡는다.
이 전략은 주로 빠른 선과 느린 선의 관계를 판단하며, 빠른 선에서 느린 선을 통과할 때 멀티 신호를 생성하고, 빠른 선 아래 느린 선을 통과할 때 공백 신호를 생성한다. 또한, MACD 차치의 공백 상태, 차치와 신호 선의 관계, 거래량의 공백 상태 등의 통합 판단 시장의 공백 상태.
구체적으로, 전략은 MACD 차이의 크기와 방향을 판단하고, 차수와 신호선이 교차하는 경우, 차수와 신호선 방향이 일치하거나 반대되는 경우 등을 판단한다. 이러한 상황은 시장의 subidabubb 급격한 하락 반발 특성을 반영한다. 또한, 거래량의 다공적 분산도 보조 판단 지표로 작용한다.
격차와 신호선이 시장의 반전 신호를 보여준다고 판단하고 거래량이 시장의 반전을 확인하는 경우에 거래 전략이 생성된다.
양평선 교차는 whipsaw 문제를 일으킨다.
트랜스포메이션이 완전히 차단되지 않아서
subsection 조정의 깊이와 강도를 판단할 수 없습니다.
규칙 판단 대신 기계 학습 모델을 활용합니다.
손해 방지 기술을 추가합니다.
감정 지표와 뉴스페이지 분석
다른 품종, 시장으로 이식
쌍평선 반전 추적 전략은 평선 지표, MACD 지표, 그리고 거래량 지표를 종합적으로 고려하여 반전 신호를 포착하여 적절한 반전 지점을 선택하여 포지션을 구축합니다. 전략 최적화 공간은 여전히 넓고, 기계 학습 및 풍력 제어 수단으로 전략 안정성과 수익률을 더욱 향상시킬 수 있습니다.
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)
signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.8)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=10)
fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)
buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
//plot(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, title="Total Volume")
intrabarRange = high - low
getLookBackSlope(lookBack) => signal - signal[lookBack]
getBuyerVolBias(lookBack) =>
j = 0
for i = 1 to lookBack
if buyVolume[i] > sellVolume[i]
j += 1
j
getSellerVolBias(lookBack) =>
j = 0
for i = 1 to lookBack
if sellVolume[i] > buyVolume[i]
j += 1
j
getVolBias(lookBack) =>
float b = 0
float s = 0
for i = 1 to lookBack
b += buyVolume[i]
s += sellVolume[i]
b > s
getSignalBuyerBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] > signalBiasValue
j += 1
j
getSignalSellerBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < ( 0 - signalBiasValue )
j += 1
j
getSignalNoBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < signalBiasValue and signal[i] > ( 0 - signalBiasValue )
j += 1
j
getPriceRising(lookBack) =>
j = 0
for i = 1 to lookBack
if close[i] > close[i + 1]
j += 1
j
getPriceFalling(lookBack) =>
j = 0
for i = 1 to lookBack
if close[i] < close[i + 1]
j += 1
j
getRangeNarrowing(lookBack) =>
j = 0
for i = 1 to lookBack
if intrabarRange[i] < intrabarRange[i + 1]
j+= 1
j
getRangeBroadening(lookBack) =>
j = 0
for i = 1 to lookBack
if intrabarRange[i] > intrabarRange[i + 1]
j+= 1
j
bool isNegativeSignalReversal = signalSlope < 0 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0
bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0
bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0
bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )
bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0
bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0 - macdBiasValue )
bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)
bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )
// 7.48 Profit 52.5%
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
strategy.entry("Short1", strategy.short)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)
// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
strategy.entry("Long1", strategy.long)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + 0.75, stop=strategy.position_avg_price - 0.5)