적응형 정규화 이동 평균 시장 간 중재 전략

저자:차오장, 날짜: 2023-11-16 16:20:11
태그:

img

전반적인 설명

이 전략은 적응형 정규화 이동 평균선을 계산하여 다른 시장 간의 중재 거래를 구현합니다. 이 전략은 시장 간 중재, 동적 매개 변수 조정, 위험 통제 등을 갖추고 있습니다.

전략 원칙

이 전략은 먼저 스케일 미니맥스 함수를 정의하여 시간 계열을 지정된 범위로 표준화합니다. 그 다음 조정된 신호 선 sig를 계산하기 위해 적응형 정형화 이동 평균 함수 rema를 정의합니다. 신호 선의 계산은:

  1. 슬라이딩 창을 정의합니다. 기본 길이는 5일입니다.

  2. 각 날의 시그 값은 이전 시그 값과 현재 종료 가격의 가중된 평균입니다. 가중화는 적응 가중화 메커니즘을 사용합니다.

  3. 시그 전환을 더 부드럽게 하기 위해 λ 매개 변수를 규칙화자로 추가한다.

신호 라인을 얻은 후, 전략은 신호 라인과 가격의 황금/죽은 십자가를 기반으로 긴/단지를 결정합니다. 구체적으로:

  1. SIG가 가격보다 높을 때, 롱으로 가세요.

  2. SIG가 가격 아래로 넘어가면, 셔트

또한, 전략은 유연성을 높이기 위해 조정 가능한 매개 변수로서 부드러운 인수와 show_line를 추가합니다.

이점 분석

전통적인 이동 평균 전략에 비해 이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 적응형 가중화 메커니즘은 가격 변화에 더 빠르게 반응할 수 있습니다.

  2. 추가된 규칙화는 신호선을 부드럽게 만들고 급격한 가격 변동으로 인한 잘못된 신호를 피합니다.

  3. 시장 간 중재는 시장 간의 가격 차이에서 이익을 얻을 수 있습니다.

  4. 유연한 조정 가능한 매개 변수는 시장 조건에 따라 최적화 될 수 있습니다.

위험 과 해결책

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 이중 크로스오버로 인한 잘못된 신호의 확률은 더 높습니다. 해결책은 신호 라인의 진동을 피하기 위해 부드러운 매개 변수를 적절히 조정하는 것입니다.

  2. 시장 간 중재는 두 시장이 가격 상관관계와 일관성있는 추세를 갖는 것을 요구합니다. 해결책은 중재를 위해 고도로 상관관계있는 시장을 선택하는 것입니다.

  3. 매개 변수 최적화는 백테스팅을 위해 충분한 역사적 데이터를 필요로 합니다. 해결책은 실시간 거래에서 매개 변수를 신중하게 조정하는 것입니다.

최적화 방향

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

  1. 매개 변수 선택에서 기계 학습 알고리즘을 도입하여 매개 변수 조합을 자동으로 최적화 할 수 있습니다.

  2. 신호 생성에서 더 안정적인 거래 신호를 만들기 위해 더 많은 지표를 도입 할 수 있습니다.

  3. 리스크 제어에서, 거래당 손실을 제한하기 위해 스톱 로스를 설정할 수 있습니다.

  4. 크로스마켓 중재에서는 더 높은 상관관계에 있는 거래 자산으로 확장될 수 있습니다.

요약

이 전략은 이동 평균을 적응적으로 계산하여 시장 간의 중재 거래를 구현합니다. 전통적인 이동 평균 전략과 비교하면 적응 매개 변수, 매끄러운 처리, 시장 간 중재 등이 장점입니다. 다음 단계는 기계 학습, 결합 신호, 위험 관리 등을 통해 전략을 더 최적화하는 것입니다.


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

//@version=3
strategy("Crossover82%", overlay=true)

//
// Functions
//
scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

rema(ts, p) => // regularized ma
    rm = 0.0, lambda = .5, a = 2 / (p + 1)
    rm := (nz(rm[1]) + a * (ts - nz(rm[1])) + lambda * (2 * nz(rm[1]) - nz(rm[2]))) / (lambda + 1)
    rm
    
//
// Inputs
//
X = input(close, title="Data source")
smooth = input(2, title="REMA smooth factor")
show_line = input(true, title="Show signal line")

//
// Main
//
p = 5
sig = rema(scaleMinimax(pow(X*p,-X) - 0.1, 100, lowest(X, 100), highest(X, 100)), smooth)

plot(show_line ? sig : na, linewidth=1)
plot(cross(sig, X) ? ohlc4 : na, style=circles, linewidth=8, color=blue, transp=50)

longCondition = crossover(sig, X)
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossunder(sig, X)
if (shortCondition)
    strategy.entry("SE", strategy.short)



더 많은