
적응 이동 평균 전략 (Mala Adaptive Moving Average Strategy) 은 존 엘러스의 MESA 적응 이동 평균 지표에 기반을 둔 양적 거래 전략이다. 이 전략은 시너지 파동을 사용하여 거래 결정을 내리고, 낮은 시점에 구매하고 높은 시점에 판매하며, 스라이딩 조정 매개 변수를 통해 시너지 파동이 다양한 품종과 시장 환경에 적응할 수 있도록 한다.
적응형 이동 평균 전략은 양파 생성기를 사용하여 거래 신호를 생성한다. 양파는 회전하는 벡터 (이러한 것을 함수라고 한다) 가 ?? 직축에 던지는 그림자에 의해 결정된다. 벡터가 360도 회전하면, 하나의 주기를 완성한다. 벡터가 어떤 각도를 통과할 때 구매 신호를 생성하고 다른 각도를 통과할 때 판매 신호를 생성한다. 따라서 거래 결정은 시간대에서 파형 특성이 아닌 주파수 영역의 각도로 정의되며, 전략을 더 거칠게 만들어 다양한 품종과 시장 환경에 적응할 수 있다.
구체적으로, 이 전략은 우선 가격의 평형화 및 탈향화 처리를 하고, 그 다음에는 양파의 두 분수를 계산한다: 동파 I 분수와 양파 Q 분수. 이 두 분수는 단계 평면 이동을 통해 겹쳐지고 파가 되고, 최종 Re와 Im을 얻는다. Re와 Im은 양파의 주파수 정보를 반영하며,atan () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
적응형 이동 평균 전략은 다음과 같은 장점이 있습니다.
시조파와 단계를 거래 신호로 사용하여, 전략이 더 거칠고, 시간대 파형의 영향을 받지 않는다.
주기 및 매개 변수는 시장 변화에 동적으로 적응할 수 있으며, 강한 적응력을 가지고 있다.
MAMA와 FAMA 곡선은 가격 자체의 특성에만 의존하며, 지연이 없으며, 트렌드 전환을 적시에 포착할 수 있다.
매개 변수 설정으로 전략의 민감도를 조정할 수 있으며, 다양한 스타일의 거래자에게 적합하다.
전략 논리는 명확하고 간단하며, 이해하기 쉽고 수정할 수 있으며, 연구와 교육에 적합하다.
이동 평균 전략에 대한 위험도 있습니다.
시너지 곡선의 주기 및 단계에 의존하기 때문에 가격이 비정상적으로 왜곡되면 잘못된 신호가 발생한다.
주기 판단에 딱딱한 경계를 설정하여 주기 변화를 충분히 부드럽게 만들 수 없습니다.
위상과 주기의 셀 효과는 곡선이 중요한 지점 근처에서 흔들리고, 최상의 엔트리와 엑시트를 놓칠 수 있다.
시장의 변동이 심해지면, 변수와 곡선의 적응력이 떨어진다.
기술적인 지표로서, 전략은 중요한 기술적인 위치에서 가짜 돌파구와 잘못된 신호를 발생시키는데 쉽다.
이러한 위험은 더 부드러운 매개 변수를 설정하여, 다른 지표와 결합하여 필터링하고, 포지션 규모를 조정하는 등의 방법으로 완화 될 수 있습니다.
적응형 이동 평균 전략은 다음과 같은 측면에서 최적화될 수 있다:
주기 및 매개 변수의 계산 방법을 개선하여 그 변화가 더 부드럽고 자연스럽습니다. 예를 들어, 통계 방법을 도입하여 가격을 더 잘 모델링 할 수 있습니다.
변동률, 교차량 등의 지표와 함께 신호를 필터링하여 정확도를 높인다. 또한 기본적인 이해와 함께 신호의 신뢰성을 높일 수 있다.
매개 변수 설정 및 슬라이드 포인트 제어를 최적화하여 거래 비용을 절감하고 시스템의 안정성을 향상시킵니다.
기계 학습 및 유전 알고리즘과 같은 방법을 도입하여 시스템 매개 변수가 계속 진화하고 업데이트되도록 동적으로 최적화합니다.
다른 엔트리와 엑시트를 설정하고, 트렌드와 반전 시스템을 결합하여 포트폴리오를 구축하여 지속적인 수익성을 향상시킵니다.
적응형 이동 평균 전략은 시인파 분석을 사용하여 거래 신호를 생성하고, 동적으로 조정하는 파라미터를 통해 시스템이 시장 환경의 변화에 스스로 적응할 수 있도록 해줍니다. 강력한 거친성 및 광범위한 적용이 있습니다. 다른 적응형 이동 평균 전략에 비해 더 높은 실전성과 안정성을 가지고 있습니다. 그러나 기술 전략으로서 중요한 기술 지점에서 오류 신호가 발생하여 다른 보조 도구를 도입하여 필터링 최적화를 필요로합니다. 계속 개선하면 이 전략은 권장할만한 적응형 거래 시스템으로 될 가능성이 있습니다.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
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/
// © dongyun
//@version=4
strategy("自适应移动平均的MESA系统", overlay=true)
fastlimit = input(0.5,'')
slowlimit = input(0.05,'')
smooth = 0.0
detrender = 0.0
I1 = 0.0
Q1 = 0.0
JI = 0.0
JQ = 0.0
I2 = 0.0
Q2 = 0.0
Re = 0.0
Im = 0.0
period = 0.0
smoothperiod = 0.0
phase = 0.0
deltaphase = 0.0
alpha = 0.0
MAMA = 0.0
FAMA = 0.0
price = 0.0
price := (high + low)/2
PI = 2 * asin(1)
if (bar_index > 5)
smooth := (4*price + 3*price[1] + 2*price[2] + price[3])/10
detrender := (.0962*smooth + .5769*nz(smooth[2]) - .5769*nz(smooth[4]) - .0962*nz(smooth[6]))*(.075*nz(period[1]) + .54)
// compute InPhase and Quadrature components
Q1 := (.0962*detrender + .5769*nz(detrender[2]) - .5769*nz(detrender[4]) - .0962*nz(detrender[6]))*(.075*nz(period[1]) + .54)
I1 := nz(detrender[3])
// advance the pulse of i1 and q1 by 90 degrees
JI := (.0962*I1 + .5769*nz(I1[2]) - .5769*nz(I1[4]) - .0962*nz(I1[6]))*(.075*nz(period[1]) + .54)
JQ := (.0962*Q1 + .5769*nz(Q1[2]) - .5769*nz(Q1[4]) - .0962*nz(Q1[6]))*(.075*nz(period[1]) + .54)
//phase addition for 3-bar averaging
I2 := I1 - JQ
Q2 := Q1 + JI
//smooth the i and q components before applying
I2 := .2*I2 + .8*nz(I2[1])
Q2 := .2*Q2 + .8*nz(Q2[1])
// hymodyne discriminator
Re := I2*I2[1] + Q2*nz(Q2[1])
Im := I2*Q2[1] + Q2*nz(I2[1])
Re := .2*Re + .8*nz(Re[1])
Im := .2*Im + .8*nz(Im[1])
if (Im != 0 and Re != 0)
period := 2 * PI/atan(Im/Re)
if (period > 1.5 * nz(period[1]))
period := 1.5*nz(period[1])
if (period < .67*nz(period[1]))
period := .67*nz(period[1])
if (period < 6)
period := 6
if (period > 50)
period := 50
period := .2*period + .8*nz(period[1])
smoothperiod := .33*period + .67*nz(smoothperiod[1])
if (I1 != 0)
phase := (180/PI) * atan(Q1/I1)
deltaphase := nz(phase[1]) - phase
if (deltaphase < 1)
deltaphase := 1
alpha := fastlimit/deltaphase
if(alpha < slowlimit)
alpha := slowlimit
MAMA := alpha*price + (1 - alpha)*nz(MAMA[1])
FAMA := .5*alpha*MAMA + (1 - .5*alpha)*nz(FAMA[1])
if (FAMA < MAMA)
strategy.entry("Long", strategy.long)
else
if (FAMA > MAMA)
strategy.entry("Short", strategy.short)