
이 전략은 K 라인 종결 가격의 공백을 EMA 필터와 비교하는 K 라인 종결 가격의 공백을 기반으로 한 양적 거래 전략이다. 이 전략은 K 라인 종결 가격의 최근 일정 기간 동안 구성된 다중 K 라인 및 공백 K 라인의 수를 통계하여 EMA 필터와 결합하여 거래 시간대에 해당하는 경우 더 많은 공백 신호를 판단한다.
이 전략의 핵심 논리는 통계적으로 최근 룩백 사이클에서 상향상승한 K선수 upCloseCount와 하향상승한 K선수 downCloseCount을 나타내고, 상향상승한 K선수가 많으면 다단시장으로 판단하고, 하향상승한 K선수가 많으면 공백시장으로 판단한다. 또한, EMA 지표와 결합하여 가격 트렌드를 판단하고 필터로써, 가격이 EMA보다 높을 때만 더 많은 것을 고려하고, 가격이 EMA보다 낮을 때만 공백을 고려한다. 또한, 전략은 거래 시간 1session과 2session을 설정하고, 이 두 시간 동안만 거래한다.
이 논리는 다음과 같습니다.
다중자 신호 발동 조건: inSession는 true (거래 시간 내에) 그리고 upCloseCount > downCloseCount (상승한 종결 K선 수가 많음) 그리고 close > ema (종결 가격이 EMA보다 높음) 그리고 currentSignal은 “long”이 아닌 (현재 포지션이 없다)
공수 신호 트리거 조건: inSession가 true이고 downCloseCount > upCloseCount ((상하의 클로즈카운트 K선 수가 많음) 그리고 close < ema ((클로즈카운트 가격이 EMA보다 낮음) 그리고 currentSignal가 “short”이 아닌 ((현재 포지션이 없다))
대책:
이 전략은 일정한 역사 주기 동안 K 라인 종식 가격으로 구성된 다목 및 공수 K 라인 수를 통계적으로, EMA 지표의 필터 효과와 결합하여, 설정된 특정 거래 시간대에 트렌드 신호를 식별한다. 특정 트렌드 추적 효과가 있다. 그러나 또한 특정 잘못된 거래 위험이 있으며, 매개 변수 최적화, 상쇄 전략, 필터 신호 등의 방법으로 개선해야 하며, 재측정에서 효과를 검증한다.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true)
// User input to define the lookback period, EMA period, and session strings for time frames
int lookback = input(20, title="Lookback Period")
int emaPeriod = input(50, title="EMA Period")
string session1 = input("0900-1200", title="Time Frame 1 Session")
string session2 = input("1300-1600", title="Time Frame 2 Session")
// Calculate the EMA
float ema = ta.ema(close, emaPeriod)
// State variable to track the current signal
var string currentSignal = na
// Counting up-close and down-close candles within the lookback period
int upCloseCount = 0
int downCloseCount = 0
if barstate.isnew
upCloseCount := 0
downCloseCount := 0
for i = 0 to lookback - 1
if close[i] > close[i + 1]
upCloseCount += 1
else if close[i] < close[i + 1]
downCloseCount += 1
// Define the long (buy) and short (sell) conditions with EMA filter and session time frame
bool inSession = time(timeframe.period, session1) or time(timeframe.period, session2)
bool longCondition = inSession and upCloseCount > downCloseCount and close > ema and currentSignal != "long"
bool shortCondition = inSession and downCloseCount > upCloseCount and close < ema and currentSignal != "short"
// Enter or exit the market based on conditions
if longCondition
currentSignal := "long"
strategy.entry("Buy", strategy.long)
if shortCondition
currentSignal := "short"
strategy.entry("Sell", strategy.short)
// Exit logic for long and short positions
if currentSignal == "long" and strategy.position_size <= 0
strategy.close("Sell")
if currentSignal == "short" and strategy.position_size >= 0
strategy.close("Buy")
plot(ema, color=color.blue, title="EMA")