이중 요인 주기 거래 전략

저자:차오장, 날짜: 2023-12-05 17:56:27
태그:

img

전반적인 설명

이중 요인 사이클 거래 전략은 양적 거래 전략입니다. 거래 신호를 생성하고 초과 수익을위한 시장 추세를 추적하기 위해 두 가지 다른 유형의 기술적 지표를 결합합니다.

이 전략의 장점은 다양한 요인을 결합하여 거래 기회를 찾을 수 있으며 이중 확인은 신호 신뢰성을 향상시키고 잘못된 거래의 가능성을 줄일 수 있다는 것입니다. 동시에 전략은 주기 거래의 모든 장점을 활용합니다. 즉 적시에 스톱 로스 및 리버스 오픈 포지션으로 위험을 효과적으로 제어 할 수 있습니다.

전략 원칙

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

  1. 123 역전 전략 이 전략은 울프 젠슨의 책에서 나온다. 이 전략의 거래 논리는 다음과 같습니다. 닫기 가격이 2 일 연속으로 이전 닫기 가격보다 높고 9 일 느린 K 라인이 50보다 낮을 때, 긴; 닫기 가격이 2 일 연속으로 이전 닫기 가격보다 낮고 9 일 빠른 K 라인이 50보다 높을 때, 짧은.

  2. 지원/항쟁 역습 전략
    이 전략은 가격이 주요 지지 또는 저항 수준을 통과하는지 여부를 판단하여 신호를 생성합니다. 가격이 이전 거래 날의 가장 높은 가격을 통과하면 상승 신호를 나타냅니다. 가격이 이전 거래 날의 가장 낮은 가격을 넘으면 하향 신호를 나타냅니다.

위의 두 전략의 신호를 결합하여 두 신호가 일관성있는 경우 포지션을 열고, 그렇지 않으면 포지션을 맑게합니다. 리버스 오프닝 모드는 또한 시장이 변할 때 적시에 손실을 멈추고 거래를 역전하도록 설정되어 자금의 순환적 운영을 달성합니다.

이점 분석

이 두 가지 요인 순환 거래 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 멀티 팩터 설계는 높은 신호 신뢰성을 보장합니다. 123 역전 전략과 지원/저항 전략은 서로를 확인하고 오류 신호를 줄일 수 있습니다.

  2. 순환 메커니즘은 전략이 시장 변화에 적응하고 일방적 손실을 효과적으로 통제 할 수 있도록합니다.

  3. 9일 스토카스틱 지표의 사용은 시장 소음을 필터링하고 더 명확한 신호를 만들 수 있습니다.

  4. 단일 요인 전략보다 위험성이 낮고 마이너드 다운도 적다. 여러 요인이 결합된 힘을 형성하여 전략에 대한 비합리 변동의 영향을 억제 할 수 있습니다.

위험 분석

이 전략은 또한 몇 가지 위험을 초래합니다.

  1. 측면 시장에서 트렌드를 잘 파악하는 것은 어렵고, 빈번한 스톱 손실과 역 오픈은 거래 비용을 증가시킬 것입니다. 적절한 스톱 손실 라인의 확장은 이것을 해결할 수 있습니다.

  2. 스토카스틱의 매개 변수 설정은 신호 품질에 영향을 줄 것입니다. 부적절한 매개 변수는 신호의 잘못된 위치 및 품질 저하로 이어질 수 있습니다. 매개 변수는 반복적으로 테스트하고 최적화해야합니다.

  3. 듀얼 팩터 디자인은 신호 품질을 향상시키지만, 시장 소리의 전략에 대한 영향을 증가시킵니다. 이것은 전략을 구성하고 검증 할 때 더 신중해야합니다.

최적화 방향

우리는 다음 측면에서 이 전략을 더욱 최적화 할 수 있습니다.

  1. 시장 소음을 제거하기 위한 최적의 매개 변수 조합을 찾기 위해 다양한 주기의 스토카스틱 테스트

  2. 트렌드 필터를 추가하여 옆 시장을 필터링하고 명확한 트렌드에 대한 포지션만 오픈하십시오.

  3. 효율적인 스톱 손실을 보장하면서 거래 비용을 줄이기 위해 스톱 손실 라인 설정 알고리즘을 최적화하십시오.

  4. 더 명확한 거래 신호와 더 안정적인 전략을 가진 요인 조합을 찾기 위해 요소의 다른 조합을 테스트

요약

이중 요인 디자인을 통해 이 전략은 더 높은 신호 품질과 위험 조정 수익을 얻었습니다. 동시에 사이클 거래의 사용은 일방 시장에서 손실을 효과적으로 제어합니다. 전략은 위험과 수익 사이의 좋은 균형을 이루었습니다. 더 나은 전략 성과를 달성하기 위해 매개 변수 최적화, 위험 제어 설정 등에 대한 더 심층적인 연구가 여전히 필요합니다.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 13/11/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
// Cueing Off Support And Resistance Levels, by Thom Hartle 
// modified by HPotter for trade signals.
// The related article is copyrighted material from Stocks & Commodities.
//
// 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

COSRL(SigVal) =>
    pos = 0.0
    xLow = low
    xHigh = high
    xHighD = security(syminfo.tickerid,"W", high[1])
    xLowD  = security(syminfo.tickerid,"W", low[1])
    sigpre1 = iff(xHigh <= xLowD, -1,
                 iff(xLow >= xHighD, 1, nz(pos[1], 0))) 
    sigpre2 = iff( xHigh <= xHighD, -1,
                 iff(xLow >= xLowD, 1, nz(pos[1], 0))) 
    pos := SigVal ? sigpre1 : sigpre2
    pos

strategy(title="Combo Backtest 123 Reversal & Cueing Off Support And Resistance Levels", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
SigVal = input(true, title="To Line \ From Line")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posCOSRL = COSRL(SigVal)
pos = iff(posReversal123 == 1 and posCOSRL == 1 , 1,
	   iff(posReversal123 == -1 and posCOSRL == -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 )

더 많은