다중 지표를 기반으로 한 암호화폐 하이앤로우 전략


생성 날짜: 2023-12-29 14:16:16 마지막으로 수정됨: 2023-12-29 14:16:16
복사: 0 클릭수: 652
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

다중 지표를 기반으로 한 암호화폐 하이앤로우 전략

개요

이 전략은 암호화폐 시장에 적합한 고저 전략이다. MACD, PSAR, ATR, 엘리엇 파 등 여러 지표를 종합적으로 사용하여 1시간, 4시간 또는 1일 등의 높은 시간 주기에서 거래한다. 전략의 장점은 위험과 수익률이 높고, 평균 수익률이 1.5~2.5에 달한다.

전략 원칙

이 전략의 거래 신호는 가격의 높은 낮은 지점과 여러 지표의 통합 판단에서 나온다. 구체적인 논리는 다음과 같다:

  1. K선에서 가격 상승/하락의 간격이 나타난다는 것을 판단한다. 즉, 높은 곳에서 연속적으로 혁신이 높고 낮은 곳에서 연속적으로 혁신이 낮다.

  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)