이중 오스실레이션 추적 역전 거래 전략

저자:차오장, 날짜: 2023-10-11 14:47:25
태그:

전반적인 설명

이것은 더 신뢰할 수 있는 거래 신호를 얻기 위해 스토카스틱 지표 반전 전략과 차킨 변동성 지표를 결합한 이중 오스실레이션 추적 반전 거래 전략입니다. 전략은 트렌드 반전 지점에서 이익을 얻는 것을 목표로 중장기 거래에 적합합니다.

전략 논리

이 전략은 두 부분으로 구성됩니다.

  1. 스토카스틱 지표 반전 전략

이 부분은 스토카스틱 지표의 빠른 라인과 느린 라인을 사용하여 거래 신호를 생성합니다. 닫기 가격이 2 일 연속으로 이전 닫기 가격보다 낮고 빠른 라인이 느린 라인의 위에있을 때 길어집니다. 닫기 가격이 2 일 연속으로 이전 닫기 가격보다 높고 빠른 라인이 느린 라인의 아래에있을 때 짧습니다.

  1. Chaikin 변동성 지표

이 지표는 일정 기간 동안 가장 높은 가격과 가장 낮은 가격 사이의 스프레드의 변화를 계산합니다. 스프레드가 넓어지면 변동성이 증가하고 짧은 포지션을 취할 수 있음을 신호합니다. 스프레드가 좁아지면 변동성이 감소하고 긴 포지션을 취할 수 있음을 신호합니다.

최종 거래 신호는 두 부분의 신호의 조합입니다. 스토카스틱 지표 신호와 변동성 지표 신호가 일치하면 그 신호가 취합니다. 그렇지 않으면 두 신호가 동의하지 않으면 거래가 없습니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 두 가지 다른 유형의 지표를 결합하면 신호 정확도가 향상됩니다.

  2. 이중 확인 메커니즘은 잘못된 신호를 줄이고 위험을 통제합니다.

  3. 주요 거래 방향으로서 역행에 초점을 맞추는 것은 트렌드 전환점에 이익을 얻을 수 있습니다.

  4. 유연한 매개 변수 설정으로 다양한 제품과 시간대에 적응할 수 있습니다.

  5. 지표 매개 변수들을 정밀하게 조정하면 최적화가 가능합니다.

위험 분석

이 전략의 위험은 다음과 같습니다.

  1. 반전 신호는 잘못 판단 될 수 있으며 손실로 이어질 수 있습니다. 매개 변수를 조정하면 잘못된 판단 가능성을 줄일 수 있습니다.

  2. 급격히 상승하는 변동성 중 단축은 손실 위험을 초래합니다.

  3. 이중 지표 조합은 극심한 시장 변동 시 실패할 수 있습니다. 지표가 안정화 될 때까지 거래를 중단하는 것을 고려하십시오.

  4. 두 가지 지표를 모니터링하면 작업량이 증가합니다. 자동 거래는 작업량을 줄일 수 있습니다.

개선 방향

이 전략의 개선 사항은 다음과 같습니다.

  1. 최적의 매개 변수를 찾기 위해 더 많은 매개 변수 조합을 테스트합니다.

  2. 부피 등과 같은 다른 확인 지표를 추가하여 여러 확인을 생성합니다.

  3. 후속 스톱, 구역 스톱 등과 같은 스톱 손실 메커니즘을 추가하여 위험을 제어합니다.

  4. 수익 효율을 높이기 위해 고정 분자, 켈리 등과 같은 돈 관리를 최적화하십시오.

  5. 다른 매개 변수 설정으로 더 많은 제품과 시간 프레임에 적용 가능한 테스트.

결론

이 전략은 거래 신호에 대한 이중 지표를 결합하여 반전을 포착하는 데 중점을두고 있습니다. 높은 신호 정확성과 좋은 위험 통제와 같은 장점이 있으며 개선할 여지가 있습니다. 매개 변수, 스톱 로스, 돈 관리 등에 대한 최적화로 강력한 중장기 반전 거래 전략으로 향상 될 수 있습니다.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/07/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Chaikin's Volatility indicator compares the spread between a security's
// high and low prices. It quantifies volatility as a widening of the range
// between the high and the low price.
// You can use in the xPrice1 and xPrice2 any series: Open, High, Low, Close, HL2,
// HLC3, OHLC4 and ect...
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

ChaikinVolatility(Length, ROCLength, Trigger) =>
    pos = 0
    xPrice1 = high
    xPrice2 = low
    xPrice = xPrice1 - xPrice2
    xROC_EMA = roc(ema(xPrice, Length), ROCLength)
    pos := iff(xROC_EMA < Trigger, 1,
	         iff(xROC_EMA > Trigger, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Chaikin Volatility", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthCV = input(10, minval=1)
ROCLength = input(12, minval=1)
Trigger = input(0, minval=0)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posChaikinVolatility = ChaikinVolatility(LengthCV, ROCLength, Trigger)
pos = iff(posReversal123 == 1 and posChaikinVolatility == 1 , 1,
	   iff(posReversal123 == -1 and posChaikinVolatility == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

더 많은