트레이딩VMA 변수 이동 평균 거래 전략

저자:차오장, 날짜: 2024-02-21 11:47:43
태그:

img

전반적인 설명

트레이딩VMA 전략은 변동 이동 평균 라인을 기반으로 한 양적 거래 전략입니다. 시장 트렌드를 파악하고 그에 따라 거래 신호를 생성하기 위해 변화하는 이동 평균을 사용합니다.

전략 논리

트레이딩VMA 전략의 핵심은 변수 길이 이동 평균 (Variable Moving Average, VMA) 의 계산이다. 이동 평균은 특정 기간 동안의 평균 가격을 계산하는 널리 알려진 기술적 지표이다. 트레이딩VMA 전략에서 사용되는 VMA는 다양한 기간 길이를 가지고 있다.

구체적으로, 전략은 먼저 가격 방향 움직임 지표 (PDM, MDIM), 부드러운 데이터 (PDM, MDMs) 와 같은 일련의 중간 양을 계산합니다. 이러한 데이터는 궁극적으로 지표 강도 (iS) 를 얻기 위해 사용됩니다. 이 지표는 가격 변동의 강도를 반영합니다.

다음으로, TradingVMA 전략은 지표 강도에 따라 이동 평균 기간을 동적으로 조정합니다. 시장 변동성이 증가하면 이동 평균 기간이 짧아지고 반대로됩니다. 이것은 시장 변화에 더 빠르게 대응 할 수 있습니다.

마지막으로, 전략은 현재 가격을 VMA와 비교하여 거래 신호를 생성합니다. 가격이 VMA보다 높을 때 길고 가격이 VMA보다 낮을 때 짧습니다.

이점 분석

트레이딩VMA 전략은 다음과 같은 주요 장점을 가지고 있습니다.

  1. 변수 기간 필터 소음 더 안정적 변수 이동 평균 기간은 소음 필터링 및 더 안정적인 트렌드 신호를 위해 시장 변화에 적응합니다.

  2. 가격 변화에 더 빠른 반응은 반응성을 향상시킵니다 변동 이동 평균은 가격 변화에 신속하게 반응하고 트렌드 반전 지점을 파악 할 수 있습니다.

  3. 거래 빈도를 줄이고 과잉 거래가 적습니다. 고정 기간 지표와 비교하면 TradingVMA는 불필요한 거래를 줄일 수 있습니다.

  4. 사용자 지정 가능한 매개 변수 유연성 - 전략은 사용자가 다른 시장 환경에 맞게 선호도에 따라 매개 변수를 선택할 수 있습니다.

위험 분석

트레이딩VMA 전략은 또한 다음과 같은 주요 위험을 가지고 있습니다.

  1. 급격한 반전이 없는 경우 트렌드가 급격히 반전될 때, 지속적으로 조정되는 이동 평균은 반응에 지연할 수 있습니다.

  2. 뒤떨어진 편향 모든 이동 평균 전략은 긴 또는 짧은 어느 정도 뒤떨어진 편향을 가지고 있습니다.

  3. 잘못된 신호 TradingVMA는 범위에 묶인 옆 시장에서 잘못된 긴 / 짧은 신호를 생성 할 수 있습니다.

  4. 어려운 매개 변수 최적화 최적의 매개 변수 조합을 찾는 것은 어려울 수 있습니다.

이러한 위험은 스톱 손실, 파라미터 조합 조정 등과 같은 방법을 통해 제어 할 수 있습니다.

최적화 방향

트레이딩VMA 전략은 또한 다음과 같은 측면에서 향상될 수 있습니다.

  1. 다른 트렌드와 함께 다른 트렌드 표시기를 사용하면 신호 품질을 향상시킬 수 있습니다.

  2. 매개 변수 최적화 백테스팅과 최적화를 통해 최적의 매개 변수를 발견합니다.

  3. 적응적인 거래 규칙 시장 체제별로 다른 진입 규칙을 사용하며 손실을 멈추십시오.

  4. 체계화 더 쉽게 최적화를 위해 전략을 알고리즘화하고 체계화하십시오.

결론

트레이딩VMA는 적응적인 양적 전략이다. 특히 설계된 VMA 지표를 사용하여 시장 추세를 포착하고 반응하고 소음을 필터하는 가장자리를 가지고 있다. 더 나은 성능을 위해 전략은 여러 가지 방법으로 업그레이드 될 수 있다. 그러나 후진 편향과 같은 일부 내재적인 문제가 지속될 수 있다. 전반적으로, 트레이딩VMA는 유망한 트렌드 추종 전략이다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
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/
// © laptevmaxim92

//@version=4
strategy("Variable Moving Average Strategy", overlay=true)

src=close
l =input(5, title="VMA Length") 
std=input(true, title="Show Trend Direction Colors")

utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2019, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

k = 1.0/l
pdm = 0.0
pdm := max((src - src[1]), 0)
mdm = 0.0
mdm := max((src[1] - src), 0)
pdmS = 0.0
pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm)
mdmS = 0.0
mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm)
s = pdmS + mdmS
pdi = pdmS/s
mdi = mdmS/s
pdiS = 0.0
pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi)
mdiS = 0.0
mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi)
d = abs(pdiS - mdiS)
s1 = pdiS + mdiS
iS = 0.0
iS := ((1 - k)*nz(iS[1]) + k*d/s1)
hhv = highest(iS, l) 
llv = lowest(iS, l) 
d1 = hhv - llv
vI = (iS - llv)/d1
vma = 0.0
vma := (1 - k*vI)*nz(vma[1]) + k*vI*src
vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na 
plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA")

longCondition = vma > vma[1]
if (longCondition)
    strategy.entry("BUY", strategy.long and use_date)

shortCondition = vma < vma[1]
if (shortCondition)
    strategy.entry("SELL", strategy.short and use_date)

if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

더 많은