
이 전략은 주로 오버 바이 오버 셀 영역에서 발생하는 스토흐 지표의 교차를 입시 신호로 사용하고, 동시에 EMA 지표와 결합하여 현재 트렌드 방향을 판단하고, EMA가 계속 상승하는 추세에서만 다중 작업을 수행하고, EMA가 계속 하락하는 추세에서 하위 작업을 수행하는 전형적인 트렌드 추적 전략에 속한다.
이 전략은 크게 세 부분으로 구성됩니다.
2개의 다른 변수인 EMA를 사용하여, 빠른 EMA가 느린 EMA 위에 있을 때 상승 추세로 판단하고, 빠른 EMA가 느린 EMA 아래에 있을 때 하락 추세로 판단한다.
스토치 지표는 %K선과 %D선으로 구성되어 있으며, %K선은 초과 구매 영역의 위쪽에서 %D선과 금이 교차하면 구매 신호를 발생시키고, %K선은 초과 판매 영역의 아래쪽에서 %D선과 사망 교차하면 판매 신호를 발생시킨다. 이 전략은 스토치 지표 교차가 초과 구매 이상 판매 영역에서 발생했을 때만 거래 신호를 발산한다.
이 전략은 동시에 중지 손실 및 중지 중지 메커니즘을 설정한다. 다중 포지션을 보유 할 때, 가격이 설정된 중지 손실을 넘어서는 경우 평준 포지션을 중지한다. 가격이 설정된 중지 중지 포지션을 넘어서는 경우 평준 포지션을 중지한다.
전체적으로, 이 전략은 비교적 전형적인 양적 거래 전략에 속하며, 지표의 조합을 사용하여 트렌드 방향과 거래 신호를 판단하고, 엄격한 위험 관리 규칙과 함께 거래 위험을 효과적으로 줄일 수 있다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
EMA의 주요 하위 계층의 추세를 판단하여 불확실한 시장의 흔들림에서 피하십시오.
Stoch 지표의 특징은 현재 과매도 또는 과매도 영역에 있는지 잘 반영할 수 있다는 것입니다. 따라서 교차 신호의 생성과 함께 과매도 또는 과매도 영역 거래가 가능합니다.
이 전략은 오버와 오피스가 발생할 수 있는 환경을 명확히 하고, 신호를 생성할 수 있도록 추가적으로 필터링하여 잘못된 신호의 가능성을 줄이고, 또한 복잡한 시장에서 맹목적으로 포지션을 개설하는 것을 피한다.
엄격한 위험 관리 메커니즘은 단일 거래의 손실을 통제하는 데 도움이되며, 전체적으로 최대 인출을 통제하면서도 수익성있는 거래에 충분한 공간을 남깁니다.
이 전략에는 위험도 있습니다.
EMA, Stoch 등 지표들은 다소 뒤쳐져 있기 때문에 전략이 어렵고 시장이 뒤집어질 기회를 잡기 힘들다.
단순히 지표에 의존하는 것은 시장에 대한 선입견을 형성하기 쉽고, 시장이 실제로 제공하는 거래 기회를 놓치게 됩니다.
위험 관리 장치 자체는 전략적 수익 공간을 제한 할 수 있으며, 큰 추세에서 손실 중단 및 정지 위치를 설정하는 것은 특히 신중해야합니다.
매개 변수 선택에 있어서도 이 전략에는 위험성이 있다. 다양한 매개 변수의 결과에 대한 영향은 많은 피드백과 최적화를 통해 최적의 매개 변수 조합을 얻어야 한다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
트렌드를 판단하고 비교 분석을 하기 위해 EMA의 다른 유형을 시도하십시오.
MACD, KDJ 등과 같은 다른 지표와 결합하여 거래 신호를 생성하여 다중 지표 거래 시스템을 구축하십시오.
시장의 실제 변동 상황에 더 잘 적응하도록 중지 및 중지 설정을 최적화하십시오. 더 느슨한 중지 및 더 엄격한 중지 지점을 설정할 수 있습니다.
다양한 품종과 다양한 주기에서 이 전략의 성능의 차이를 테스트하여 최적의 품종과 주기 조합을 찾습니다.
트렌드 방향과 거래 신호를 판단하는 데 도움이 되는 기계 학습 또는 신경 네트워크 모델을 포함하는 것을 고려하여 전략의 지능화를 실현하십시오.
전체적으로,이 전략은 일반적인 지표를 사용하여 조합하여 비교적 성숙한 트렌드 추적 거래 전략을 구축합니다. 그것은 추세 판단과 특정 거래 신호의 발생을 고려하고 위험 관리 장치를 설정합니다. 계속 최적화하면이 전략이 더 나은 실전 효과를 얻을 수 있다고 믿습니다. 동시에, 우리는 단일 전략의 한계를 인식하고 장기적으로 안정적인 수익을 얻기 위해 시장의 비밀을 계속 배우고 탐구해야합니다.
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC
strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)
// === GENERAL INPUTS ===
SectionInd = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength = input(defval = 55, title = "Fast MA Period", minval = 1)
maSlowLength = input(defval = 89, title = "Slow MA Period", minval = 1)
StochLength = input(defval = 14, title = "Stochastic Length", minval=1)
smoothK = input(defval = 6, title = "%K Smooth", minval=1)
smoothD = input(defval = 3, title = "%D Smooth", minval=1)
overbought = 80
oversold = 20
HighlightOBOS = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend = input(defval = true, title = "Highlight Trend?")
//DATE AND TIME
SectionFrom = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay = input(defval = 01, title = "From day", minval=1)
fromMonth = input(defval = 1, title = "From month", minval=1)
fromYear = input(defval = 2019, title = "From year", minval=2014)
SectionTo = input(defval = true, title = "════════════════ TO ════════════════")
toDay = input(defval = 31, title = "To day", minval=1)
toMonth = input(defval = 12, title = "To month", minval=1)
toYear = input(defval = 2020, title = "To year", minval=2014)
// === STRATEGY RELATED INPUTS ===
SectionStra = input(defval = true ,title = "═════════════ STRATEGY ═════════════")
// Include Shorts or only trade Long Positions?
includeShorts = input(defval = true, title = "Include Short Positions?")
// Risk Management inputs
useTakeProfit = input(defval = true, title = "User Take Profit?")
inpTakeProfit = input(defval = 8, title = "Take Profit (%)", minval = 0)
useStopLoss = input(defval = false, title = "User Stop Loss?")
inpStopLoss = input(defval = 2, title = "Stop Loss (%)", minval = 0)
StopLossPerc = inpStopLoss * 0.01
TakeProfitPerc = inpTakeProfit * 0.01
// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff = maFast - maSlow
// === STOCHASTIC SETUP ===
k = sma(stoch(close, high, low, StochLength), smoothK)
d = sma(k, smoothD)
// Stochastic Long/Short Entry determination
stochLong = crossover(k,d) and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)
// Stochastic Long/Short Exit determination
stochLongEx = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)
// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white, linewidth = 1, style = line, transp = 10)
// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65) //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75) //Highlight the EMA Trend
// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true
// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange //Open Long when Stoch crossing in Oversold area and EMATrend is up
strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
strategy.close(id = "Long")
if stochLongEx and timeInRange //Close Long when Stoch is getting Overbought
strategy.close(id = "Long")
// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts //Open Short when Stoch crossing in Overbought area and EMA Trend is down
strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
strategy.close(id = "Short")
if stochShortEx and timeInRange //Close Short when Stoch is getting Oversold
strategy.close(id = "Short")
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss //Exit when Stop Loss is hit
strategy.exit("Exit Long SL", from_entry = "Long", loss = close * StopLossPerc / syminfo.mintick )
strategy.exit("Exit Short SL", from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )
//Take Profit
if useTakeProfit //Exit when Take Profit Limit is hit
strategy.exit("Exit Long TP", from_entry = "Long", profit = close * TakeProfitPerc / syminfo.mintick)
strategy.exit("Exit Short TP", from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)