콤보 트렌드 역전 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-11-28 13:47:05
태그:

img

전반적인 설명

이것은 더 정확한 거래 신호를 생성하기 위해 트렌드 역전 및 이동 평균 크로스오버 전략을 결합하는 콤보 전략입니다.

전략 논리

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

  1. 123 역전 전략: 닫는 가격이 2 일 연속으로 상승하고 9 일 느린 스토카스틱이 50 이하일 때 장거리; 닫는 가격이 2 일 연속으로 떨어지고 9 일 빠른 스토카스틱이 50 이상일 때 단위로 이동합니다.

  2. 빌 윌리엄스 평균 전략: 13, 8 및 5 일 중간 가격 이동 평균을 계산하고 더 빠른 MAs가 느린 MAs를 넘을 때 길게 이동; 더 빠른 MAs가 느린 MAs를 넘을 때 짧게 이동하십시오.

마지막으로, 두 전략이 방향에 동의할 때만 실제 거래 신호가 생성됩니다. 그렇지 않으면 거래가 없습니다.

이점 분석

콤보 전략은 이중 트렌드 검증을 사용하여 잡음을 필터링하여 신호 정확도를 향상시킵니다. 또한 이동 평균은 약간의 잡음을 필터링합니다.

위험 분석

위험은 다음과 같습니다.

  1. 이중 필터는 좋은 거래를 놓칠 수 있습니다.
  2. 잘못된 MA 설정은 트렌드를 잘못 판단할 수 있습니다.
  3. 반전 전략 자체는 손실 위험이 있습니다.

위험은 MA 매개 변수 또는 입출동 논리를 최적화함으로써 줄일 수 있습니다.

최적화 방향

전략은 다음과 같이 최적화 될 수 있습니다.

  1. 최적의 매개 변수를 찾기 위해 다양한 MA 조합을 테스트합니다.
  2. 손해 제한에 스톱 로스를 추가합니다.
  3. 신호 품질을 식별하기 위한 부피 포함
  4. 자동 최적화를 위해 기계 학습을 사용

결론

이 전략은 두 가지 트렌드 필터와 MAs를 결합하여 소음을 효과적으로 필터하고 의사 결정 정확도를 향상시킵니다. 그러나 안정적인 수익성 이전에 논리의 지속적인 최적화가 필요한 위험이 있습니다.


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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/06/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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 calculates 3 Moving Averages for default values of
// 13, 8 and 5 days, with displacement 8, 5 and 3 days: Median Price (High+Low/2).
// The most popular method of interpreting a moving average is to compare 
// the relationship between a moving average of the security's price with 
// the security's price itself (or between several moving averages).
//
// 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

BillWilliamsAverages(LLength, MLength,SLength, LOffset,MOffset, SOffset ) =>
    xLSma = sma(hl2, LLength)[LOffset]
    xMSma = sma(hl2, MLength)[MOffset]
    xSSma = sma(hl2, SLength)[SOffset]
    pos = 0
    pos := iff(close < xSSma and xSSma < xMSma and xMSma < xLSma, -1,
    	   iff(close > xSSma and xSSma > xMSma and xMSma > xLSma, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams Averages. 3Lines", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LLength = input(13, minval=1)
MLength = input(8,minval=1)
SLength = input(5,minval=1)
LOffset = input(8,minval=1)
MOffset = input(5,minval=1)
SOffset = input(3,minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAverages = BillWilliamsAverages(LLength, MLength,SLength, LOffset, MOffset, SOffset)
pos = iff(posReversal123 == 1 and posBillWilliamsAverages == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAverages == -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 ? red: possig == 1 ? green : blue ) 

더 많은