[TOC]

이름에서 알 수 있듯이 적응형 이동평균(KAMA)은 이동평균의 범주에 속하지만, 전통적인 이동평균과 달리 매우 “스마트”합니다. 우리는 일반적인 이동 평균이 많은 단점을 가지고 있다는 것을 알고 있습니다. 예를 들어, 단기 이동 평균은 가격 추세에 가깝고 매우 민감하지만 잘못된 신호를 생성하기 쉽습니다. 장기 이동 평균은 판단하는 데 매우 정확합니다. 추세는 변하지만 시장이 반응하는 데는 시간이 걸리는 경우가 많습니다.
KAMA의 ‘인텔리전스’는 현재 시장 상황, 즉 변동성에 따라 자율적으로 민감도를 조절하는 능력에 있습니다. 그 표현은 다음과 같습니다. 변동성이 큰 시장에서는 KAMA의 변화가 상당히 둔화되지만, 추세가 나타나면 빠르게 반응합니다. 실제 거래에서 이 방법의 장점은 “일상적인 혼잡”으로 인해 발생하는 거래 비용을 줄이고 시장이 상승할 때 적절한 시간에 거래를 시작할 수 있다는 것입니다.

그 중 n, n1, n2는 모두 기간 매개변수입니다. 기본적으로 n은 10개 기간, n1은 2개 단기 기간, n2는 30개 장기 기간입니다. 이는 또한 KAMA의 저자인 페리 카우프만이 인정한 매개변수 집합입니다. n은 방향 및 변동성 계산 효율성에 사용되고, n1과 n2는 빠르게 움직이는 평균과 느리게 움직이는 평균의 기간입니다. 이론적으로, 더 큰 n1 매개변수일수록 KAMA가 더 부드러워집니다.
KAMA의 계산방법은 다음과 같습니다. 먼저 방향성(DIR)과 변동성(VIR)을 계산한 후, 이 둘의 비율에 따라 효율성을 계산합니다. 효율성(ER)은 가격 변화의 정도를 측정하는 기준으로, 간단히 ‘방향성/변동성’으로 계산합니다. 계산 결과는 0과 1 사이입니다. ER 값이 0에 가까울수록 시장이 변동성 상태에 있음을 나타냅니다. ER 값이 1에 가까울수록 시장이 추세 상태에 있음을 나타냅니다.
효율성(ER)이 계산되면 빠른 이동 평균과 느린 이동 평균을 결합하여 평활화 상수(CS)를 도출할 수 있습니다: 효율성 * (빠른 - 느린) + 느린. CS는 추세 이동 속도를 나타냅니다. CS의 계산 공식에 따르면 CS의 변화는 항상 ER의 변화에 비례한다는 것을 알 수 있습니다.
그런 다음 계수(CQ)를 평활화 능력을 기반으로 계산하는데, 이는 느린 주기 매개변수가 계산에서 더 중요한 역할을 하도록 하는 것이 목적이며, 이는 또한 보다 보수적인 접근 방식입니다. KAMA의 최종 평활도는 계수(CQ)에 의해 결정됩니다. KAMA 계산에서 계수(CQ)는 마지막 두 이동 평균 평활화의 기간 매개변수를 결정합니다. 즉, 지수 가중 평균(동적 이동 평균(종가, 계수), 2).
KAMA의 계산 방법은 매우 복잡하지만, 그 사용은 일반적인 이동평균과 유사하다. 실제 적용에서는 시장 추세를 파악할 수 있을 뿐만 아니라 정확한 매수 및 매도 시점에도 사용할 수 있다. 매우 “스마트”하기 때문에 다양한 거래 전략에 활용할 수 있으며, 디지털 통화에서도 시도해 볼 만한 가치가 있습니다.
1단계: KAMA 계산
알아채다! 왼쪽 상단에서 프로그래밍 언어를 선택하세요.My语言. talib 라이브러리에 이미 만들어진 KAMA가 있지만, 외부 매개변수(n) 기간이 하나뿐이고, n1과 n2는 기본적으로 2와 30으로 설정되어 있습니다. 이 기사의 전략은 참고용일 뿐입니다. 실무 능력이 뛰어난 친구는 직접 작성할 수도 있습니다. 그러면 My 언어도 JavaScript 언어와 직접 혼합할 수 있습니다. 다음 코드에 주의하세요.
%% // My语言内JavaScript的标准格式
scope.KAMA = function() {
var r = _C(exchange.GetRecords); // 获取K线数组
if (r.length > 140) { // 过滤K线长度
var kama = talib.KAMA(r, 140); // 调用talib库计算KAMA
return kama[kama.length - 2]; // 返回KAMA的具体数值
}
return;
}
%% // My语言内JavaScript的标准格式
2단계: 거래 조건 계산 및 주문하기
%%
scope.KAMA = function() {
var r = _C(exchange.GetRecords);
if (r.length > 140) {
var kama = talib.KAMA(r, 140);
return kama[kama.length - 2];
}
return;
}
%%
K^^KAMA; // 把KAMA打印到图表上
A:CLOSE; // 把收盘价打印到图表上
K > REF(K, 1) && CLOSE > K,BK; // 开多
K < REF(K, 1) && CLOSE < K,SK; // 开空
K < REF(K, 1) || CLOSE < K,SP; // 平多
K > REF(K, 1) || CLOSE > K,BP; // 平空
3단계: 전략 신호 필터링 방법 설정
%%
scope.KAMA = function() {
var r = _C(exchange.GetRecords);
if (r.length > 140) {
var kama = talib.KAMA(r, 140);
return kama[kama.length - 2];
}
return;
}
%%
K^^KAMA;
A:CLOSE;
K > REF(K, 1) && CLOSE > K,BK;
K < REF(K, 1) && CLOSE < K,SK;
K < REF(K, 1) || CLOSE < K,SP;
K > REF(K, 1) || CLOSE > K,BP;
AUTOFILTER; // 启用一开一平信号过滤机制
실제 거래 환경에 더 가까워지기 위해, 우리는 백테스팅 동안 스트레스 테스트를 수행하기 위해 오픈 및 클로징 포지션에 대해 2점프의 슬리피지를 사용합니다. 테스트 환경은 다음과 같습니다.
테스트 환경
수익 세부 정보
자금 조달 곡선

위의 백테스트 결과를 판단해보면, 이 간단한 KAMA 전략은 정말 기대에 부응했습니다. 2018년 디지털 화폐의 슈퍼 베어 마켓에서도 자본 커브는 큰 반등을 보이지 않았고, 시장은 장기적으로 변동성이 큰 기간이었습니다. 포지션을 앞뒤로 오픈하고 닫으면 불필요한 손실이 발생합니다. 동시에 2019년의 강세장에서도 좋은 성과를 보였습니다.
상품 선물 및 디지털 통화에 적합한 내 언어 기반의 전체 전략 소스 코드를 복사하려면 클릭하세요.
실행에 옮길 수 있는 훌륭한 전략은 반복적인 시행착오를 통해 다듬어졌을 것입니다. 이 글의 전략은 여전히 특정 필터링 조건 추가, 적극적인 이익 실현 및 손절매와 같이 최적화 및 업그레이드할 여지가 많습니다. 조건 등 이동평균선의 한 유형으로서 KAMA는 일반적인 이동평균선의 장단점을 그대로 이어받으며, 동시에 이를 개선했습니다. 예측 불가능한 시장에서는 “최상의 매개변수”가 고정되어 있어도 미래의 시장 상황에 적응하기 어렵습니다. 따라서 추세를 따르고 시장 상황에 따라 변화하는 이 방법이 더 나은 선택일 수 있습니다.