다중 지표에 기반한 높은/저한 암호화폐 전략

저자:차오장, 날짜: 2023-12-29 14:16:16
태그:

img

전반적인 설명

이 전략은 암호화폐 시장에 적합한 높은/저준위 전략이다. MACD, PSAR, ATR, Elliott Wave 및 1시간, 4시간 또는 1일과 같은 더 높은 시간 프레임에서 거래하기 위한 다른 여러 지표를 통합한다. 이 전략의 장점은 1.5에서 2.5 사이의 평균 이익 인수와 높은 위험 보상 비율에 있다.

전략 논리

이 전략의 거래 신호는 가격 높고 낮은 수준과 여러 지표의 복합 판단에서 나옵니다. 구체적인 논리는 다음과 같습니다.

  1. 가격 차트에서 순차적으로 높은 최고 또는 낮은 최저로 형성된 높은/저 낮은 레벨 범위가 있는지 판단하십시오.

  2. MACD의 히스토그램 레벨을 확인하세요.

  3. 트렌드 방향에 대한 PSAR 표시기를 확인합니다.

  4. ATR와 MA를 기준으로 트렌드 방향을 확인합니다.

  5. 엘리엇 파동 지표로 트렌드 방향을 확인해

만약 모든 5가지 조건이 같은 방향으로 향한다면, 긴 신호나 짧은 신호가 생성됩니다.

장점

  1. 위험과 보상 비율이 1:30까지 높습니다.

  2. 높은 평균 수익률, 보통 1.5-2.5 사이

  3. 여러 가지 지표의 조합은 거짓 유출을 효과적으로 필터링하는 데 도움이 됩니다.

위험성

  1. 상대적으로 낮은 승률 10%~20% 정도입니다.

  2. 잠재적인 철수 및 윙사 위험은 존재합니다.

  3. 시장제도에 따라 지표 성능이 영향을 받을 수 있습니다.

  4. 정신적으로 견딜 수 있어야 합니다.

대응 대책:

  1. 자본을 늘려서 이득율을 균형 잡아야 합니다.

  2. 각 거래에 엄격한 스톱 로스를 설정합니다.

  3. 다른 시장에 따라 매개 변수를 조정합니다.

  4. 심리학을 강화하고 위치 크기를 제어합니다.

최적화 방향

  1. 다른 암호화폐와 시장에 기반한 테스트 매개 변수

  2. 금전 관리를 최적화하기 위해 스톱 로스를 추가하고 이윤을 취합니다.

  3. 머신러닝 방법을 통해 승률을 높여

  4. 트레이딩 신호에 대한 사회적 감정 필터를 추가합니다.

  5. 여러 시간 프레임에서 확인을 고려하십시오.

결론

결론적으로, 이것은 공격적인 고위험 고수익 암호화폐 거래 전략이다. 이 전략의 장점은 높은 위험 보상 비율과 수익 요인이다. 주요 위험은 강력한 심리학을 필요로하는 상대적으로 낮은 승률에서 비롯된다. 미래의 최적화 방향은 매개 변수 조정, 돈 관리, 승률 증가 등이 될 수 있다. 전반적으로 이 전략은 높은 수익을 추구하는 암호화폐 거래자에게 실용적인 가치를 가지고 있다.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("Crypto strategy high/low", overlay=true)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
//sar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)


// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

CCI = input(20)
ATR = input(5)
Multiplier=input(1,title='ATR Multiplier')
original=input(true,title='original coloring')
thisCCI = cci(close, CCI)
lastCCI = nz(thisCCI[1])
bufferDn= high + Multiplier * sma(tr,ATR)
bufferUp= low - Multiplier * sma(tr,ATR)
if (thisCCI >= 0 and lastCCI < 0) 
    bufferUp := bufferDn[1]
if (thisCCI <= 0 and lastCCI > 0) 
    bufferDn := bufferUp[1]

if (thisCCI >= 0)
    if (bufferUp < bufferUp[1])
        bufferUp := bufferUp[1]
else
    if (thisCCI <= 0)
        if (bufferDn > bufferDn[1])
            bufferDn := bufferDn[1]
x=0.0
x:=thisCCI >= 0 ?bufferUp:thisCCI <= 0 ?bufferDn:x[1]
swap=0.0

swap:=x>x[1]?1:x<x[1]?-1:swap[1]

swap2=swap==1?color.lime:color.red
swap3=thisCCI >=0 ?color.lime:color.red
swap4=original?swap3:swap2

//elliot wave
srce = input(close, title="source")
sma1length = input(5)
sma2length = input(35)
UsePercent = input(title="Show Dif as percent of current Candle", type=input.bool, defval=true)
smadif=iff(UsePercent,(sma(srce, sma1length) - sma(srce, sma2length)) / srce * 100, sma(srce, sma1length) - sma(srce, sma2length))
col=smadif <= 0 ? color.red : color.green

longC = high > high[1] and high[1] > high[2] and close[2] > high[3] and hist > 0 and uptrend and smadif < 0 and swap4==color.lime 
//longC = high > high[1] and high[1] > high[2] and high[2] > high[3] and high[3] > high[4] and close[4] > high[5]
shortC = low < low[1] and low[1] < low[2] and close[2] < low[3] and hist < 0 and not uptrend and  smadif > 0 and swap4==color.red 
//shortC = low < low[1] and low[1] < low[2] and low[2] < low[3] and low[3] < low[4] and close[4] < low[5]

tp=input(0.15, title="tp")
sl=input(0.005, title="sl")


strategy.entry("long",1,when=longC)
strategy.entry("short",0,when=shortC)

strategy.exit("x_long", "long" ,loss = close * sl / syminfo.mintick, profit = close * tp / syminfo.mintick , alert_message = "closelong")
//strategy.entry("short",0, when= loss = close * sl / syminfo.mintick)

strategy.exit("x_short", "short" , loss = close * sl / syminfo.mintick, profit  = close * tp / syminfo.mintick,alert_message = "closeshort")
//strategy.entry("long",1, when = loss = close * sl / syminfo.mintick)

//strategy.close("long",when= hist < 0)
//strategy.close("short", when= hist > 0)

더 많은