거래량 표준편차에 기초한 거래 전략

저자:차오장, 날짜: 2023-11-21 11:11:51
태그:

img

전반적인 설명

이 전략은 거래량 이동 평균과 표준편차를 사용하여 거래량 모델을 구축하고, 거래량이 정상일 때 거래 신호를 생성하기 위해 가격 이동 평균으로 트렌드 방향을 결정합니다. 또한 거래량이 비정상일 때 잘못된 신호를 피하기 위해 거래량 상부 및 하부 한도를 설정합니다.

전략 논리

핵심 논리는 거래량 모델을 만들고 가격 추세를 판단하는 것입니다.

  1. 거래량 모델을 구축
    • 기준값으로 volum vavg의 40주기 이동평균을 계산합니다.
    • 일반 변동 범위로 볼륨 vsd의 40주기 표준편차를 계산
    • 마지막 부피 수준으로 5 기간 이동 평균을 계산합니다.
    • 부피의 하부 제한을 vavg - 1 곱하기 vsd로 설정
    • 부피의 상한 제한을 vavg 더하기 2 배 vsd로 설정
  2. 판사 가격 추세
    • 가격 동향의 지표로 마감 가격 mavg의 20 기간 이동 평균을 계산합니다.
  3. 거래 신호를 생성
    • Mvg가 전날보다 높고 Vvgn가 최저 한계보다 높으면,
    • Mvg가 전날보다 낮아지고 VVG가 최저 한계 이상이면,
    • 매브그 트렌드가 역전될 때 포지션을 닫습니다.

이 전략은 거래량 모델과 가격 트렌드를 결합하여 거래량이 비정상적일 때 가격 트렌드를 쫓는 것을 피하기 위해 일부 잘못된 신호를 필터링할 수 있습니다.

이점 분석

  1. 가격 트렌드를 판단하기 위해 볼륨 변화를 결합하면 일부 잘못된 신호를 필터링하고 거래 신호를 더 신뢰할 수 있습니다.
  2. 표준편차를 이용한 거래량 모델을 구축하면 극심한 거래량 영향을 피할 수 있습니다.
  3. 이동 평균의 조정 가능한 매개 변수는 다른 주기에 있는 가격 변화에 적응할 수 있습니다.

위험 분석

  1. 부피와 가격은 단기간에 차이가 있을 수 있어 가격 동향이 사라질 수 있습니다.
  2. 부적절한 볼륨 매개 변수 설정은 모델 장애를 일으킬 수 있습니다.
  3. 전략에서 스톱 로스가 없는 경우 큰 손실을 초래할 수 있습니다.

해결책:

  1. 모델 최적화를 위해 이동 평균 매개 변수를 적절히 조정
  2. 단일 손실을 제어하기 위해 스톱 손실 논리를 추가

최적화 방향

  1. 신호를 더 신뢰할 수 있도록 가격 추세를 판단하는 더 많은 지표를 추가
  2. 데이터에 기반한 양량 및 가격 모델의 매개 변수를 훈련하기 위해 기계 학습 모듈을 증가
  3. 과도한 단일 손실을 방지하기 위해 중지 손실 논리를 추가
  4. 트렌드를 잡을 확률이 높을 수 있도록 엔트리 로직을 최적화합니다.
  5. 자동으로 중지 손실 거리를 조정하기 위해 ATR와 같은 지표를 결합

요약

이 전략의 전반적인 논리는 명확하며, 잘못된 트렌드를 쫓는 것을 피하기 위해 볼륨을 사용하며 입구 신호는 비교적 신뢰할 수 있습니다. 그러나 전략 자체는 확장 할 수있는 넓은 공간으로 간단합니다. 더 많은 지표, 기계 학습, 스톱 로스 및 기타 모듈을 추가함으로써 안정성과 트렌드를 잡을 수있는 능력을 더욱 향상시킬 수 있습니다. 이것은 전형적인 트렌드 쫓기 전략입니다. 최적화 후에 매우 실용적인 수치 전략이 될 수 있습니다.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © dongyun

//@version=4
strategy("交易量底部标准差系统", overlay=true)

options = input(1,'')
length = input(40,'')
nlow = input(5,'')
factor = input(1.0,'')

vavg = 0.0
vavgn = 0.0
vsd = 0.0
lowlimit = 0.0
uplimit = 0.0
mavg = 0.0
aror = 0.0
adjvol = 0.0
savevol = 0.0


//Find average volume, replacing bad values
adjvol := volume

if (volume != 0)
	savevol := volume
else
	savevol := savevol[1]
	adjvol := savevol


// Replace high volume days because they distort standard deviation
if (adjvol > 2 * factor * nz(vsd[1]))
	adjvol := savevol
else
	adjvol := adjvol[1]

vavg := sma(adjvol,length)
vsd := stdev(adjvol,length)
vavgn := sma(adjvol,nlow)

// Extreme volume limits
lowlimit := vavg - factor * vsd
uplimit := vavg + 2 * factor * vsd

// System rules based on moving average trend
mavg := sma(close,length/2)

// Only enter on new trend signals
if (options == 2)
	if (mavg > mavg[1] and mavg[1] <= mavg[2])
		strategy.entry("Long", strategy.long)
	if (mavg<mavg[1] and mavg[1]>=mavg[2])
		strategy.entry("Short", strategy.short)
else
	if (mavg > mavg[1] and vavgn > lowlimit)
		strategy.entry("Long", strategy.long)
	if (mavg < mavg[1] and vavgn > lowlimit)
		strategy.entry("Short", strategy.short)

// Exit on low volume
if (options != 1)
	if (mavg<mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit))
		strategy.close("Long")
	if (mavg>mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit))
		strategy.close("Short")
else
	if (mavg < mavg[1])
		strategy.close("Long")
	if (mavg > mavg[1])
		strategy.close("Short")

더 많은