여러 시간 프레임 EMA 돌파구와 K-라인 패턴 조합에 기반한 거래 전략

저자:차오장, 날짜: 2024-02-21 15:00:06
태그:

img

전반적인 설명

이 전략은 여러 시간 프레임 EMA 지표와 K-라인 패턴 판단을 통합하여 상대적으로 민감한 장기 신호 캡처 및 스톱 로스 출구를 달성합니다.

전략 원칙

이 전략은 주로 다음의 판단 지표에 기초합니다.

  1. EMA: 가격 돌파시 거래 신호를 결정하기 위해 EMA의 13 및 21 주기의 2 세트를 사용합니다.

  2. K-라인 패턴: K-라인 엔티티의 방향을 판단하고 EMA 지표와 함께 잘못된 돌파구를 필터링합니다.

  3. 지원 저항: 신호 신뢰성을 높이기 위해 돌파구가 이 영역을 통과하는지 여부를 결정하기 위해 지난 10 회기의 가장 높은 지점으로 구성됩니다.

  4. 시간 분포의 상승: 120 사이클의 닫는 것은 시간 분포의 상승으로 판단하기 위해 열려 있습니다. 보조 판단으로.

거래 신호를 생성하는 규칙은 다음과 같습니다.

  1. 상승 신호: 빠른 EMA가 느린 EMA를 깨고 양 라인 K 라인, 긴 포지션을 닫고 긴 포지션을 개척합니다.

  2. 하향 신호: 빠른 EMA는 Yin 라인 K 라인, 평평한 긴 포지션과 함께 느린 EMA로 분해됩니다.

  3. 스톱 손실 출구: 역 신호가 표시될 때 현재 위치에서 스톱 손실 출구.

장점

  1. 여러 시간 프레임 EMA 지표는 추세를 더 안정적으로 판단하고 잘못된 돌파구를 피합니다.
  2. 트렌드를 더 정확하게 식별하기 위해 필터링을 위해 K-라인 엔티티 방향과 결합합니다.
  3. 신호 품질을 보장하기 위해 시간 분할 판단을 증가시키고 저항 판단을 지원합니다.
  4. 손실 위험을 줄이기 위해 손실을 멈추는 신호로 반전 신호를 사용합니다.

위험성

  1. 손실로 이어지는 유효하지 않은 돌파구의 위험: 여러 시간 프레임 EMA 및 K 라인 엔티티 판단은 여전히 전략에 유효하지 않은 돌파구의 영향을 완전히 피할 수 없습니다.
  2. 부적절한 매개 변수 선택의 위험이 있습니다. EMA 사이클, K-라인 판단 사이클의 부적절한 설정은 신호 품질의 감소로 이어집니다.
  3. 지원 저항의 실패 위험이 있습니다. 역사적 지원 저항 실패는 일반적입니다. 이것은 신호가 생성 될 때 추진력 부족으로 이어질 것입니다.
  4. 시간 분할 실패 위험 시간 분할 상황은 변하고 판단에 완전히 의존 할 수 없습니다.

위의 위험은 과도한 최적화를 피하는 방법, 신중한 매개 변수 선택, 엄격한 위치 크기를 제어하는 방법과 같은 방법을 통해 완화 할 수 있습니다.

최적화 방향

  1. 판단을 돕기 위해 기계 학습 모델을 도입합니다. 더 높은 정확성을 위해 K-라인 엔티티 방향을 판단하는 분류 모델을 훈련하십시오.
  2. 트레일링 스톱이나 변동성 기반 스톱과 같은 적응 스톱 손실 메커니즘을 증가시킵니다.
  3. 감정적 분석을 결합하고, 언론의 의견 판단을 도입하여 부정적인 뉴스의 영향을 피합니다.
  4. 포지션 사이징 관리 모듈을 추가합니다. 고정된 포지션 사이징 비율 또는 펀드 관리 기반 사이징을 도입합니다.

결론

이 전략은 비교적 신뢰할 수 있는 트렌드 판단을 위해 여러 시간 프레임 EMA와 K-라인 엔티티 판단을 통합합니다. 지원 저항과 시간 분할을 사용하는 보조 판단은 신호 품질을 보장합니다. 스톱 손실에 대한 역 신호를 사용하면 단일 스톱 손실을 효과적으로 제어 할 수 있습니다. 미래 최적화는 머신 러닝 모델, 적응 스톱, 정서적 분석 및 위치 사이징 관리 모듈을 도입하여 전략을 더 견고하게 할 수 있습니다.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100)

open_long = 0
close_position = 0
last_long=close
last_short=close

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=false

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:', defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0

//=============Hull MA//
show_hma = false
hma_src = input(close, title="HullMA Source:")
hma_base_length = input(8, minval=1, title="HullMA Base Length:")
hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))

//============ signal Generator ==================================//
Period=input(title='Period', defval='120')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)

// Signals//
long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short) ? 1 : -1
short_signal = crossover(last_short, last_long) ? -1 : 1

if (long_signal == 1)
    strategy.entry("Long Open", strategy.long)

if (short_signal == -1)
    strategy.close("Long Open")
    
if (long_signal[1] == 1 and short_signal[1] == 1)
    open_long := 1
    close_position := 0

if (short_signal[1] == -1 and long_signal[1] == -1)
    open_long := 0
    close_position := 1

plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10)
plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10)
//plot(0, title="Trigger", color=white)

///////////////////////////////////////////////////////////////////////////////////////////

더 많은