역전 및 선형 회귀 차단 컴보 전략

저자:차오장날짜: 2023-09-26 15:56:48
태그:

전반적인 설명

이 전략은 123 역전 전략과 선형 회귀 교류 전략을 결합하여 다중 요인 구동 콤보 거래 전략을 구현합니다. 123 역전 전략은 지난 두 거래 날 사이의 가격 관계를 판단하고 역전 신호를 결정하기 위해 스톡 지표를 결합합니다. 선형 회귀 교류 전략은 가격과 트렌드 라인 사이의 관계를 판단하고 거래 신호를 생성하기 위해 선형 회귀 분석을 사용합니다. 두 전략은 서로를 검증하고 잘못된 신호를 효과적으로 필터링 할 수 있습니다.

전략 원칙

123 역전 전략

이 전략은 다음과 같은 원칙에 기초합니다.

  1. 마지막 두 거래일 사이의 폐쇄 가격 관계가 오늘의 종료 가격이 어제보다 높고 스톡 빠른 라인이 느린 라인보다 낮다면 상승 반전 신호가 있다고 간주됩니다.

  2. 마지막 두 거래일 사이의 폐쇄 가격 관계가 오늘의 종료 가격이 어제보다 낮고 스톡 빠른 라인이 느린 라인보다 높다면 하향 반전 신호가 있다고 간주됩니다.

판결규칙은 다음과 같습니다.

  • 만약 오늘의 종료 가격 > 어제의 종료 가격과 스톡 패스트 라인 < 스톡 슬로우 라인 및 스톡 패스트 라인 > 설정 매개 변수, 구매 신호를 생성

  • 만약 오늘의 종료 가격 < 어제 종료 가격과 스톡 빠른 라인 > 스톡 느린 라인 및 스톡 빠른 라인 < 설정 매개 변수, 판매 신호를 생성

전략은 STOCH 지표 매개 변수를 설정해야 합니다. 그 중: STOCH 계산을 위한 K 라인 사이클 길거리, 평형 사이클 KS STOCH 빠른 라인을 위한 평형 사이클 DSTOCH 느린 라인을 위한 평형 사이클 DLength, STOCH 빠른 라인 판단의 임계 수준.

선형 회귀 차단 전략

전략은 선형 회귀 분석을 기반으로 가격과 선형 회귀 추세 선 사이의 관계를 판단합니다. 판단 규칙은 다음과 같습니다.

  • 닫기 가격이 선형 회귀 교차점보다 크면 구매 신호가 생성됩니다.

  • 닫기 가격이 선형 회귀 교차점보다 작으면 판매 신호가 생성됩니다.

전략은 선형 회귀 주기 LengthLRI와 선형 회귀 입력 데이터 소스 xSeria를 설정해야 합니다.

콤보 전략

콤보 전략은 123 역전 전략과 선형 회귀 가로막기 전략에서 동시에 구매/판매 신호를 생성하여 실제 거래 주문을 생성하여 잘못된 신호를 효과적으로 필터링하고 거래 성과를 향상시킵니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 다중 요인 원동력으로 잘못된 신호를 효과적으로 필터링하고 신호 품질을 향상시킵니다.

두 가지 다른 유형의 전략의 조합은 실제로 주문을 하기 위해 두 전략의 신호를 필요로 한다. 이 다중 요인 검증 메커니즘은 전략에서 가끔 잘못된 신호를 필터링하여 불필요한 거래를 줄이고 신호 품질을 효과적으로 향상시킬 수 있다.

  1. 가격과 트렌드 관계의 실시간 모니터링은 함정에 빠지는 것을 피합니다.

선형 회귀 교차는 가격과 트렌드 라인 사이의 관계를 실시간으로 반영 할 수 있습니다. 가격이 트렌드에서 크게 벗어나면 위치 방향을 조정하도록 전략에 즉시 요청합니다. 이는 적시에 손실을 멈추고 역사적 트렌드에 갇히지 않도록합니다.

  1. 트렌드 및 역전 모두에 대한 거래 기회를 고려하십시오.

선형 회귀 전략은 트렌드 구매 및 판매 지점을 식별하는 데 더 좋습니다. 123 역전 전략은 역전 지점을 식별하는 데 중점을 둡니다. 두 전략은 트렌드 거래와 역전 거래의 장점을 결합 할 수 있습니다.

  1. 전략의 사용자 정의 가능한 매개 변수 최적화

두 전략 모두 특정 매개 변수를 제공하여 다양한 품종과 다른 추세에 최적화하여 결합 전략의 효과를 최적화 할 수 있습니다.

위험 분석

이 전략은 또한 다음과 같은 위험을 가지고 있습니다.

  1. 다중 요인 운전자는 어떤 기회를 놓칠 수 있습니다.

두 전략의 거래 신호를 충족시킬 필요성은 단일 전략에만 의존하면 수익성이있을 수있는 몇 가지 기회를 놓칠 것입니다. 한 전략이 약화되면 전체 거래 성과를 끌어내릴 것입니다.

  1. 선형 회귀는 지연이 있습니다.

선형 회귀는 계산을 위해 일부 역사적 데이터를 필요로하며 갑작스러운 이벤트에 실시간으로 반응할 수 없으며 약간의 지연이 발생합니다. 큰 가격 격차가있는 경우 선형 회귀 트렌드 라인이 조정하는 데 시간이 걸릴 수 있으며 이 기간 동안 잘못된 신호를 생성 할 수 있습니다.

  1. 합리적인 매개 변수 최적화가 필요합니다.

두 전략 모두 적절한 매개 변수 선택이 필요합니다. 일부 품종에 대해 독립적으로 조정해야 할 수도 있습니다. 잘못된 매개 변수 선택은 전략의 효과를 크게 감소시킬 것입니다.

위험은 다음과 같은 방법으로 줄일 수 있습니다.

  1. 너무 많은 기회를 놓치는 것을 방지하기 위해 적절하게 컴보 신호를 풀어

  2. 더 많은 실시간 트렌드 판단을 얻기 위해 선형 회귀를 대체하기 위해 트렌드 지표를 결합

  3. 매개 변수 최적화를 지원하고 매개 변수 선택을 개선하기 위해 기계 학습 방법을 사용

최적화 방향

이 전략은 다음과 같은 방법으로 더 이상 최적화 될 수 있습니다.

  1. 매개 변수 최적화를 위해 기계 학습 방법을 사용

역사적인 데이터를 수집하고, 파라미터 최적화 목표를 설계하고, 유전자 알고리즘과 베이지안 최적화와 같은 기계 학습 알고리즘을 사용하여 최상의 파라미터 조합을 검색합니다.

  1. 스톱 로스 메커니즘 추가

최대 손실을 제어하기 위해 ATR, 트렌드 지표 등에 기초한 스톱 로스 규칙을 설정할 수 있습니다.

  1. 입력 및 출력 논리를 최적화

이동 평균 필터와 볼린저 밴드와 같은 보조 조건은 거래 신호를 기반으로 추가하여 위치 조정의 빈도를 줄이고 함정에 빠지지 않도록 할 수 있습니다.

  1. 감정 분석을 결합

자연 언어 처리 기술을 사용하여 시장 참여자의 정서를 결정하고 거래 결정에 도움을줍니다.

  1. 기계 학습 예측 모듈을 추가

LSTM와 GRU와 같은 딥러닝 모델을 사용하여 전략 결정의 중요한 기준으로 가격을 예측합니다.

요약

이 전략은 123 역전 전략과 선형 회귀 가로막기 전략을 결합하여 다중 요인 중심의 양적 거래를 구현합니다. 검증 메커니즘은 잘못된 신호를 효과적으로 필터링하고 역전 및 트렌드 거래 기회를 포착 할 수 있습니다. 그러나 전략에는 파라미터 최적화 및 위험 제어 메커니즘의 확장에 관심을 기울여야하는 특정 지연 위험도 있습니다. 매개 변수 최적화 및 기능 확장을위한 기계 학습 및 기타 기술을 결합하는 것은 전략이 탐구 할 가치가있는 추가 최적화 방향입니다.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 25/01/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
// Linear Regression Intercept is one of the indicators calculated by using the 
// Linear Regression technique. Linear regression indicates the value of the Y 
// (generally the price) when the value of X (the time series) is 0. Linear 
// Regression Intercept is used along with the Linear Regression Slope to create 
// the Linear Regression Line. The Linear Regression Intercept along with the Slope 
// creates the Regression line.
//
// 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

LRI(Length,xSeria) =>
    pos = 0.0
    xX = Length * (Length - 1) * 0.5
    xDivisor = xX * xX - Length * Length * (Length - 1) * (2 * Length - 1) / 6
    xXY = 0.0
    for i = 0 to Length-1
    	xXY := xXY + (i * xSeria[i])
    xSlope = (Length * xXY - xX * sum(xSeria, Length)) / xDivisor
    xLRI = (sum(xSeria, Length) - xSlope * xX) / Length
    pos:= iff(close > xLRI, 1,
           iff(close < xLRI, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Line Regression Intercept", 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, "---- Line Regression Intercept ----")
LengthLRI = input(14, minval=1)
xSeria = input(title="Source", type=input.source, defval=close)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posLRI = LRI(LengthLRI,xSeria)
pos = iff(posReversal123 == 1 and posLRI == 1 , 1,
	   iff(posReversal123 == -1 and posLRI == -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 )

더 많은