이중 골든 크로스 반전 거래 전략

저자:차오장, 날짜: 2023-11-03 15:32:38
태그:

img

전반적인 설명

이중 황금 십자 반전 거래 전략은 여러 기술적 분석 지표를 결합한 거래 전략입니다. 다양한 거래 신호를 통합하고 더 신뢰할 수있는 거래 신호를 얻기 위해 123 반전 패턴 전략과 소수 숫자 대역 지표를 통합합니다.

전략 원칙

이 전략은 두 가지 하위 전략으로 구성됩니다.

  1. 123 회전 패턴 전략

    이 시스템은 주식의 폐쇄 가격을 기반으로 거래 신호를 생성합니다. 신호는 연속적인 날의 폐쇄 가격 사이의 관계가 변할 때 유발됩니다. 구체적으로, 이전 폐쇄 가격이 이틀 전보다 높고 현재 폐쇄 가격이 전날보다 낮을 때 짧은 신호가 생성됩니다. 이전 폐쇄 가격이 이틀 전보다 낮고 현재 폐쇄 가격이 전날보다 높을 때 긴 신호가 생성됩니다. 또한, 신호는 스토카스틱 오시레이터가 넘어가면만 활성화됩니다. 즉, 빠른 선이 느린 선 아래에있을 때만 긴 신호가 활성화됩니다. 빠른 선이 느린 선 위에있을 때만 짧은 신호가 활성화됩니다.

  2. 소수 대역 전략

    이 전략은 원수의 고유 분포를 사용하여 가격 변동 범위를 결정합니다. 먼저 가격의 특정 비율 범위 내에서 가장 높고 가장 낮은 원수를 찾아 두 개의 원수 수열을 밴드로 그래프합니다. 가격은 밴드에 닿을 때 거래 신호가 생성됩니다. 구체적으로, 가격이 상단 범위를 넘을 때 긴 신호가 유발됩니다. 가격이 하단 범위를 넘을 때 짧은 신호가 유발됩니다.

두 가지 하위 전략은 최종 거래 신호를 생성하기 위해 결합됩니다. 즉, 긴 신호는 두 전략이 긴 신호를 생성 할 때만 생성됩니다. 짧은 신호에도 마찬가지입니다. 두 전략의 신호가 서로 모순되면 거래가 실행되지 않습니다.

이점 분석

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

  1. 신호 통합을 통해 수익성 증대

    두 가지 다른 유형의 전략의 신호를 결합함으로써 신호의 신뢰성을 확인하여 높은 확률의 수익성있는 거래 기회를 식별 할 수 있습니다.

  2. 123 역전 패턴의 높은 승률

    123 반전 패턴은 짧은 기간의 과반 구매 및 과반 판매 상황에서 발생하는 반전 기회를 포착 할 수있는 고전적인 역전 전략으로 실시간 거래에서 상대적으로 높은 이윤률을 가지고 있습니다.

  3. 소수 대역은 가격 패턴을 포착합니다.

    소수 대역은 소수의 독특한 무작위성을 사용하여 가격 변동 범위를 결정하고 주관적 편견을 피하고 거래 신호의 객관성을 향상시킵니다.

  4. 새로운 전략 논리는 착취를 피합니다.

    여러 지표의 혁신적인 통합은 복제 전략에 의해 역공학 및 착취에 덜 취약하게 만듭니다.

위험 분석

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

  1. 실패한 환전 위험

    역전 전략으로서, 123 패턴의 실패한 역전은 손실로 이어질 수 있습니다.

  2. 소수 대역의 결함

    소수 대역은 적절한 매개 변수 조정에 의존합니다. 잘못된 매개 변수로는 효과적이지 않을 수 있습니다.

  3. 여러 신호에서 거래 빈도가 증가합니다.

    두 개의 신호 소스가 결합됨에 따라 더 많은 거래가 생성 될 수 있습니다. 과도한 거래 비용은 적절히 통제되지 않으면 이익을 침식 할 수 있습니다.

  4. 최적화 어려움

    두 개의 통합 전략에서 매개 변수를 최적화하는 것은 도전이 될 수 있습니다.

최적화 제안

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

  1. 매 거래당 손해가 제한되는 스톱 손실을 포함합니다.

  2. 최신 시장 조건에 맞게 소수 대역의 매개 변수를 최적화합니다.

  3. 거래 빈도를 조절하여 거래 비용이 과잉되는 것을 피합니다.

  4. 전략 매개 변수 최적화를 자동화하는 기계 학습 알고리즘을 도입합니다.

  5. 신호 정확성을 더욱 향상시키기 위해 볼륨 표시기와 같은 더 많은 확인 지표를 추가합니다.

요약

이중 황금 십자 역전 거래 전략은 소음 거래를 필터링하고 신호 검증을 통해 높은 확률의 거래 기회를 식별하기 위해 여러 기술적 지표를 통합합니다. 그러나 전략을 강화하기 위해 적절한 최적화를 통해 완화해야하는 고유한 위험을 가지고 있습니다. 통제 된 위험으로 전략은 비교적 안정적이고 신뢰할 수있는 수치적 거래 전략이 될 수 있습니다.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 23/04/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
// Determining market trends has become a science even though a high number 
// or people still believe it’s a gambling game. Mathematicians, technicians, 
// brokers and investors have worked together in developing quite several 
// indicators to help them better understand and forecast market movements.
// The Prime Number Bands indicator was developed by Modulus Financial Engineering 
// Inc. This indicator is charted by indentifying the highest and lowest prime number 
// in the neighborhood and plotting the two series as a band.
//
// 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

PrimeNumberUpBand(price, percent) =>
    res = 0.0
    res1 = 0.0
    for j = price to price + (price * percent / 100)
        res1 := j
	    for i = 2 to sqrt(price)
        	res1 := iff(j % i == 0 , 0, j)
            if res1 == 0 
                break
		if res1 > 0 
		    break
    res := iff(res1 == 0, res[1], res1)
    res

PrimeNumberDnBand(price, percent) =>
    res = 0.0
    res2 = 0.0
    for j = price to price - (price * percent / 100)
        res2 := j
	    for i = 2 to sqrt(price)
        	res2 := iff(j % i == 0 , 0, j)
            if res2 == 0 
                break
		if res2 > 0 
		    break
    res := iff(res2 == 0, res[1], res2)
    res

PNB(percent, Length,srcUp,srcDn) =>
    pos = 0.0
    xPNUB = PrimeNumberUpBand(srcUp, percent)
    xPNDB = PrimeNumberDnBand(srcDn, percent)
    xHighestPNUB = highest(xPNUB, Length)
    xLowestPNUB = lowest(xPNDB, Length)
    pos:= iff(close > xHighestPNUB[1], 1,
             iff(close < xLowestPNUB[1], -1, nz(pos[1], 0))) 
    pos


strategy(title="Combo Backtest 123 Reversal & Prime Number Bands", 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, "---- Prime Number Bands ----")
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
Length_PNB = input(5, minval=1)
srcUp = input(title="Source Up Band", type=input.source, defval=high)
srcDn = input(title="Source Down Band", type=input.source, defval=low)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPNB = PNB(percent, Length_PNB,srcUp,srcDn)
pos = iff(posReversal123 == 1 and posPNB == 1 , 1,
	   iff(posReversal123 == -1 and posPNB == -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 )

더 많은