시간 및 공간 최적화된 멀티 타임프레임 MACD 전략

저자:차오장, 날짜: 2024-01-29 10:15:34
태그:

img

전반적인 설명

이 전략은 MACD 지표의 매개 변수를 최적화하고 이동 평균, 가격 액션 및 특정 거래 시간을 결합하여 높은 승률 외환 거래 전략을 달성합니다.

전략 논리

  1. 가격 트렌드를 판단하기 위해 3 K 라인을 사용하십시오. 마지막 3 K 라인의 종료 가격이 시작 가격보다 높으면 상승 추세로 판단됩니다. 마지막 3 K 라인의 종료 가격이 시작 가격보다 낮으면 하락 추세로 판단됩니다.

  2. 빠른 라인, 느린 라인 및 MACD 차이를 계산합니다. 빠른 라인 매개 변수는 12, 느린 라인 매개 변수는 26, 신호 라인 매개 변수는 9입니다.

  3. 거래 시간은 매일 09:00-09:15로 설정됩니다. 이 기간 내에 다음 조건이 충족되면 시장에 입력하십시오.

    • 상승 추세가 MACD 차이의 0 위를 넘을 때 길게 가십시오.
    • 하락 추세가 MACD 차이의 0 이하의 교차와 일치할 때 단축
  4. 이윤은 0.3피프로 설정하고, 스톱 로스는 100피프로 설정됩니다.

  5. 21:00~21:15까지 모든 위치를 닫습니다.

전략 의 장점

  1. 여러 시간 프레임 지표의 조합을 사용하여 트렌드 방향을 포괄적으로 판단하고 의사 결정의 정확성을 향상시킵니다.

  2. 거래 시간을 최적화하여 높은 시장 변동성을 피하고 불필요한 스톱 로스 위험을 줄이십시오.

  3. 이윤을 최대화하고 손실 증폭을 피하기 위해 수익을 취하고 손실을 중지하기 위해 합리적인 비율을 설정하십시오.

  4. 전체적으로 이 전략은 매우 높은 승률을 가지고 있으며 자주 단기 거래에 적합합니다.

전략 의 위험

  1. 거래 시간은 상대적으로 고정되어 있고, 시장에 적시에 들어갈 수 없다면 거래 기회를 놓칠 수 있습니다.

  2. MACD 지표는 오해의 소지가 있습니다. 명확한 상승 추세 또는 하락 추세를 결정할 수 없는 경우 조심스럽게 거래하십시오.

  3. 이윤을 취하고 손해를 멈추는 것은 불합리하게 설정되어 손익 손실 불균형을 초래할 수 있습니다. 매개 변수는 다른 제품에 따라 조정해야합니다.

  4. 전체적인 위험은 작지만 과잉으로 큰 지점이 높은 렛에 의해 여전히 엄청난 손실을 초래할 수 있습니다.

전략 최적화의 방향

  1. 추세를 결정하기 위해 다른 지표와 결합하여 MACD의 잘못된 신호를 피하십시오. 예를 들어 볼링거 밴드, RSI 등을 결합하십시오.

  2. 백테스트 데이터에서 최적의 매개 변수를 계산하여 수익/손실 중단 비율을 최적화합니다.

  3. 전략에 적용되는 거래 품종을 확장하고 다른 제품에 대한 매개 변수 조정 효과를 평가하십시오.

  4. 기계 학습 알고리즘을 도입하여 다양한 시장 조건에 따라 최적의 매개 변수를 역동적으로 선택합니다.

결론

전체적으로 이 전략은 초보 트레이더에게 잘 적합하다. 논리는 명확하고, 최적화 공간은 크며, 위험은 통제 가능하다. 오픈 시간을 사용자 정의하고 합리적인 이익 손실 비율을 설정함으로써 높은 수익을 얻을 수 있다. 더 이상의 최적화를 통해 매개 변수를 동적으로 조정하고 더 복잡한 시장 환경에 적응할 수 있다.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © exlux99

//@version=4
strategy("Very high win rate strategy", overlay=true)


//

fast_length =12
slow_length= 26
src = close
signal_length = 9
sma_source = false
sma_signal = false

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//ma

len=10
srca = input(close, title="Source")
out = hma(srca, len)

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true


timeinrange(res, sess) => time(res, sess) != 0

// = input('0900-0915', type=input.session, title="My Defined Hours")
myspecifictradingtimes = '0900-0915'
exittime = '2100-2115'

optionmacd=true


entrytime = time(timeframe.period, myspecifictradingtimes) != 0
exit = time(timeframe.period, exittime) != 0     

if(time_cond and optionmacd )
    if(close > open and close[1] > open[1] and close[2] > open[2] and entrytime  and crossover(hist,0))
        strategy.entry("long",1)
    if(close< open and close[1] < open[1] and close[2] < open[2] and entrytime and crossunder(hist,0))
        strategy.entry("short",0)      


tp = input(0.0003, title="tp")
//tp = 0.0003
sl = input(1.0 , title="sl")
//sl = 1.0
strategy.exit("closelong", "long" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closelong")
strategy.exit("closeshort", "short" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closeshort")


더 많은