역전 예측 및 오시레이터 컴보 전략

저자:차오장, 날짜: 2023-10-10 10:39:44
태그:

전반적인 설명

이 전략은 더 신뢰할 수 있는 거래 신호를 얻기 위해 역전 및 오시레이터 전략을 결합합니다. 역전 예측 전략과 Chande Forecast Oscillator 전략을 통합하여 두 전략이 동시에 구매 또는 판매 신호를 생성 할 때 거래를 실행합니다.

전략 논리

  1. 역전 예측 전략

    • 오버바운드 및 오버팔드 조건을 식별하기 위해 스토카스틱 오시레이터를 사용

    • 스토카스틱 오시레이터가 과잉 구매 또는 과잉 판매 수준에 도달하는 동안 2 바 이상의 가격 전환을 닫을 때 역방향 거래를 수행하십시오.

  2. 데 예측 오시레이터 전략

    • 가격 예측을 위해 선형 회귀 분석을 사용

    • 오시일레이터는 종료 가격과 예측 가격의 비율 차이를 그래프로 나타냅니다.

    • 실제 가격이 예측 가격과 크게 다르면 거래 신호를 생성합니다

  3. 전략 규칙

    • 동시에 두 전략에서 신호를 계산

    • 두 전략이 구매 또는 판매에 동의할 때만 실제 거래 신호를 생성합니다.

    • 조합은 개별 전략에서 잘못된 신호를 필터링하여 신뢰성을 향상시킵니다.

이점 분석

  1. 여러 전략을 결합하면 더 강력한 시장 평가가 가능합니다.

  2. 단일 지표에서 발생할 수 있는 잘못된 신호를 필터링합니다

  3. 회전 전략은 단기 회전 기회를 포착합니다.

  4. 데 오시일레이터는 장기 트렌드를 정확하게 판단합니다.

  5. 유연한 스토카스틱 오시레이터 매개 변동 시장에 적응할 수 있는 매개 변수

  6. 다양한 거래 전망을 활용하기 위해 분석 기술을 혼합합니다.

위험 분석

  1. 더 신뢰할 수 있지만, 콤보 전략은 신호 주파수를 줄입니다.

  2. 여러 전략 매개 변수들의 복잡한 최적화를 요구합니다.

  3. 시간 회전이 어렵고 손실 위험이 있습니다.

  4. 선형 회귀 예측은 가격 변동이 있을 때 효과적이지 않습니다.

  5. 스토카스틱 오시레이터에서 가격 오차를 관찰하십시오.

  6. 백테스트 데이터가 충분하지 않고 실전 성능이 불확실합니다.

개선 할 기회

  1. K와 D 기간을 줄임으로써 스토카스틱 오시레이터를 최적화합니다.

  2. 최적을 찾기 위해 더 많은 선형 회귀 기간을 테스트

  3. 손실을 제한하기 위해 Stop Loss를 추가합니다.

  4. 스토카스틱 오시레이터가 극에 도달할 때까지 기다리는 논리를 조정하십시오.

  5. 거래 도구의 통계적 특성을 분석

  6. 안정성을 위해 MACD와 같은 더 많은 지표를 포함합니다.

요약

이 전략은 여러 분석 기법을 합성하고 조합을 통해 신호 품질을 향상시켜 단기적 역전과 장기적 트렌드를 모두 포착합니다. 그러나 라이브 성능은 검증되고 그에 따라 매개 변수를 조정해야합니다. 개념적 프레임워크는 더 많은 지표와 전략으로 확장 될 수 있으며 실용적인 거래 지침을 제공합니다. 전반적으로 전략은 의미있는 혁신과 참조를 제공합니다.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 08/08/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
// The Chande Forecast Oscillator developed by Tushar Chande The Forecast 
// Oscillator plots the percentage difference between the closing price and 
// the n-period linear regression forecasted price. The oscillator is above 
// zero when the forecast price is greater than the closing price and less 
// than zero if it is below.
//
// 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

ChandeForecastOscillator(Length, Offset) =>
    pos = 0
    xLG = linreg(close, Length, Offset)
    xCFO = ((close -xLG) * 100) / close
    pos := iff(xCFO > 0, 1,
           iff(xCFO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Chande Forecast Oscillator", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthCFO = input(14, minval=1)
Offset = input(0)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posChandeForecastOscillator = ChandeForecastOscillator(LengthCFO, Offset)
pos = iff(posReversal123 == 1 and posChandeForecastOscillator == 1 , 1,
	   iff(posReversal123 == -1 and posChandeForecastOscillator == -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 )

더 많은