역전 및 트렌드 추종 전략 을 결합 한 강력 한 시스템

저자:차오장, 날짜: 2023-10-27 16:22:08
태그:

img

전반적인 설명

이중 디프 리버서스 브레이크아웃 시스템은 양적 거래에서 리버서스 및 트렌드를 따르는 전략의 요소를 결합합니다. 이전 폐쇄 가격에 비해 연속적인 다운 데이를 감지하여 구매 신호를 생성하고 가격이 T3 이동 평균 라인을 넘을 때 판매 신호를 생성하여 위험을 관리하면서 수익성있는 거래를 허용합니다.

어떻게 작동 합니까?

이 시스템은 두 가지 구성 요소로 구성됩니다.

  1. 123 역전

지난 N 일 동안의 폐쇄 가격 변화를 관찰합니다. 오늘의 종료가 어제보다 높고 어제가 전날보다 낮으면 2 개의 연속 다운 날을 신호하고 구매 신호를 유발합니다. 또한 STOCH 지표를 사용합니다. 오늘날의 STOCH 빠른 라인이 느린 라인보다 낮을 때 구매 신호의 유효성을 추가로 확인합니다.

  1. T3 이동 평균

T3 라인은 특수한 공식을 사용하여 기하급수적인 이동 평균에 기초하여 계산됩니다. 매개 변수를 조정함으로써 이동 평균의 가격 변화에 대한 감수성을 제어합니다. 가격이 T3 라인을 넘을 때 판매 신호가 생성됩니다.

이 시스템은 위의 두 신호를 결합하여 123 리버설 구매 신호와 T3 판매 신호가 함께 발생했을 때만 실제 거래 신호를 생성합니다.

이점 분석

  • 바닥 어업 역행 거래 및 역동 트렌드 반향에 효과적입니다.
  • 이동 평균은 수익을 확보하고 위험을 관리하는 데 도움이됩니다.
  • 이중 신호 메커니즘은 신호 유효성을 향상시키고 잘못된 신호를 줄입니다.
  • 트렌드를 따르는 전략과 역전 전략의 장점을 결합합니다.
  • 조정 가능한 매개 변수는 다른 시장 조건에 대한 유연성을 제공합니다.

위험 분석

  • 반전 신호는 거짓이 될 수 있으며, 거래 손실로 이어질 수 있습니다.
  • 부적절한 매개 변수 조정으로 인해 과잉 거래가 발생할 수 있으며 비용이 증가합니다.
  • 이동 평균에서 판매 신호는 유리한 트렌드를 조기에 종료 할 수 있습니다.
  • 유동적인 시장에서 스톱 로스 사냥과 같은 위험은 계속됩니다.
  • 매개 변수는 다른 기기에 최적화되어야 합니다.

위험을 해결하기 위해 다음과 같은 조치를 취할 수 있습니다.

  1. 신호 유효성을 향상시키기 위해 반전 매개 변수를 조정
  2. 유지 기간을 연장하기 위해 이동 평균 매개 변수를 조정합니다.
  3. 손실을 제한하기 위해 스톱 로스를 추가합니다.
  4. 각기 다른 도구에 대한 매개 변수를 개별적으로 최적화

더 나은 기회

이 전략은 몇 가지 측면에서 개선될 수 있습니다.

  1. 신호 유효성을 보장하기 위해 필터를 추가

    부피 파업과 같은 추가 지표는 가짜 거래를 피하기 위해 필터로 추가 될 수 있습니다.

  2. 변화하는 시장에 대한 매개 변수 조정

    다양한 매개 변수 조합을 테스트하고 가장 높은 수익을 제공하는 세트를 선택하십시오. 동적 매개 변수 조정도 사용할 수 있습니다.

  3. 적응적 최적화를 위해 기계 학습을 통합

    대규모 역사 데이터 세트를 수집하고, 최적의 입구/출구 지점을 예측하기 위해 ML 모델을 훈련하고, 매개 변수를 동적으로 최적화합니다.

  4. 각기 다른 도구에 대한 매개 변수를 개별적으로 최적화

    악기는 서로 다른 특성을 가지고 있기 때문에 최적의 매개 변수도 다릅니다. 각기 독립적으로 역 테스트 및 조정 매개 변수.

결론

이중 디프 리버서스 브레이크아웃 시스템은 트렌드 추후와 리버서스 트레이딩을 시너지적으로 결합합니다. 디프 후의 최저점에서 구매하고 이동 평균을 사용하여 트렌드로부터 이익을 확보 할 수 있습니다. 리버서스 및 트렌드 신호의 효과적인 조합은 수익을 잠금하면서 리버서스 기회를 활용합니다. 일부 위험에도 불구하고 전략은 매개 변수 최적화, 필터 등을 추가하여 다른 시장 조건에 맞게 개선 할 수 있습니다. 양적 거래에 효과적인 통찰력을 제공하며 추가 강화가 필요합니다.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 16/09/2021
// 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
// This indicator plots the moving average described in the January, 1998 issue
// of S&C, p.57, "Smoothing Techniques for More Accurate Signals", by Tim Tillson.
// This indicator plots T3 moving average presented in Figure 4 in the article.
// T3 indicator is a moving average which is calculated according to formula:
//     T3(n) = GD(GD(GD(n))),
// where GD - generalized DEMA (Double EMA) and calculating according to this:
//     GD(n,v) = EMA(n) * (1+v)-EMA(EMA(n)) * v,
// where "v" is volume factor, which determines how hot the moving average’s response
// to linear trends will be. The author advises to use v=0.7.
// When v = 0, GD = EMA, and when v = 1, GD = DEMA. In between, GD is a less aggressive
// version of DEMA. By using a value for v less than1, trader cure the multiple DEMA
// overshoot problem but at the cost of accepting some additional phase delay.
// In filter theory terminology, T3 is a six-pole nonlinear Kalman filter. Kalman
// filters are ones that use the error — in this case, (time series - EMA(n)) — 
// to correct themselves. In the realm of technical analysis, these are called adaptive
// moving averages; they track the time series more aggres-sively when it is making large
// moves. Tim Tillson is a software project manager at Hewlett-Packard, with degrees in
// mathematics and computer science. He has privately traded options and equities for 15 years.  
//
// 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


T3A(Length, b) =>
    pos = 0.0
    xPrice = close
    xe1 = ema(xPrice, Length)
    xe2 = ema(xe1, Length)
    xe3 = ema(xe2, Length)
    xe4 = ema(xe3, Length)
    xe5 = ema(xe4, Length)
    xe6 = ema(xe5, Length)
    c1 = -b*b*b
    c2 = 3*b*b+3*b*b*b
    c3 = -6*b*b-3*b-3*b*b*b
    c4 = 1+3*b+b*b*b+3*b*b
    nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
    pos:= iff(nT3Average > close, -1,
           iff(nT3Average < close, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & T3 Averages", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- T3 Averages ----")
LengthT3 = input(5, minval=1)
b = input(0.7, minval=0.01,step=0.01) 
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posT3A = T3A(LengthT3, b)
pos = iff(posReversal123 == 1 and posT3A == 1 , 1,
	   iff(posReversal123 == -1 and posT3A == -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 )

더 많은