
첫 번째 세대의 CTA 거래 시스템은 1960년대와 1970년대에 등장했습니다. 당시 상품 시장의 강세 추세 덕분에 CTA 전략은 당시 상당한 수익을 달성했습니다. 이 기간 동안 상품 시장의 강세 추세는 2차 세계 대전 이후 지속적인 경제 성장과 경제 인플레이션 상승에 기인합니다. 추세가 강한 시장에서는 간단한 추세 추종 시스템을 사용해 더 나은 수익을 달성할 수 있습니다. 1세대 CTA 시스템은 기본 시장과 종류를 덜 다루었으며, 거래 시스템도 비교적 단순했고, 일반적으로 여러 거래 대상을 추적하는 거래 시스템이었습니다. 이러한 전략은 당시 상품 시장의 동향을 고려하면 효과적이었습니다.
첫 번째 세대 거래 시스템에서 사용된 전략은 이동 평균 시스템(단기 이동 평균이 장기 이동 평균을 넘어설 때 또는 그 반대의 경우와 같은 몇 가지 간단한 필터링 조건 포함)과 같은 현재 익숙한 추세 추종 전략이었습니다. 간단한 추세 추종 전략을 사용하면 거래 대상의 기본 원칙에 따라 추세가 지속되도록 효과적으로 활용할 수 있습니다. 지속적인 경제 성장, 인플레이션, 석유 위기가 이런 현상이 지속되는 이유입니다. 그러나 많은 트레이더가 동일한 전략을 사용하고 기본 원칙이 더 이상 존재하지 않게 되면 1세대 트레이딩 전략은 새로운 환경에 적응하기 위해 발전해야 합니다.
미국 달러와 금의 분리로 인해 1970년대와 1980년대 사이에 금융 선물 시장이 급속히 발전하여 선물 운용 펀드가 통화 시장, 채권 시장, 주가지수 선물, 주식 금융 파생상품을 포함한 많은 선물 시장에 참여할 수 있게 되었습니다. 게다가 정보기술의 발달과 낮은 비용으로 인해 낮 동안에 데이터를 얻는 것이 쉬워졌습니다. CTA 펀드에 유입되는 자본의 양이 늘어나고 경쟁이 심화됨에 따라 CTA 전략은 더욱 복잡해지고 적응력이 높아졌습니다.
위의 시장 특성을 바탕으로, 2세대 CTA 거래 시스템과 전략은 1세대 CTA 전략과 비교하여 다음과 같은 특성을 가지고 있습니다.
거래 주제가 더 다양해졌습니다. 금융선물시장이 추가되어 거래 상품과 시장이 더욱 다양해졌습니다.
거래 전략 측면에서, 2세대 CTA 거래 시스템의 전략은 순수한 추세 추종과 가격 돌파에만 국한되지 않습니다. 다양한 시장을 모니터링하기 위해 더욱 수학적 모델을 적용합니다. 다양한 시장 상황에 따른 추세 추종 전략을 사용할지, 아니면 평균적인 대응 전략을 사용할지. 선물시장에 참여하는 많은 기관의 유동성으로 인해 선물시장의 변동성이 장기간 낮게 유지되었습니다. 이러한 상황에서 기존의 1세대 CTA 시스템은 수익성을 확보하고 시장 변화에 적응하는 데 어려움을 겪습니다. 전략이 중요해집니다.
2세대 CTA 전략은 거래 창과 보유 기간을 활용해 단기 거래를 할 수 있습니다. 1세대 CTA 전략과는 달리 2세대 전략은 단기 및 고빈도 거래를 위해 일중 거래 패턴을 모니터링하기 시작했습니다. 이러한 기능은 재무 데이터의 제공을 더 시기적절하고 빈번하게 만들어 주는 컴퓨터 기술의 발달에서 비롯되었습니다.
3세대 CTA 거래 시스템은 2세대 거래 시스템을 더욱 다양화하고 분산화하며 적응성을 높인 것입니다. 3세대 CTA는 더 많은 시장과 종류를 거래하기 위해 더 많은 거래 시스템을 사용합니다. 전략 측면에서는 수익성이 더 높은 시장 모델을 활용하세요. 이 모든 것은 다양한 시장에서 다양한 모델을 실행한 결과를 바탕으로 합니다.
CTA 전략이 널리 사용되고 시간이 지남에 따라 성숙되었다는 점을 감안할 때, 이는 널리 사용되고 양적 거래자(특히 초보자)가 이해하기를 원하는 고전적인 전략 모델입니다. Inventor Quantitative Platform은 표준 CTA 전략의 클래스 라이브러리를 개발했습니다. 독자가 Inventor Quantitative Platform에 CTA 전략을 적용하고 싶다면, 코드를 복사하거나 이 클래스 라이브러리를 직접 참조하면 됩니다.
확장성도 매우 편리하고, 코드 주석이 매우 명확하고 이해하기 쉽습니다. 심층적인 사용자 정의나 확장을 수행하려면 기존 프레임워크에서 바로 수행할 수 있습니다.
소스 코드의 일부(JavaScript 버전):
function main() {
$.CTA(exchanges[0], 0.01, function(r, mp, pair){ // 第一个参数是要做的交易所对象,第二个参数0.01是交易所要求的最小下单数量,第三个匿名函数function(){...}是回调函数,交易逻辑就写在这个函数中,该回调函数第一个参数r接收最新的K线数据,第二个参数接收持仓数,第三个参数接收交易对名称
if (r.length < 20) { // 判断K线柱数量
return
}
var emaSlow = TA.EMA(r, 20)
var emaFast = TA.EMA(r, 5)
var cross = _Cross(emaFast, emaSlow); // 判断指标相交状态,_Cross参看:https://www.fmz.com/bbs-topic/1140
if (mp <= 0 && cross > 1) {
Log(pair, "买, 金叉周期", cross, "mp:", mp);
return 0.1 * (mp < 0 ? 2 : 1) // 返回的数值就是要开仓的数量,正数是 开多,负数是开空,0是全部平掉。
} else if (mp >= 0 && cross < -1) {
Log(pair, "卖, 死叉周期", cross, "mp:", mp);
return -0.1 * (mp > 0 ? 2 : 1)
}
})
}

더 많은 소스 코드와 전체 라이브러리 콘텐츠를 보려면 https://www.fmz.com/strategy/57267을 방문하세요.