다중 기간 이동 평균 채널 추세 추종 전략


생성 날짜: 2024-02-20 13:45:42 마지막으로 수정됨: 2024-02-20 13:45:42
복사: 2 클릭수: 607
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 기간 이동 평균 채널 추세 추종 전략

개요

이 전략은 암호화폐와 주식과 같은 트렌디 시장에 적용되는 스윙 전략으로, 8시간과 같은 더 큰 시간 프레임을 사용한다. 이 전략은 SMA, EMA, VWMA, ALMA, SMMA, LSMA 및 VWMA를 포함한 여러 가지 이동 평균을 사용하며, 두 개의 평균 채널을 형성하기 위해 각각 높은 곳과 낮은 곳에 적용된다.

마감 가격이 고점을 적용한 평균보다 높을 때 더 많이; 마감 가격이 저점을 적용한 평균보다 낮을 때 더 많이 한다.

전략 원칙

이 전략은 SMA, EMA, VWMA, ALMA, SMMA, LSMA, VWMA 등 7가지의 다른 이동 평균 지표를 사용합니다. 이 이동 평균은 각각 K 선의 최고 가격과 최저 가격에 적용되어 두 개의 평균을 생성합니다.

가장 높은 가격에 적용되는 평균은 avg_high로, 가장 낮은 가격에 적용되는 평균은 avg_low로 불린다. 이 두 평균은 하나의 통로를 구성한다.

클로즈가 Avg_high보다 높을 때 더 많이 하고, 클로즈가 Avg_low보다 낮을 때 공백을 한다.

더 많이 할 때, avg_low로 멈추고, 개시 가격으로 멈추고(1+tp_long); 공백할 때, 중지 라인은 avg_high이고, 중지 라인은 개시 가격입니다.(1-tp_short)。

우위 분석

이 전략의 가장 큰 장점은 여러 가지 이동 평균 지표를 활용하여 수익률을 높이는 것입니다. 이동 평균 지표는 다른 주기 및 계산 방식에 따라 가격에 대한 반응 속도가 다르므로 더 신뢰할 수있는 거래 신호를 형성 할 수 있습니다.

또 다른 장점은 통로 방식으로 거래하는 것입니다. 상하 통로는 스윙 전략에 더 적합한 위험을 줄이고 손실 범위를 제한합니다.

위험 분석

이 전략은 크게 두 가지 위험에 직면해 있습니다.

  1. 여러 가지 이동 평균 지표 조합이 사용되며, 파라미터 설정은 더 복잡하며, 최적의 파라미터 조합을 찾기 위해 많은 테스트와 최적화가 필요합니다.

  2. 이 전략은 수평선과 명확한 추세가 없는 시장에서 손실과 여러 번 무효화된 거래 신호를 발생시킬 수 있다.

이러한 위험을 줄이기 위해서는 트렌드가 뚜렷한 거래 품종을 선택해야 하며, 현재 시장 상황에 가장 적합한 파라미터 설정을 찾기 위해 파라미터 조합에 대한 많은 피드백과 최적화가 필요합니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화가 필요합니다.

  1. 더 많은 종류의 이동 평균을 테스트하여 더 나은 조합을 찾으십시오. SMA, EMA, KAMA, TEMA 등을 고려할 수 있습니다.

  2. 이동 평균 길이와 통로 너비에 대한 파라미터를 최적화하여 최적의 파라미터 설정을 찾습니다.

  3. 다양한 스톱 스톱 손실 설정을 테스트하십시오. 트레일링 스톱이나 동적 스톱 손실을 고려할 수 있습니다.

  4. 트렌드를 판단하는 지표와 결합하여 명확한 트렌드가 없는 시장에서 자주 거래하는 것을 피하십시오. 예를 들어 ADX, ATR 등.

  5. 엔트리 및 엑시트 논리를 최적화하고, 추가 필터 조건을 설정하여 무효 거래를 줄여줍니다.

요약하다

이 전략은 여러 가지 이동 평균 지표를 통해 수익을 얻는 확률을 높이고, 상향 채널 방식을 채택하여 위험을 줄입니다. 이것은 스윙 트렌드 추적 전략입니다. 이 전략은 트렌드성이 명백한 거래 품종에 적용되며, 매개 변수를 최적화 한 후 효과가 좋습니다. 그러나 시장이 변할 때 더 큰 손실을 감수하기 쉽기 때문에 위험을 줄이기 위해 추가 최적화가 필요합니다.

전략 소스 코드
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 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/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


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

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))