동력 및 이동 평균 조합 장기 전략

저자:차오장, 날짜: 2024-02-29 11:57:18
태그:

img

전반적인 설명

이 전략은 조건이 충족될 때 MACD 모멘텀 지표와 DMI 트렌드 지표를 결합하여 장기화합니다. 출구는 수익을 확보하기 위해 고정된 수익을 취하고 사용자 정의 변동성 트레일링 스톱을 설정합니다.

원칙

이 전략의 항목은 MACD와 DMI 지표에 의존합니다.

  • MACD가 긍정적일 때 (시그널 라인 위의 MACD 라인), 시장의 상승 동력이 강화되는 것을 나타냅니다.
  • DMI에서 DI+가 DI-보다 높으면 시장이 상승 추세를 나타냅니다.

두 조건이 동시에 충족되면, 길게 가세요.

포지션 출구에는 두 가지 기준이 있습니다.

  • 고정 취득 수익: 폐쇄 가격은 수익 취득을 위해 정해진 비율로 상승합니다.
  • 변동성 후속 스톱 손실: ATR 및 최근 최고 가격을 사용하여 동적으로 조정 된 스톱 손실 위치를 계산합니다. 이것은 시장 변동성에 따라 후속 스톱 손실을 할 수 있습니다.

장점

  • MACD와 DMI의 조합은 시장의 트렌드 방향을 보다 안정적으로 결정할 수 있으며 잘못된 거래를 줄일 수 있습니다.
  • 이윤 취득 조건은 고정 취득과 변동성 스톱 손실을 결합하여 유연하게 이윤을 잠금 할 수 있습니다.

위험성

  • MACD와 DMI 모두 잘못된 신호를 생성하여 불필요한 손실로 이어질 수 있습니다.
  • 일정한 수익은 이익을 극대화하는 것을 막을 수 있습니다.
  • 변동성 중지의 후속 속도는 부적절하게 조정되거나 너무 공격적이거나 보수적일 수 있습니다.

최적화 방향

  • 입력 신호를 필터링하는 다른 지표를 추가하는 것을 고려하십시오. 예를 들어 KDJ 지표를 사용하여 과잉 구매 또는 과잉 판매 여부를 결정하십시오.
  • 다른 매개 변수를 테스트하여 더 나은 수익을 취하고 손실을 중지 할 수 있습니다.
  • 이동 평균과 같은 매개 변수는 특정 거래 품종에 따라 조정하여 시스템을 최적화 할 수 있습니다.

요약

이 전략은 시장 추세와 조건을 판단하기 위해 여러 지표를 합성하고 상대적으로 큰 유리한 가능성이있는 상황에서 개입합니다. 이윤 취득 조건은 또한 이익을 잠금하는 유연성을 고려하면서 특정 수익을 보장하기 위해 최적으로 설계되었습니다. 매개 변수 조정 및 추가 위험 관리를 통해이 전략은 안정적인 양적 거래 시스템이 될 수 있습니다.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 2h
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/
//@version=4
strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

// DMI and MACD inputs and calculations

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
[macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9)


Take_profit= ((input (3))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


closeLong = close > longTakeProfit or crossunder(close, vStop)


//Entry 
strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window())


//Exit
strategy.close("long", when = closeLong and window())


더 많은