[TOC]
이름 그대로 적응평균 (KAMA) 은 이동평균 (Moving Average) 의 범주에 속하지만, 전통적인 이동평균과는 매우 똑똑하다는 점이 다르다. 우리는 일반적인 평균이 많은 단점을 가지고 있다는 것을 알고 있습니다. 예를 들어: 짧은 평균은 가격 움직임에 가깝고 매우 민감하지만 잘못된 신호를 쉽게 생성합니다. 장기 평균은 추세 판단에 매우 정확하지만 종종 시장이 한 단계 지나서 반응합니다.
카마의 현명한 특징은 현재 시장 상태, 즉 변동률에 따라 주파수 감수성으로부터 조정할 수 있다는 것이다. 이 현상은: 불안정한 시장에서 카마의 변화는 현저히 느려지고, 추세가 올 때 빠르게 반응한다는 것이다. 실제 시장에서는 하루의 잡음이 발생하는 거래 비용을 줄이고, 시장에서 출발하고, 당시에 탑승할 수 있다는 것이다.
이 중 n,n1,n2는 주기 매개 변수이며, 기본적으로 n주기수는 10이고,n1은 단기주기수이고,n2는 긴기주기수이다. 이것은 KAMA의 저자 페리 카우프만이 확인한 일련의 매개 변수이기도 하다. n은 방향과 기동율 계산의 효율성을 위해 사용되며,n1과 n2는 빠른 평균선과 느린 평균선의 주기수이며, 이론적으로 n1의 매개 변수가 커질수록 KAMA는 더 부드럽다.
KAMA의 계산 방법은 다음과 같다: 먼저 방향 (DIR) 과 변동률 (VIR) 을 계산하고, 그 다음 두 가지의 비율로 효율을 계산한다. 효율 (ER) 은 가격의 변화를 측정하는 정도이며 계산 방법은 간단하다. 계산 결과는 0 ~ 1 사이이며, ER 값이 0에 가까워지면 시장이 불안정 상태에 있으며, ER 값이 1에 가까워지면 시장이 트렌드 상태에 있음을 나타냅니다.
효율을 계산할 때 ER는 빠른 평균선과 느린 평균선을 결합하여 평평한 상수를 추론할 수 있다: 효율 * (빠른 - 느린 속도) + 느린 속도. CS는 트렌드 실행 속도를 나타냅니다.
그 다음 평평한 제곱에 대한 계수 (CQ) 를 계산하여 느린 주기 매개 변수가 계산에 더 중요한 역할을 할 수 있도록 하는 것이 더 보수적인 방법이다. KAMA의 최종 평평도는 계수 (CQ) 에 의해 결정되며, KAMA의 계산에서 계수 (CQ) 는 마지막 두 번의 평평한 평평의 주기 매개 변수를 결정합니다. 즉: 지수와 가중화 된 평균 (동동적 이동 평균) (폐기 가격, 계수), 2)
비록 KAMA의 계산 방법은 매우 복잡하지만, 사용 방법은 일반적인 평균선과 비슷하며, 실제 응용에서는 시장의 움직임을 판단할 뿐만 아니라 정확한 매각점을 사용 할 수 있습니다. 매우 똑똑하기 때문에 많은 거래 전략, 심지어 디지털 통화에서도 시도 할 가치가 있습니다.
첫 번째 단계: KAMA를 계산합니다.주의! 왼쪽 상단에서 프로그래밍 언어를 선택하세요:My语言
▲태리브 라이브러리에는 이미 KAMA가 준비되어 있지만 외부 변수 ((n) 주기가 하나뿐이며, n1과 n2는 2와 30을 기본으로 설정되어 있습니다. ▲ 이 문서의 전략은
%% // 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的标准格式
두 번째 단계: 거래 조건을 계산하고 주문합니다.
%%
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; // 平空
세 번째 단계: 전략 신호 필터링을 설정합니다.
%%
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의 쇠시장에서도 좋은 성과를 거두었습니다.
My 언어에 기반하여 상품 선물 및 디지털 화폐에 적용되는 전체 전략 소스코드를 클릭하여 복사하십시오.
좋은 실전화 전략은 천만 번의 숙련을 거쳐야 한다. 이 글의 전략에는 특정 필터링 조건, 주도적인 스톱?? 스톱 손실 조건 등을 추가하는 등 최적화 할 수 있는 많은 공간이 있다. 평형의 한 종류로서, KAMA는 일반적인 평형의 장단점을 계승하고 동시에 상승을 진행한다. 변동이 불규칙한 시장에서, 가장 좋은 매개 변수를 고정하는 것도 미래 시장에 적응하는 것이 어렵기 때문에, 이러한 무작위적이고, 무작위적인 시장 변화의 변화는 더 나은 선택이 될 수도 있다.
xaifer48신님, 제발, 카마의 마지막 단계의 코드를 어떻게 써요? KAMA = 지수중량 평균 (동동적인 이동 평균 (폐기 가격, 계수), 2) 는 이것입니다. 저는 검색을 한 번 해봤습니다. 어떤 것은 KAMA = 이전 KAMA + 계수 * (현재 가격 - 이전 KAMA) 라고 쓰여 있습니다. 문제는 첫 번째 KAMA의 값을 계산할 때 가장 먼저 시작했을 때,