자동화 된 기계 학습 거래 전략

저자:차오장, 날짜: 2024-01-29 11:20:42
태그:

img

전반적인 설명

이 전략은 자동화 된 거래 전략을 구현하기 위해 기계 학습 방법을 사용합니다. 여러 지표와 모델을 통합하여 자동으로 거래 신호를 생성하고 이에 따라 구매 및 판매 결정을 내립니다.

전략 원칙

이 전략은 주로 다음의 주요 사항을 기반으로 합니다.

  1. Hull 이동 평균을 사용하여 시장 트렌드 방향을 결정합니다.
  2. EMA를 사용하여 단기 및 중기 동향을 판단합니다.
  3. 촛불 몸의 채널을 사용하여 주요 지원/ 저항 수준을 찾습니다
  4. 다중 시간 프레임에서 오픈 가격과 폐쇄 가격의 교차에 기반한 결정을 내립니다.

구체적으로, 전략은 헐 MA, 13 기간 EMA 및 21 기간 EMA를 그래프화합니다. EMA의 장기 및 단기 상태에 따라 단기 및 중기 트렌드 방향을 판단합니다. 더 긴 사이클 트렌드를 결정하기 위해 헐 MA와 결합합니다. 이것은 후속 거래 신호의 일반적인 방향에 대한 지침을 제공합니다.

포지션을 조정하기 전에 전략은 지원 및 저항 수준에 대응하는 엔티티 채널의 가장 높고 가장 낮은 가격을 참조합니다. 이것은 주요 가격 영역에서 거래 신호를 생성하는 것을 피합니다.

마지막으로, 전략은 60 기간 오픈 및 클로즈 가격을 호출합니다. 닫기 가격이 오픈 가격 이상으로 넘을 때 구매 신호가 생성됩니다. 아래로 넘을 때 판매 신호가 생성됩니다. 이것은 전체 거래 논리를 완료합니다.

이점 분석

이 전략의 가장 큰 장점은 기계 학습과 기술 분석 지표를 결합하여 논리적이고 조정 가능하고 사용하기 쉬운 자동 거래 솔루션을 달성한다는 것입니다.

  1. 다중 표시기 조합은 신호 정확성을 향상시킵니다.

    이 전략은 하나 또는 두 가지 지표에만 의존하지 않고 트렌드, 지원/저항 및 가격 돌파구와 같은 여러 요인을 고려합니다. 이것은 신호의 신뢰성과 정확성을 크게 향상시킵니다.

  2. 유연한 매개 변수 설정

    헐스 MA, EMA 기간, 오픈/클로스 오버 기간의 길이는 매개 변수를 통해 조정할 수 있어 전략은 다른 시장 환경에 적응할 수 있다.

  3. 자동 거래 신호

    지표와 크로스오버를 기반으로 하는 거래 신호는 수동 판단 없이 자동으로 구매와 판매를 유발할 수 있어 어려움을 줄일 수 있습니다.

  4. 시각화 된 표시

    전략의 차트는 시장 구조, 트렌드 상태 및 주요 가격을 명확하게 표시하여 전략 판단의 기초를 직관적으로 표시 할 수 있습니다.

위험 분석

이 전략은 여러 측면에서 최적화되었지만 여전히 몇 가지 잠재적 인 위험이 있습니다.

  1. 급격한 가격 변동을 추적하지 못함

    변동성 있는 시장에서는 지표가 비효율적이거나 지연되어 전략이 가격 변화를 시간적으로 추적하지 못하게 될 수 있습니다. 이러한 시장에 적응하기 위해 매개 변수를 최적화해야합니다.

  2. 신호 오류율의 존재

    지표와 모델에 기반한 거래 신호는 더 많은 보조 신호를 결합하여 개선해야하는 일부 잘못된 신호 또는 부족한 신호를 거의 가지고 있습니다.

  3. 장기/단기 믹스 위험

    동시에 긴 포지션과 짧은 포지션을 만드는 전략은 판단이 잘못되면 양쪽에서 손실의 위험이 있습니다. 이를 통제하기 위해 엄격한 스톱 로스 또는 낮은 포지션 사이징이 필요합니다.

  4. 과잉 체력 위험

    과도하게 복잡한 매개 변수 설정은 과도하게 적합 할 위험이 있습니다. 제한된 수의 매개 변수 조합으로 시스템을 단순화해야합니다.

최적화 방향

이 전략의 최적화를 위한 여지가 여전히 있습니다. 주로 다음과 같은 측면에서:

  1. 더 많은 표시 신호를 추가

    기존 지표 외에도 BOLL 채널, KD 지표 등과 같은 더 많은 보조 지표를 도입하여 시스템 참조를 풍부하게 할 수 있습니다.

  2. 딥러닝 모델을 적용

    간단한 지표를 특징으로 사용하여 LSTM 및 다른 딥 러닝 모델을 훈련하여 신호 품질을 향상시킵니다.

  3. 기본 데이터 포함

    거시경제적 데이터, 정책 정보 및 다른 근본적인 요소를 추가하여 장기적 결정을 최적화하십시오.

  4. 리스크 및 포지션 크기

    스톱 로즈 전략을 도입하고 전략 수익 변동성에 따라 포지션 크기를 동적으로 조정하여 위험을 엄격히 제어합니다.

결론

이 전략은 트렌드, 지원/저항 수준, 브레이크아웃 및 여러 가지 다른 지표를 통합하여 자동화, 사용 준비가 된 양적 거래 솔루션을 달성하기 위해 기계 학습 방법을 활용합니다. 다양한 지표 조합, 조정 가능한 매개 변수 및 자동화 신호의 장점을 가지고 있으며, 또한 추적 오차, 신호 오류, 장기 / 짧은 혼합 위험도 어느 정도 직면합니다. 더 많은 보조 지표 및 모델을 통합하여 더 많은 최적화를 위한 방향이 여전히 있습니다. 기본 요소를 결합하고, 역동적으로 위치를 조정하고, 더 안정적이고 정확하고 지능적인 양적 거래 성능을 달성하기 위해.


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

//@version=4
strategy(title='Ali Jitu Abus', shorttitle='Ali_Jitu_Abis_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//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=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------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)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=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
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- 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
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Period=input('60')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)
longCondition = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

plot(request.security(syminfo.tickerid, Period, close), color=red, title="Period request.security Close")
plot(request.security(syminfo.tickerid, Period, open), color=green, title="Period request.security Open")

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

더 많은