복합 전략에 기반한 인버스 및 중력 중심 통합 거래 전략

저자:차오장, 날짜: 2024-01-03 16:51:03
태그:

img

전반적인 설명

이 전략은 이중 거래 신호를 통합하여 더 안정적이고 효율적인 거래 결정을 실현합니다. 하나는 가격 반전 신호와 스토카스틱 지표를 결합한 반전 전략이며 다른 하나는 중앙선과 가격 채널의 브레이크아웃 전략입니다. 두 전략의 거래 신호는 논리적으로 ANDed 될 것입니다. 즉 두 전략이 동시에 같은 방향으로 신호를 발행 할 때만 포지션이 열릴 것입니다. 이러한 종류의 멀티 전략 통합은 일부 유효하지 않은 신호를 필터링하고 더 신뢰할 수있는 거래 결정을 얻을 수 있습니다.

전략 원칙

역전 전략 부분은 가격이 두 연속 거래일 동안 역전 패턴을 보여주며 스토카스틱 지표가 과반 구매 또는 과반 판매 영역에 진입했을 때 거래 신호를 생성합니다. 이것은 두 번 확인을 위해 가격 역전 신호와 과반 구매 / 과반 판매 신호를 모두 사용할 수 있습니다. 중력 중심부 부분은 채널이 깨지면 거래 신호를 생성하기 위해 가격의 선형 회귀 중심선을 중심으로 상부 및 하부 채널을 구축합니다. 채널 브레이크아웃 신호는 또한 가격이 방향 트렌드 움직임을 경험하기 시작한다는 것을 암시합니다.

두 전략은 각각 가치와 트렌드 기회를 포착합니다. 전략 신호를 논리적으로 AND함으로써 두 전략이 동시에 같은 방향으로 신호를 발산 할 때만 지위가 열립니다. 이것은 일부 유효하지 않은 신호를 효과적으로 필터링하여 최종 전략을 더 신뢰할 수 있습니다.

이점 분석

이 전략의 가장 큰 장점은 신호의 안정성과 신뢰성입니다. 역전 및 트렌드 전략의 조합은 주요 움직임이 놓치지 않고 동시에 역전 및 트렌드 거래 기회를 포착합니다. 한편, 논리적 AND 작업은 일부 유효하지 않은 신호를 필터링하여 최종 전략을 더 신뢰할 수 있으며 소음으로 속이는 것을 피합니다.

또한, 역전 및 트렌드 전략의 조합은 또한 여러 시간 프레임에서 안정적인 운영을 달성합니다. 역전 전략은 중장기 이동 평균에 기반한 중력 전략이 중장기 이동 평균에 기초하는 동안 단기 과반 구매 / 과반 판매 신호를 활용합니다. 보완적인 시간 프레임은 지속적이고 안정적인 거래 기회를 창출 할 수 있습니다.

위험 분석

이 전략의 가장 큰 위험은 이중 전략의 신호를 일치시키지 못하여 거래 신호가 충분하지 않은 것으로 나타납니다. 이것은 가격이 범위와 연결되어 명확한 방향 추세없이 통합될 때 발생할 수 있습니다. 가격이 길게 길게 옆 방향으로 변하면 역전 신호와 트렌드 신호가 생성되기 어렵고 결과적으로 거래 기회가 적습니다.

또한 이중 전략의 논리적 AND 동작은 단일 전략에서 일부 기회를 놓칠 수도 있습니다. 하나의 전략 만이 유효한 거래 신호를 생성하면 지위가 열리지 않을 것입니다. 이것은 특정 기회 비용을 초래할 수 있습니다.

위험을 완화하기 위해, 전략 신호를 더 쉽게 일치시키고 포지션을 열 수 있도록 매개 변수를 완화 할 수 있습니다. 또한 더 많은 트렌드 기호를 거래하고 더 많은 거래 기회를 얻기 위해 주식 선택 메커니즘을 도입 할 수 있습니다.

최적화 방향

이 전략은 두 가지 주요 차원에서 최적화 될 수 있습니다.

첫째는 매개 변수 최적화이다. 스토크 지표 및 중점선 채널을 포함한 매개 변수는 더 정렬 된 신호를 얻기 위해 추가로 테스트하고 최적화 할 수 있습니다. 이것은 더 많은 백테스트를 통해 달성 할 수 있습니다.

두 번째는 주식 선택 작업과 유사한 메커니즘을 도입하는 것입니다. 이 전략은 명확한 추세를 가진 주식에 더 적합하기 때문입니다. 따라서 특정 조건을 충족하는 주식을 특정 지표에 따라 거래하도록 선택할 수 있다면 전반적인 전략 성능을 크게 향상시킬 수 있습니다. 이것은 산업 회전 추세, 이동 평균 시스템 등을 결합한 주식 선택 모듈의 설계가 필요합니다.

요약

이 전략은 반전 및 트렌드 전략을 통합함으로써 거래 결정의 이중 확인 및 멀티 타임프레임 매칭을 달성하며 신호 매칭의 어려움으로 인해 거래 기회가 줄어드는 문제를 직면합니다. 다음 단계 최적화는 더 강력하고 안정적인 전략 성능을 얻기 위해 매개 변수 및 모듈 관점에서 접근 할 수 있습니다.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/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
// The indicator is based on moving averages. On the basis of these, the 
// "center" of the price is calculated, and price channels are also constructed, 
// which act as corridors for the asset quotations.
//
// 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

CenterOfGravity(Length, m,Percent, SignalLine) =>
    pos = 0
    xLG = linreg(close, Length, m)
    xLG1r = xLG + ((close * Percent) / 100)
    xLG1s = xLG - ((close * Percent) / 100)
    xLG2r = xLG + ((close * Percent) / 100) * 2
    xLG2s = xLG - ((close * Percent) / 100) * 2
    xSignalR = iff(SignalLine == 1, xLG1r, xLG2r)
    xSignalS = iff(SignalLine == 1, xLG1s, xLG2s)
    pos :=  iff(close > xSignalR, 1,
             iff(close < xSignalS, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Center Of Gravity", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthCoF = input(20, minval=1)
m = input(5, minval=0)
Percent = input(1, minval=0)
SignalLine = input(1, minval=1, maxval = 2, title = "Trade from line (1 or 2)")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(LengthCoF, KSmoothing, DLength, Level)
posCenterOfGravity = CenterOfGravity(Length, m,Percent, SignalLine)
pos = iff(posReversal123 == 1 and posCenterOfGravity == 1 , 1,
	   iff(posReversal123 == -1 and posCenterOfGravity == -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 )

더 많은