다이나믹 돈키안 채널과 단순 이동 평균을 결합한 양적 전략

SMA
생성 날짜: 2024-06-17 17:29:48 마지막으로 수정됨: 2024-06-17 17:29:48
복사: 4 클릭수: 372
1
집중하다
1214
수행원

다이나믹 돈키안 채널과 단순 이동 평균을 결합한 양적 전략

개요

이 전략은 돈치안 통로와 간단한 이동 평균의 두 가지 기술 지표를 결합한다. 가격이 돈치안 통로 하향 궤도를 돌파하고 간단한 이동 평균보다 높을 때 더 많은 포지션을 열고, 가격이 돈치안 통로 상향 궤도를 돌파하고 간단한 이동 평균보다 낮을 때 빈 포지션을 열는다. 다중 포지션은 가격이 돈치안 통로 상향 궤도에 닿을 때 평점 포지션, 빈 포지션은 가격이 돈치안 통로 하향 궤도에 닿을 때 평점 포지션이다. 이 전략은 추세가 강한 시장에 적합하다.

전략 원칙

  1. 동천 통로 상하 궤도를 계산한다. 동천 통로 상하 궤도는 지난 n주기의 최고 가격이고, 하하 궤도는 지난 n주기의 최저 가격이다.
  2. 간단한 이동 평균을 계산한다. 간단한 이동 평균은 지난 m주기의 종결 가격의 수학적 평균이다.
  3. 다단 포지션 개설: 가격이 둥장 통로 하차선보다 낮고 종결 가격이 단순 이동 평균보다 높을 때 다단 포지션을 개설한다.
  4. 빈 상점: 가격이 동천 통로 상점보다 높고 종점 가격이 간단한 이동 평균보다 낮을 때 빈 상점.
  5. 다단 평仓: 가격이 唐通道 (동천通道) 에 닿을 때, 평多仓.
  6. 공백상 (空頭平仓): 가격이 동천 통로 (通道) 아래 궤도를 건드렸을 때 공백상 (空頭平仓) 이다.

전략적 이점

  1. 트렌드와 변동의 두 가지 시장 요소를 결합한다. 간단한 이동 평균은 트렌드를 포착하고, 동천 통로는 변동을 포착하여 트렌드 상황에서 회수 기회를 더 잘 잡을 수 있다.
  2. 정지 조건이 명확하여 적시에 수익을 고정하는 데 도움이 됩니다. 다중 헤드 및 공허 헤드 각각 가격이 동치안 통로 상단 및 하단 궤도에 닿을 때 평정되어 트렌드 반전이 일어나기 전에 적시에 수익 포지션을 결제 할 수 있습니다.
  3. 파라미터가 적고, 최적화가 어렵지 않다. 이 전략은 단칭 통로 주기, 편향량, 간단한 이동 평균 주기 등 세 가지의 파라미터가 있어 최적화를 용이하게 한다.

전략적 위험

  1. 자주 거래한다. 이 전략은 마이너스 포지션의 빈도가 높으며, 거래 비용이 높은 시장에서 수익을 끌 수 있다. 포지션 개설 조건을 적당히 완화하거나 시간 프레임을 늘림으로써 거래 횟수를 줄일 수 있다.
  2. 흔들리는 시장은 좋지 않다. 추세가 명확하지 않을 때, 이 전략은 더 많은 손실을 입을 수 있다. 통계적 변동률 지표를 통해 흔들리는 시장을 식별하고, 전략을 일시 중단할 수 있다.
  3. 매개 변수 안정성이 부족하다. 각기 다른 기준과 주기, 최적 매개 변수가 차이가 많을 수 있다. 매개 변수 안정성이 부족하고, 실디 디스크 성능이 재검토에 미치지 못할 수 있다. 매개 변수가 안정하다는 것을 확인하기 위해 충분한 샘플 외 테스트와 감수성 분석이 필요하다.

전략 최적화 방향

  1. 다른 지표와 결합된 선택적인 포지션 개설 조건, 예를 들어 DMI의 ADX가 특정 하락값보다 크기를 요구하면 포지션을 개설할 수 있습니다. 또는 RSI가 초과 판매 영역을 떠날 때만 포지션을 개설하여 포지션 개설 승률을 높일 수 있습니다.
  2. 다이내믹 스톱라인으로 고정된 둥지안 채널 라인 스톱라인 대신 사용하여 수익 추적 기능을 구현한다. 예를 들어, 다중 헤드는 가격이 둥지안 채널에 닿은 후 ATR 스톱라인이나 SAR 스톱라인에서 평지 할 수 있다.
  3. 변동률 수준에 따라 동적으로 둥지안 통로 주기를 조정하고, 높은 변동률 시장 상태에서 둥지안 통로 주기를 단축하고, 낮은 변동률 시장 상태에서 둥지안 통로 주기를 연장한다. 이것은 다른 시장에 적응하는 데 도움이 된다.

요약하다

다이내믹 탕치안 통로와 간단한 이동 평균을 결합하는 전략은 간단하고 사용하기 쉬운 양적 거래 전략 프레임워크입니다. 그것은 트렌드 추적과 변동성 돌파의 두 가지 관점에서 평정 포지션 열 논리를 구축합니다. 강한 추세 품종에 적합합니다. 그러나 이 전략은 자주 변동하는 시장에서 잘 작동하지 않으며, 파라미터는 일반적으로 안정적입니다. 보조 포지션 열 조건, 다이내믹 스톱 및 파라미터 자율 적응 메커니즘을 도입함으로써 이 전략의 적응력과 거침을 높일 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("FBK Donchian Channel Strategy", overlay=true)

// Inputs
donchian_period = input.int(20, title="Donchian Channel Period")
donchian_offset = input.int(1, title="Donchian Channel Offset")
sma_period = input.int(200, title="SMA Period")
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")
trade_type = input.string("Both", title="Trade Type", options=["Buy Only", "Sell Only", "Both"])

// Calculate indicators
donchian_upper = ta.highest(high, donchian_period)[donchian_offset]
donchian_lower = ta.lowest(low, donchian_period)[donchian_offset]
sma = ta.sma(close, sma_period)

// Plot indicators
plot(donchian_upper, color=color.red, title="Donchian Upper")
plot(donchian_lower, color=color.green, title="Donchian Lower")
plot(sma, color=color.blue, title="SMA")

// Helper function to check if within testing period
is_in_testing_period() => true

// Entry conditions
long_condition = low <= donchian_lower and close > sma
short_condition = high >= donchian_upper and close < sma

// Exit conditions
exit_long_condition = high >= donchian_upper
exit_short_condition = low <= donchian_lower

// Open long position
if (is_in_testing_period() and (trade_type == "Buy Only" or trade_type == "Both") and long_condition)
    strategy.entry("Long", strategy.long)

// Close long position
if (is_in_testing_period() and exit_long_condition)
    strategy.close("Long")

// Open short position
if (is_in_testing_period() and (trade_type == "Sell Only" or trade_type == "Both") and short_condition)
    strategy.entry("Short", strategy.short)

// Close short position
if (is_in_testing_period() and exit_short_condition)
    strategy.close("Short")

// Close all positions at the end of the testing period
if not is_in_testing_period()
    strategy.close_all()