양적 전략에 따른 스토카스틱 및 이동 평균 크로스오버 트렌드

저자:차오장, 날짜: 2024-02-05 15:27:03
태그:

img

전반적인 설명

이 전략은 주로 초고/ 초판 영역에서 스톡 지표의 교차를 입력 신호로 활용하고, EMA 지표로 현재 트렌드 방향을 판단합니다. EMA가 결정한 상승 추세에서만 길게 가고 하락 추세에서 짧게 이동합니다. 이는 전형적인 트렌드 다음 전략입니다.

원칙

이 전략은 세 가지 주요 부분으로 구성됩니다.

  1. EMA가 트렌드 방향을 결정합니다.

    빠른 EMA와 느린 EMA를 사용하면 빠른 EMA가 느린 EMA보다 높을 때 상승 추세로 결정됩니다. 빠른 EMA가 느린 EMA보다 낮을 때 하락 추세로 결정됩니다.

  2. 거래 신호를 생성하는 주식

    주식 지표는 %K 및 %D 라인으로 구성됩니다. 과잉 구매 지역에서 %K가 %D를 넘을 때 구매 신호를 생성합니다. 과잉 판매 지역에서 %K가 %D를 넘을 때 판매 신호를 생성합니다. 이 전략은 과잉 구매 / 과잉 판매 지역에서 발생할 때만 주식 크로스오버 신호를 사용합니다.

  3. 위험 관리 메커니즘

    이 전략은 또한 스톱 로스 레벨과 수익을 취하는 레벨을 설정합니다. 긴 포지션을 보유 할 때 가격이 스톱 로스 레벨을 넘으면 거래에서 벗어날 것입니다. 가격이 스톱 로스 레벨을 넘으면 수익을 위해 포지션을 닫을 것입니다. 짧은 포지션에도 동일한 논리가 적용됩니다.

일반적으로, 이것은 트렌드 방향과 거래 신호를 결정하기 위해 지표의 조합을 사용하는 전형적인 양적 거래 전략이며, 거래 위험을 줄이기 위해 엄격한 위험 관리 규칙으로 보완됩니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. EMA를 사용하여 주요 트렌드와 부수적인 트렌드를 결정하면 옆 시장에 갇히지 않습니다.

  2. 스톡 지표의 강점은 과잉 구매/ 과잉 판매 수준을 정확하게 반영 할 수있는 능력에 있습니다. 이와 크로스오버 신호를 결합하면 과잉 구매/ 과잉 판매 구역 거래가 가능합니다.

  3. 이 전략은 가능한 긴 시나리오와 짧은 시나리오를 명확히 명시하고, 신호를 더 잘 필터링하고 복잡한 시장에서 순식간에 포지션을 개척하는 것을 피합니다.

  4. 엄격한 리스크 관리는 개별 거래의 손실을 통제하고 최대 인출을 제한하며 수익성있는 거래 공간을 유지합니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. EMA와 스톡 같은 지표는 지체성이 있기 때문에 이 전략은 시장의 역전을 적시에 파악하기 어렵다.

  2. 순전히 지표에 의존하면 편견을 쉽게 설정할 수 있고, 따라서 시장에서 실제로 제공하는 거래 기회를 놓칠 수 있습니다.

  3. 리스크 관리 메커니즘 자체는 일찍 스톱 로스를 설정하고 수익을 취함으로써 수익 잠재력을 제한할 수도 있습니다.

  4. 매개 변수 선택에는 위험이 있습니다. 최적의 매개 변수를 찾기 위해 광범위한 백테스팅과 최적화가 필요합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. WMA, Hull MA 등과 같은 트렌드 결정에 대한 다른 유형의 EMA를 시도하고 결과를 비교하십시오.

  2. 다른 지표를 결합하여 거래 신호를 생성합니다. 예를 들어 MACD, KDJ, 다중 지표 시스템을 구축합니다.

  3. 시장의 변동성에 더 잘 적응하기 위해 스톱 로스 설정 및 수익을 최적화하십시오. 더 넓은 스톱 로스를 설정하고 더 긴밀한 수익을 얻을 수 있습니다.

  4. 최적의 조합을 찾기 위해 다른 제품과 시간 프레임에 걸쳐 성능 변이를 테스트합니다.

  5. 머신러닝 모델을 도입하여 트렌드 및 신호 판단을 돕기 위해 전략을 더 지능화하도록 고려하십시오.

결론

결론적으로,이 전략은 일반적으로 사용되는 지표를 결합하여 트렌드 결정, 거래 신호 및 리스크 관리를 고려하여 비교적 성숙한 트렌드 다음 시스템을 형성합니다. 더 많은 최적화와 함께이 전략은 더 나은 라이브 거래 결과를 얻을 수 있다고 믿습니다. 동시에, 우리는 단일 전략의 한계를 인식하고 장기적인 안정적인 이익을 추구하기 위해 시장의 복잡성을 계속 배워야합니다.


/*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)




더 많은