이중 이동 평균 반전 추세 전략


생성 날짜: 2024-01-08 11:01:11 마지막으로 수정됨: 2024-01-08 11:01:11
복사: 0 클릭수: 659
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 이동 평균 반전 추세 전략

개요

이중 이동 평균 역전 트렌드 전략은 주로 외환 시장에서 중기 거래에 사용되는 전략이다. 이 전략은 두 개의 다른 주기의 이동 평균을 사용하여 거래 신호를 생성한다. 빠른 이동 평균과 느린 이동 평균이 골든 크로스 (Golden Cross) 가 발생했을 때, 하위 상위 검색 역전; 빠른 이동 평균과 느린 이동 평균이 사각지대가 발생했을 때, 다중 상위 검색 역전.

전략 원칙

이 전략은 1시간과 1일 두 시간 주기 이동 평균을 사용한다. 1시간 주기 이동 평균은 가격 변화에 더 민감하여 빠른 이동 평균으로 사용될 수 있다. 1일 주기 이동 평균은 가격 변화에 더 느리게 반응하여 느린 이동 평균으로 사용될 수 있다.

상장 또는 하락의 반전을 추구하는 원칙은 빠른 이동 평균과 느린 이동 평균이 금색 교차 또는 사각지대에 부딪히면 시장이 전환을 일으킬 수 있음을 나타냅니다. 빠른 라인을 통과하거나 느린 라인을 통과하는 것은 반전 신호를 생성하는 시간입니다. 반전 거래 이론에 따르면, 가격은 일반적으로 단독으로 상승하거나 하락하지 않으며, 돌파가 발생하거나 중요한 지원 및 저항 지점이 발생하면 주가 가격이 반전하는 순간이 될 가능성이 높습니다.

이 전략은 또한 거래 시간 및 날짜 필터링 조건을 설정하고, 부적절한 시간에 거래하는 것을 피하기 위해 설정된 날짜의 범위 내에서만 거래됩니다.

우위 분석

이중 이동 평균 역전 전략은 다음과 같은 장점이 있다:

  1. 반전 전략은 수익의 여지가 큰 장점이 있다. 반전 거래는 중요한 지점에서 반전 작업을 함으로써 가격 변동이 큰 상황에서 더 높은 수익을 얻을 수 있다.

  2. 이중 이동 평균 조합을 사용하여 필터링 신호를 사용하여 가짜 신호를 피하십시오. 단일 지표는 가짜 신호를 쉽게 생성 할 수 있으며, 이중 지표 조합은 신호의 신뢰성을 높여서 가짜 신호를 필터링하여 거래 기회를 더 신뢰할 수 있습니다.

  3. 거래 시간 및 날짜 조건을 설정하여 시장의 비활성 기간을 피하고, 교착 상태를 피하십시오. 설정된 거래 시간 및 날짜 범위 내에서만 거래하면 가격의 급격한 변동이있는 기간을 피하고 거래가 방해되지 않습니다.

  4. 반전 전략은 중기 거래에 적합하다. 고주파 거래에 비해 중기 거래 전략은 더 안정적이며 너무 자주 거래되는 것을 피한다.

  5. 최대 인출 통제는 자금 관리에 유리하다. 최대 인출 비율을 설정하면 오버나이트 위험을 잘 제어하고 자금을 크게 잃지 않도록 한다.

위험 분석

이중 이동 평균 역전 전략에는 다음과 같은 위험도 있습니다.

  1. 반전 신호는 실패하여 손실을 초래할 수 있다. 가격 반전 신호는 항상 신뢰할 수 없으며, 가격이 반전하지 않고 계속 움직이면 손실의 위험에 직면하게 된다. 손실을 제어하기 위해 손실을 중지 할 수 있습니다.

  2. 트렌드 이탈은 손실을 가져옵니다. 두 개의 이동 평균이 명백하게 분리되었을 때 역전하면 손실 위험이 발생할 수 있습니다. 이동 평균 간격을 관찰하여 역전 시기를 결정할 수 있습니다.

  3. 거래시간을 적절하게 설정하지 않으면 기회를 놓칠 수 있다. 거래시간을 너무 엄격하게 설정하면 몇 가지 거래 기회를 놓칠 수 있다. 거래시간을 적절하게 확장할 수 있다.

  4. 역전 후 적당히 손실을 막지 못해서 확대된다. 역전 후 가격이 원래의 추세를 계속하면 적당히 손실을 막아야 한다.

최적화 방향

이중 이동 평균 역전 전략은 다음과 같은 측면에서 최적화 될 수 있습니다:

  1. 더 많은 지표의 조합을 테스트하여 더 나은 거래 신호를 찾습니다. MACD, KDJ와 같은 다른 지표가 쌍 이동 평균과 결합하여 신호의 정확성을 향상시킬 수 있습니다.

  2. 이동 평균의 주기 변수를 최적화하여 최적의 변수를 찾는다. 이동 평균의 다양한 길이의 변수를 재검토하여 최적의 주기 수를 결정할 수 있다.

  3. 거래 시간을 늘리거나 줄여서 최적의 거래 시간을 찾습니다. 다른 품종의 특성에 따라 거래 시간 단위의 효과를 테스트합니다.

  4. 트렌드 필터 조건을 추가하여 오차를 방지한다. ADX와 같은 지표를 추가하여 트렌드의 강점을 판단하고, 명백한 트렌드가 없을 때 반전을 피한다.

  5. 신호 검사를 위한 기계 학습 모델을 추가한다. 역전 신호의 신뢰성을 판단하는 모델을 훈련시킬 수 있으며, 낮은 품질의 신호를 필터링한다.

요약하다

이중 이동 평균 역향 전략은 외환 중기 거래에 적합한 전략이다. 그것은 빠른 이동 평균과 느린 이동 평균의 황금 십자가와 사각지대를 사용하여 역향 신호를 발생시키고 시장의 중요한 지점에서 역전 작업을 수행하여 수익을 창출하는 장점이 있다. 동시에 거래 시기와 최대 회수 설정을 사용하여 위험을 제어한다. 이것은 더 안정적인 역향 시스템을 수행하여 높은 수익을 창출하고 위험을 제어 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 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/
// © SoftKill21

//@version=4
strategy("gbpnzd 1h", overlay=true)

src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", type=input.resolution, defval="60")
len = input(28, title="Moving Average Length - LookBack Period")
//periodT3 = input(defval=7, title="Tilson T3 Period", minval=1) 
factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0) 
atype = input(2,minval=1,maxval=8,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3")

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 = 2020, title = "To Year", minval = 1970)

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

res = useCurrentRes ? timeframe.period : resCustom
resCustom2 = input(title="plm", type=input.resolution, defval="D")
res2 = resCustom2
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(src, len, factor) => ema(src, len) * (1 + factor) - ema(ema(src, len), len) * factor 
t3(src, len, factor) => gd(gd(gd(src, len, factor), len, factor), len, factor) 
tilT3 = t3(src, len, factor) 
 

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : atype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

out = avg 

ema20 = security(syminfo.tickerid, res, out)



plot3 = security(syminfo.tickerid, res2, ema20)

plot33 = security(syminfo.tickerid, res, ema20)

plot(plot3,linewidth=2,color=color.red) 
plot(plot33,linewidth=2,color=color.white) 

// longC = crossover(close[2], plot3) and close[1] > close[2] and close > close[1]
// shortc = crossunder(close[2],plot3)  and close[1] < close[2] and close < close[1]

volumeMA=input(24)
ema_1 = ema(volume, volumeMA)

timeinrange(res, sess) => time(res, sess) != 0
//entrytime = timeinrange(timeframe.period, "0900-0915")

myspecifictradingtimes = input('0900-2300', type=input.session, title="My Defined Hours")


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

longC = crossover(plot33,plot3)  and time_cond and entrytime
shortc = crossunder(plot33,plot3) and time_cond and entrytime

// exitlong = crossunder(plot33,plot3)
// exitshort = crossover(plot33,plot3)

distanta=input(1.0025)
exitshort = plot33/plot3 > distanta
exitlong  = plot3/plot33 > distanta

inverse = input(true)
exit = input(false)
if(inverse==false)

    strategy.entry("long",1,when=longC)
    strategy.entry("short",0,when=shortc)
if(inverse)
    strategy.entry("long",1,when=shortc)
    strategy.entry("short",0,when=longC)

if(exit)
    strategy.close("long",when=exitlong)
    strategy.close("short",when=exitshort)

// if(dayofweek==dayofweek.friday)
//     strategy.close_all()

// risk = input(25)
// strategy.risk.max_intraday_loss(risk, strategy.percent_of_equity)