월별 역전 DCA 전략

저자:차오장, 날짜: 2023-10-08 16:12:29
태그:

전반적인 설명

이 전략의 목적은 자산의 단기 하락 추세의 반전 지점을 파악하고 그 지점에서 일정한 금액을 투자하는 것입니다. 이것은 상승 추세가 시작 된 후 상대적으로 낮은 가격으로 고정 달러 비용 평균 (DCA) 을 허용합니다.

원칙

이 전략은 월간 시간 프레임에서 작동합니다. 매월 240 개의 1 시간 바가 있습니다. 트렌드 반전 시기를 결정하는 데 사용됩니다.

구체적으로, 전략은 빠른 EMA와 느린 EMA (EMA_CD) 사이의 차이와 EMA_CD의 신호선을 계산합니다. 빠른 라인이 신호선을 넘을 때 단기 하락 추세의 끝을 결정하고 구매 신호를 유발합니다.

구매 신호 이후, 전략은 한 달이 끝날 때 모든 포지션을 닫습니다. 다음 달에는 고정된 주기적인 구매 및 보유로 프로세스가 반복됩니다.

이것은 우리가 단기적인 하락의 끝에서 바닥을 잡을 수 있고, 고정된 간격에서 달러 가격 평균을 잡을 수 있습니다.

장점

이 전략의 가장 큰 장점은 범위를 제한하는 시장을 필터링하고 트렌드 반전 지점에서만 구매할 수 있다는 것입니다. 따라서 달러 비용은 비교적 더 나은 가격으로 평균됩니다.

또한, EMA를 사용하여 반전 지점을 결정하는 것은 촛불 반전을 보는 것보다 더 안정적이고 정확 할 수 있습니다. EMA는 입시 시점에 영향을 미치는 단기 시장 소음을 부드럽게 할 수 있습니다.

마지막으로, 월별 스톱 손실은 매월 투자에 대한 성과를 차단하여 한 달에 최대 손실을 제한합니다.

위험성

이 전략의 가장 큰 위험은 구매 후 가격이 계속 하락하여 월 말 스톱 손실로 이어지는 것입니다. 이것은 일반적으로 잘못된 반전 식별으로 인해 발생합니다.

우리는 EMA의 매개 변수를 최적화하여 식별을 개선하거나 RSI와 같은 다른 지표를 결합하여 반전 신호를 확인할 수 있습니다.

또 다른 위험은 스톱 로스 수준이다. 너무 긴 스톱 로스는 단기 변동에 의해 쉽게 멈출 수 있다. 너무 넓은 스톱 로스는 손실을 제한하는 데 실패한다. 최적의 매개 변수는 다른 스톱 로스 레벨을 테스트함으로써 찾아야 한다.

더 나은 기회

이 전략은 다음 영역에서 개선될 수 있습니다.

  1. EMA 기간을 최적화하여 역전을 식별하는 최적의 매개 변수 조합을 찾습니다.

  2. 반전 신호를 확인하기 위해 RSI와 같은 다른 필터를 추가합니다.

  3. 다른 스톱 로스 레벨을 테스트해서 을 당하지 않고 손실 예방을 극대화하는 최적의 지점을 찾으세요.

  4. 가격에 따라 동적으로 스톱 레벨을 조정하기 위해 스톱 손실 위에 트레일링 스톱을 추가하는 것을 고려하십시오.

  5. 매일 또는 매주 같은 다른 시간 프레임을 테스트하여 이 전략에 가장 잘 작동하는 것을 확인합니다.

결론

이 전략의 전반적인 아이디어는 간단하고 명확하다. 단기 트렌드 역전과 월간 역전 지점에서의 달러 비용 평균을 식별하기 위해 EMA를 사용한다. 이는 불안한 시장을 효과적으로 필터링하고 상대적으로 낮은 가격에 투자할 수 있다. 최적화 공간은 대부분 매개 변수 조정과 스톱 로스 기술에 있다. 전반적으로 이것은 추가 테스트와 향상 가치가 있는 고정 자산 할당에 대한 우수한 전략 개념이다.


/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
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/
// © BHD_Trade_Bot

// @version=5
// strategy(
//  shorttitle            = 'DCA After Downtrend',
//  title                 = 'DCA After Downtrend (by BHD_Trade_Bot)',
//  overlay               = true,
//  calc_on_every_tick    = true,
//  calc_on_order_fills   = true,
//  use_bar_magnifier     = true,
//  pyramiding            = 100,
//  initial_capital       = 0,
//  default_qty_type      = strategy.cash,
//  default_qty_value     = 1000,
//  commission_type       = strategy.commission.percent,
//  commission_value      = 0.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2017)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time   = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time     = timestamp(end_year, end_month, end_day, 23, 59)

window() => true



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 8 hours per day => 240 hours per month
entry_condition1 = nPastCandles > entryNumber * 240

// End of downtrend
entry_condition2 = ta.crossover(emacd, emacd_signal)

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS and window()
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast

if CLOSE_CONDITIONS
    strategy.close_all()


    
// Draw
plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=entry_condition1 ? color.green : color.red, linewidth=3)


더 많은