양적 거래에서 자산 관리 - 절대 수익을 위한 CTA 전략 개발

저자:리디아, 창작: 2023-02-07 09:58:41, 업데이트: 2023-09-18 20:25:11

img

양적 거래에서 자산 관리 - 절대 수익을 위한 CTA 전략 개발

전문

왜 이 과정에 참여해야 할까요?

이 과정을 통해 무엇을 얻을 수 있습니까? 첫째, 이 과정은 자바스크립트와 파이썬 프로그래밍 언어를 기반으로 합니다. 언어는 단지 기술입니다. 마지막으로, 우리는 이 기술을 산업에 적용해야 합니다. 양적 거래는 현재 급속한 발전 단계에 있는 신흥 산업이며 인재에 대한 큰 수요가 있습니다.

이 코스의 체계적인 학습을 통해 양적 거래 분야에 대한 더 깊은 이해를 할 수 있습니다. 양적 거래 분야에 진출하기 위해 준비 중인 학생이라면 또한 도움이 될 것입니다. 주식 또는 선물 투자 애호가라면 양적 거래는 주관적 거래에 도움이 될 수 있습니다. 거래 전략을 개발함으로써 금융 시장에서 이익을 얻을 수 있으며 투자 및 금융 관리에 대한 채널과 플랫폼을 넓힐 수 있습니다.

그 전에 제 개인적인 거래 경험에 대해 말씀드리겠습니다. 저는 재무 전공이 아니라 통계를 공부했습니다. 처음에는 학창시절부터 주식 거래를 주관적으로 시작했습니다. 나중에 국내 사모펀드 양적 거래 실무자가 되었고, 주로 전략 연구와 전략 개발에 종사했습니다.

나는 10 년 이상이 넘는 시간 동안이 서클에서 거래하고 있으며 다양한 유형의 전략을 개발했습니다. 내 투자 철학은: 위험 통제는 무엇보다 중요하며 절대 수익에 초점을 맞추고 있습니다. 우리의 주제의 주제는: 양적 거래에서 자산 관리 - 절대 수익을위한 CTA 전략 개발.

1. 미래 CTA 전략 돈 벌기 논리

1.1 미래 CTA를 이해

CTA란 무엇인가? CTA는 정확히 무엇인가? CTA는 외국에서 재화 거래 자문가, 중국에서 투자 관리자라고 불린다. 전통적인 CTA는 대다수의 투자자의 자금을 수집하고 전문 투자 기관에 위탁하고 마지막으로 거래 자문가 (CTA) 를 통해 주식 지수 선물, 재화 선물 및 재무 채권 선물에 투자하는 것이다.

그러나 실제로 글로벌 선물 시장의 지속적인 개발과 확장에 따라 CTA의 개념도 확장되고 있으며 그 범위는 전통적인 선물 시장에서 훨씬 뛰어납니다. 선물 시장뿐만 아니라 금리 시장, 주식 시장, 외환 시장 및 옵션 시장에서도 투자 할 수 있습니다. 이 종류에 대한 특정 양의 역사적 데이터가있는 한 이러한 역사적 데이터를 기반으로 대응하는 CTA 전략을 개발 할 수 있습니다.

1980년대 초반에 전자 거래 기술은 아직 성숙하지 않았다. 그 당시 대부분의 거래자들은 윌리엄 지수, KDJ, RSI, MACD, CCI 등 기술 지표를 수동으로 그리는 것으로 재화 선물의 미래 트렌드를 판단했다. 나중에 거래자들은 고객들의 자산을 관리하는 데 도움이 되는 특별한 CTA 펀드를 설립했다. 1980년대에 전자 거래가 대중화 될 때까지 진정한 CTA 펀드가 나타나기 시작했다.

CTA 펀드 관리 규모의 변화

img

수십억 달러

위의 차트를 살펴보자. 특히 양적 거래의 증가와 함께 글로벌 CTA 펀드의 규모는 2005 년 1306 억 달러에서 2015 년 300 억 달러 이상으로 증가했습니다. CTA 전략은 또한 글로벌 헤지 펀드의 주류 투자 전략 중 하나가되었습니다.

크기와 함께 CTA 펀드의 성과도 상승하고 있다. 아래 차트에서 바클레이 CTA 지수를 살펴보자. 바클레이 CTA 지수는 글로벌 재화 거래 자문가의 대표적인 산업 기준이다. 1979년 말부터 2016년 말까지 바클레이 CTA 펀드 지수의 누적 수익률은 28.95배까지, 연간 수익률은 9.59%, 샤프 비율은 0.37, 최대 인출률은 15.66%였다.

자산 할당 포트폴리오에서 CTA 전략은 일반적으로 다른 전략과 매우 낮은 상관관계를 유지하기 때문입니다. 아래의 빨간색 원자리에서 볼 수 있듯이, 2000 년부터 2002 년까지 글로벌 주식 곰 시장과 2008 년 글로벌 서브프라임 위기 동안 Barclay CTA 펀드 지수는 떨어지지 않을뿐만 아니라 긍정적 인 수익을 얻었습니다. 주식 시장과 채권 시장이 위기에 처했을 때 CTA는 강력한 수익을 줄 수있었습니다. 또한 1980 년 이후 Barclay Commodity CTA 지수의 수익 수준이 S&P 500보다 강했으며 철수는 S&P 500보다 훨씬 낮습니다.

img

중국에서의 CTA의 발전은 지난 10 년 동안만 있었지만 그 추진력은 매우 강하다. 이는 주로 국내 상품 선물 거래의 상대적으로 개방된 거래 환경, 거래 자금의 낮은 문턱, 장기 및 단위 양쪽에서 거래하는 마진 시스템의 사용, 낮은 거래 비용, 주식과 비교하여 거래소의 더 고급 기술 구조 및 더 쉬운 시스템 거래로 인해 발생합니다.

2010년 이후 CTA 기금은 주로 개인 기금 형태로 존재해 왔다. 국내 정책에서 기금 특별 계좌의 투자 범위를 점차 개방함에 따라 CTA 기금은 기금 특별 계좌 형태로 존재하기 시작했다. 보다 투명하고 개방적인 운영 방식은 더 많은 투자자가 자산을 할당하는 데 필요한 도구가 되었다.

CTA 전략은 또한 개인 트레이더에 대한 접근성, 자본 한계, 거래 전략의 실행 및 API 연결성 측면에서 다른 거래 전략보다 더 적합합니다. 국내 선물 계약은 매우 작습니다. 예를 들어 옥수수 또는 콩 밀가루는 수천 위안으로 거래 될 수 있으며 자본 한계도 거의 없습니다. 또한, 일부 CTA 전략이 전통적인 기술 분석에서 비롯되기 때문에 다른 전략에 비해 비교적 쉽습니다.

CTA 전략의 설계 과정은 또한 비교적 간단합니다. 먼저 역사적 데이터가 초기 처리되고 그 다음 양적 모델에 입력됩니다. 양적 모델에는 수학적 모델링, 프로그래밍 디자인 및 기타 도구로 형성된 거래 전략이 포함되어 있으며 거래 신호는 이러한 데이터를 계산하고 분석하여 생성됩니다. 물론 실제 개발에서는 위의 차트만큼 간단하지 않습니다. 여기 우리는 단지 전반적인 개념을 제공합니다.

1.2 선물 전략의 종류 CTA 전략

거래 전략의 관점에서, CTA 전략은 또한 다양합니다: 그것은 트렌드 전략 또는 중재 전략이 될 수 있습니다. 그것은 큰 기간 중장기 전략 또는 하루 내 단기 전략이 될 수 있습니다. 전략 논리는 기술적 분석 또는 근본 분석에 기반을두고있을 수 있습니다. 그것은 주관적 거래 또는 시스템 거래가 될 수 있습니다.

CTA 전략은 서로 다른 분류 방법을 가지고 있다. 거래 방식에 따라 주관적인 거래와 시스템 거래로 나눌 수 있다. 해외 CTA 전략의 개발은 상대적으로 진보되어 있으며 시스템 거래의 CTA 전략은 100%에 가깝다. 분석 방식에 따라 기본 분석과 기술 분석으로 나눌 수 있다. 수입 출처에 따라 트렌드 거래와 오시일레이터 거래로 나눌 수 있다.

일반적으로 CTA 전략은 전체 거래 시장의 약 70%를 차지하고, 트렌드 전략은 약 25%를 차지하고, 역 트렌드 또는 트렌드 역전 전략은 약 5%를 차지합니다. 그 중 가장 큰 비율을 가진 트렌드 전략은 포지션 기간에 따라 고주파 거래, 일내 거래, 단기 및 중장기 거래 및 중장기 거래로 나눌 수 있습니다.

고주파 시장 제작 전략

현재 시장에는 두 가지 주류 고주파 거래 전략이 있습니다. 하나는 고주파 시장 제작 전략이며 다른 하나는 고주파 중재 전략입니다. 시장 제작 전략은 거래 시장에서 유동성을 제공하는 것입니다. 즉, 시장 제작자와 거래 시장에서 누군가가 거래를 원한다면 시장 제작자는 자신의 주문이 거래 될 수 있는지 확인해야합니다. 시장에서 유동성이 충분하지 않고 주문이 거래 될 수 없다면 시장 제작자는 상대방의 주문을 구매하거나 판매해야합니다.

고주파 중재 전략

높은 주파수 중재 (high frequency arbitrage) 는 두 개의 고도로 상관관계 있는 주식 또는 ETF와 ETF 포트폴리오의 거래를 말한다. ETF의 계산 방법에 따르면, ETF의 예상 가격을 같은 방식으로 계산할 수 있다. ETF 지수 가격은 가격 차이를 얻기 위해 ETF 예상 가격을 빼기도 한다. 일반적으로 가격 차이는 가격 채널에서 실행된다. 가격 차이는 상부와 하부 채널을 통과하면 가격 차이를 거래하고, 가격 차이의 반환을 기다리고, 수익을 얻을 수 있다.

내일 전략

직역적 의미에서, 하루종일 포지션이 없는 한, 그것은 내일 거래 전략이라고 할 수 있다. 내일 거래의 짧은 보유 기간으로 인해, 시장에 진입한 직후 수익을 창출하고, 시장에서 빠르게 빠져나가는 것은 일반적으로 불가능하다. 따라서, 이 거래 방식은 낮은 시장 위험을 지니고 있다. 그러나, 시장이 짧은 시간 내에 빠르게 변화하기 때문에, 내일 전략은 일반적으로 상인들에게 더 높은 요구 사항을 갖는다.

중장기 전략

이론적으로 보유 기간이 길어질수록 전략적 용량과 위험 수익률이 낮을 것입니다. 특히 기관 거래에서 단기 전략의 제한적 인 용량으로 인해 큰 자금이 짧은 시간 내에 시장에 진출하고 빠져 나갈 수 없기 때문에 더 장기적인 전략이 할당됩니다. 일반적으로 포지션 기간은 며칠과 몇 달 또는 더 길습니다.

CTA 전략 데이터

일반적으로 CTA 전략은 개시 가격, 최고 가격, 최저 가격, 폐쇄 가격, 거래량 등을 포함하는 분, 시간 및 일일 데이터로 연구됩니다. 일부 CTA 전략만이 구매 가격, 판매 가격, 구매량, 판매량 및 L2 데이터의 다른 심도있는 데이터와 같은 Tick 데이터를 사용합니다.

CTA 전략의 기본 아이디어에 관해서는, 우리가 생각하는 첫 번째 것은 전통적인 기술 지표에 기반을두고 있기 때문입니다. 왜냐하면이 분야에서 많은 공공 참조 자료가 있기 때문에 논리는 일반적으로 간단하며, 대부분은 통계적 원칙에 기반합니다. 예를 들어, 우리는 다양한 기술 지표와 익숙합니다. MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV 등.

또한 시장에는 몇 가지 고전적인 거래 모델이 있으며, 이를 참조 및 개선하기 위해 사용할 수 있습니다. 여기에는 여러 이동 평균 조합, 듀얼 트러스트, R-브레이커, 거북이 거래 방법, 그리드 거래 방법 등이 있습니다.

이 모든 것은 전통적인 기술 분석에 기반한 거래 전략이다. 프로세스는 역사적 데이터와 올바른 거래 개념에 따라 확률 이점이있는 요소 또는 거래 조건을 추출하고 시장이 미래에 여전히 그러한 법칙을 가지고있을 것이라고 가정하는 것입니다. 마지막으로, 거래 전략은 코드와 완전히 자동 거래로 실현됩니다. 포지션을 열고, 수익을 멈추고, 손실을 멈추고, 포지션을 증가시키고, 포지션을 줄여서, 일반적으로 수동 개입이 필요하지 않습니다. 사실, 그것은 가격 시간 시리즈의 긍정적 인 자동 상관률 계수를 사용하여 승자를 구매하는 전략입니다.

CTA 전략의 가장 큰 장점은 현재 시장이 상승하거나 하락하는 지에 관계없이 절대 수익을 얻을 수 있다는 것입니다. 특히 시장이 빠르게 변화하거나 시장 추세가 분명히 부드럽을 때 전략의 장점은 분명합니다. 요컨대 추세가 있다면 이익이 있습니다. 그러나 시장이 변동성 상태가 있거나 추세가 분명하지 않은 경우 전략은 높은 지점에서 구매하고 낮은 지점에서 판매하고 손실을 앞뒤로 중단 할 수 있습니다.

1.3 선물 CTA 전략의 이익 원칙

미래에 대한 CTA 전략은 주로 다음과 같은 점 때문에 수익성이 있습니다.

    1. 가격 트렌드에는 반사성이 있다. 항상 트렌드 방식으로 계속된다. 투자자가 가격이 상승하는 것을 관찰하면 트렌드를 따라 구매하게 되고, 결과적으로 가격이 더 상승한다. 가격 하락도 마찬가지다. 투자자들이 더 비합리적이기 때문에 때로는 가격이 비정상적으로 상승하고 비정상적으로 떨어지는 것을 볼 수 있다.
    1. 각 투자자는 이익과 손실의 비율에 대한 비대칭적 인 관용과 위험에 대한 다른 관용을 가지고 있습니다. 대부분의 소매 투자자에게는 더 보수적인 동종 치료법 거래 방법을 선택하는 경향이 있으며 시장은 또한 추세에 더 취약합니다.
    1. 가격의 형성은 거래에 의해 결정된다. 거래가 사람들에 의해 주도되는 것은 사실이지만 인간의 본성은 변경하기가 어렵습니다. 이것이 고정 패턴이 반복되는 이유입니다. 전략은 역사적 데이터 백테스팅에서 효과적이므로 미래에 효과적 일 수 있음을 나타냅니다.

또한 트렌드 트래킹의 거래 특징은 시장이 없을 때 적은 금액을 잃고 시장이 올 때 큰 부를 얻는 것입니다. 그러나 거래를 한 사람들은 시장이 대부분 변동적이며 트렌드 시장이 짧은 시간 내에만 있다는 것을 알고 있습니다. 따라서 트렌드 트래킹 전략은 거래에서 낮은 승률을 가지고 있지만 각 거래의 전체 이익과 손실은 상대적으로 크습니다.

트렌드 추적 전략은 소득의 측면에서 불안정하기 때문에 많은 투자 기관은 포트폴리오를 구축하기 위해 여러 가지 종류와 전략을 사용하며, 이는 또한 일정 양의 역전 전략으로 구성됩니다. 역전 전략은 가격의 시간 계열에서 부정적인 계수와 자동 상관관계입니다. 즉, 높은 판매 및 낮은 취업.

CTA와 전통적인 자산의 상관관계

img

위 차트를 살펴보자. 이론적으로, 다른 스타일 또는 상대적으로 낮은 상관관계를 가진 다양한 전략은 시장 가격의 다양한 변화에 직면했을 때 때로는 동일하고 때로는 다른 거래 신호를 동시에 전달합니다. 여러 수익 곡선이 서로 겹치기 때문에 전체 수익은 상호 보완적이며 수익 곡선이 더 평평해지며 이로 인해 수익의 변동성이 감소합니다.

위의 관점에서, 마스터 전략을 개발하는 것보다 여러 중간 하위 전략을 개발하는 것이 낫다는 결론을 내릴 수 있습니다. 이러한 전략을 제어하는 방법은 무엇입니까? 여기서 우리는 기계 학습의 무작위 숲 알고리즘에서 배울 수 있습니다. 무작위 숲은 독립적인 알고리즘이 아니라 여러 결정 나무를 포함하는 결정 프레임워크입니다. 결정 나무의 하위 전략 위에 있는 부모 전략과 동등합니다. 하위 전략 클러스터는 부모 전략을 통해 조직되고 제어됩니다.

다음으로, 우리는 모 전략을 설계해야 합니다. 우리는 수익률과 안정성을 평가할 수 있습니다. 전체 상품 선물 시장에서 유동성, 수익의 낮은 변동성을 가진 상품 선물 상품 포트폴리오를 스크린하고, 산업 중립 스크리닝을 수행하고, 포트폴리오의 산업 분산을 통해 전체 변동성을 더욱 줄이고, 마지막으로 거래에 대한 시장 가치 일치로 실제 상품 선물 다종 상품 포트폴리오를 구축합니다.

각 품종은 또한 다중 매개 변수 전략으로 구성 될 수 있으며, 백테스트에서 좋은 성능을 가진 매개 변수 조합을 선택할 수 있습니다. 시장 트렌드가 명백할 때, 다중 매개 변수 전략은 일반적으로 지속적으로 수행되며, 이는 포지션을 추가하는 것과 동등합니다. 시장이 변동적인 상황에서, 여러 세트 매개 변수 전략의 성능은 일반적으로 불일치하므로 각각 장기 또는 단위로 위험을 헤지 할 수 있습니다. 이는 포지션을 줄이는 것과 동등합니다. 이는 포트폴리오의 최대 백테스트 비율을 추가로 줄일 수 있으며 전체 수익률을 변하지 않게 유지할 수 있습니다.

2. 클래식 퓨처스 CTA 전략 예

뉴턴이 한 번 말했죠. "내가 다른 사람들보다 더 멀리 볼 수 있다면, 그것은 내가 거인의 어깨에 서 있기 때문입니다".

시장에 공개되어 있는 CTA 전략에는 SMA 전략, 볼링거 밴드 전략, 거북이 거래 규칙, 모멘텀 전략, 중재 전략 등이 포함됩니다. 양적 거래 전략은 하나의 특징을 가지고 있습니다. 즉, 공개되면 천천히 실패합니다. 그러나 이것은 이러한 전략에서 배우고 그 본질을 배우는 데 영향을 미치지 않습니다. 그래서 우리는 거인의 어깨에있는 문제를 해결할 수 있습니다.

2.1 선물 기본 요소 분석 (주류, 기본 차이, 가격)

기본 분석은 단기 가격 추세에 대해 신경 쓸 필요가 없습니다. 가치는 궁극적으로 가격에 반영 될 것으로 믿어집니다. 다양성이 얼마나 가치가 있는지 결정하기 위해 가격의 요인을 분석하는 것이 더 중요합니다. 일반적으로 거대 요인, 다양성 요인 및 기타 요인에서 위에서 아래로 분석 방법을 채택합니다.

img

위의 차트에서 볼 수 있듯이, 원자재 가격에 영향을 미치는 많은 요소들이 있고, 이 데이터는 끊임없이 변화하고 있습니다. 개인 소매 투자자의 능력은 객관적 분석을 말할 것도 없이 이러한 거대한 데이터를 얻는 것을 넘어갑니다.

사실, 재화 선물의 근본 분석은 모든 요인을 분석하는 것이 아닙니다. 우리는 단지 복잡한 정보로부터 규칙을 알아내기 위해 근본 분석의 핵심 요소를 파악할 필요가 있습니다.

거시적 요인

거시경제적 데이터는 복잡하고 변화적입니다. 매일, 모든 순간, 국가 정치, 중앙 은행, 투자 은행, 공식 및 비공식에서 많은 경제 데이터가 발표됩니다. 정치 및 경제 위기 외에도 거시 분석은 대화를위한 좋은 자료이지만 실용적이지 않습니다. 미국의 유명한 기금 관리 전문가 인 피터 린치는 한 번 말했다. "나는 매년 경제 상황을 분석하는 데 15 분 이상 소비하지 않습니다".

다양성 요인

근본적인 분석에서 다양성 분석은 주로 프리미엄과 할인, 수요와 공급의 관계, 재화 재고, 산업 이익 등을 분석하는 것입니다. 재화 선물의 다양성 요인 분석을 마스터하면 대부분의 시장 추세를 판단 할 수 있다고 말할 수 있습니다.

미래에셋대우를 한 친구들은 국내 재화 미래에셋대우를 산업상품과 농업상품으로 간단히 구분할 수 있다는 것을 알고 있습니다. 산업상품과 농업상품의 분석 방법은 다릅니다. 우리는 공급과 수요의 두 측면을 자세히 설명하겠습니다. 산업상품의 경우 공급은 상대적으로 안정적입니다. 주요 기술 돌파구가 없다면 생산 용량이 짧은 기간 내에 크게 변할 가능성이 없습니다. 따라서 산업상품 가격에 영향을 미치는 주요 요인은 수요입니다. 농업상품 수요는 상대적으로 안정적입니다. 장기적으로 농업상품 수요가 변하지만 단기적으로는 농업상품 수요가 안정적으로 유지되는 경향이 있습니다. 따라서 농업상품 가격에 영향을 미치는 주요 요인은 공급입니다.

따라서 경제학의 법칙에 따르면 물품의 가격을 결정하는 것은 결국 수요와 공급의 관계이다. 이론적으로는 수요와 공급의 데이터를 얻을 수 있는 한, 물품의 미래 가격을 결정할 수 있다. 산업용 제품에 대해서는 공급 데이터를 얻는 것이 쉽지만 수요 데이터를 얻는 것은 어렵다. 농산물에 대해서는 수요 데이터를 얻는 것이 쉽지만 공급 데이터를 얻는 것은 어렵다.

사실, 우리는 더 추출할 수 있습니다. 경제 시장에서 공급과 수요의 상호 결과는 재고입니다. 우리는 재고 데이터를 통해 시장 공급과 수요 사이의 관계의 강도를 판단 할 수 있습니다. 재고의 재고가 매우 높다면 시장 공급이 수요보다 크다는 것을 의미하며, 외환 조건이 변하지 않는 전제에서 재화 가격이 감소 할 것입니다. 재고의 재고가 매우 낮다면 시장 수요가 공급보다 크다는 것을 의미하며, 외환 조건이 변하지 않는 전제에서 재화 가격이 증가 할 것입니다.

재화 재고를 분석하는 것 외에도 현장 시장과 선물 시장의 가격 차이를 분석해야 하며, 이를 기본 차이라고도 한다. 선물 가격이 현장 가격보다 크면 선물 프리미엄이라고 부르며, 선물 가격이 현장 가격보다 작으면 선물 할인이라고 부른다. 선물 배달 시스템에 따르면 선물 배달 날짜에 선물 가격은 현장 가격과 같아야 한다.

프리미엄이나 할인 여부와 상관없이 선물 배달 시스템의 제약으로 인해 배송 날짜의 선물 가격은 이론적으로 현장 가격과 같아야합니다. 배달 날짜가 가까워짐에 따라 현장 가격과 선물 가격 모두 일관성이있을 것입니다. 하나는 선물의 현장 반환이며 다른 하나는 선물의 현장 반환입니다.

위의 원리에 따르면, 우리는 재고와 기본 차이를 사용하여 미래 선물 가격을 동시에 결정할 수 있습니다. 재화의 재고가 낮고 선물 가격이 현장 가격보다 훨씬 낮다면, 우리는 현장 시장의 수요가 공급보다 더 많으며, 미래에 현장 가격 증가의 확률이 크다는 판단을 할 수 있습니다. 또한 선물 배달 시스템으로 인해 배송 날짜가 가까워짐에 따라 선물 가격이 상승하고 현장 가격과 같을 것입니다. 미래에 선물 가격 증가의 확률은 더 크습니다.

마지막으로, 우리는 재고와 기본 차이를 통해 미래의 가격의 유력한 방향을 판단하지만, 구매 및 판매의 정확한 포인트가 없기 때문에, 우리는 입력 및 출입의 명확한 신호를 제공하기 위해 기술 분석과 협력해야합니다. 전체 근본 분석의 구조는: 낮은 재고 + 깊은 할인 + 기술 분석 긴 포지션 신호 = 긴 이동; 높은 재고 + 상당한 프리미엄 + 기술 분석 짧은 포지션 신호 = 짧은 이동.

2.2 거북이 무역 규칙

거래 전략에 관해서는 대표적인 거북이 거래 규칙에 대해 이야기해야합니다. 거북이 거래 규칙은 거래 역사상 가장 유명한 실험에서 왔습니다. 재화 투기자 리처드 데니스 (Richard Dennis) 는 훌륭한 거래자가 태어 났는지 훈련되었는지 알고 싶어합니다. 이를 위해 1983 년에 13 명을 모집하고 미래에셋 거래의 기본 개념을 가르쳤습니다. 자신의 거래 방법과 원칙뿐만 아니라. 이 학생들은 거북이이라고 불렸습니다.

이후 4년 동안, 거북이들은 평균 연간 합률 80%를 달성했다. 데니스는 간단한 시스템과 규칙으로, 거래 경험이 거의 없거나 경험이 없는 사람들이 훌륭한 거래자가 될 수 있음을 증명했다. 그러나, 일부 거북이들은 이윤을 위해 웹사이트에서 거북이 거래 규칙을 판매한다. 이러한 행동을 방지하기 위해, 두 명의 원래 거북이인 커티스 퍼스 (Curtis Firth) 와 아서 매독 (Arthur Maddock) 은 웹 사이트에서 거북이 거래 규칙을 대중에게 무료로 제공하기로 결정했다.

진실이 밝혀진 후, 사람들은 거북이 거래 규칙이 최적화된 돈치안 채널을 채택하고 위치 관리에 ATR 지표를 사용한다는 것을 발견했습니다. 수십 년의 역사적 테스트 후에 일반 소매 투자자가 수익을 창출하는 쉬운 거래 방법이되었습니다. 오늘날에도 일부 품종에서 작동합니다.

거북이의 기본 원칙

  • 장점을 익히기: 긍정적인 기대를 가지고 있는 거래 전략을 찾습니다. 왜냐하면 장기적으로는 긍정적인 수익을 창출할 수 있기 때문입니다.
  • 리스크 관리: 리스크를 통제하고 포지션을 유지하십시오. 그렇지 않으면 수익을 내기 위해 하루를 기다릴 수 없습니다.
  • 끈기: 전략 을 흔들리지 않고 실행 하는 것 으로만 체계적 인 결과 를 얻을 수 있다.
  • 간단하고 명확합니다. 장기적으로 보면, 간단한 시스템은 복잡한 시스템보다 더 활력이 있습니다.

그럼 다음으로 거북이 거래 규칙이 뭐라고 하는지 봅시다.

  1. 시장 - 무엇을 사고 팔고, 본질적으로 어떤 시장에서 거래. 거북이는 선물 거래자입니다. 그들은 큰 거래량과 높은 유동성을 가진 시장만을 선택합니다. 왜냐하면 비활성 거래와 함께 시장을 선택하는 것은 출입과 출입의 추가 미끄러짐을 증가시키고 트렌드의 많은 기회를 놓칠 것이기 때문입니다.
  2. 포지션 사이즈 - 얼마나 많이 구매하거나 판매하는 것이 전체 전략의 매우 중요한 부분이며, 일반적으로 대부분의 사람들이 무시하거나 잘못 취급합니다. 거북이 거래 규칙은 ATR, 즉 평균 실제 변동성 지수를 채택하여 오픈 포지션을 계산하고 포지션 신호를 증가시키고 손실 신호를 중지합니다. 이것은 매우 기발한 설계입니다. 원래의 목적은 시장의 절대 변동성을 통해 포지션 크기를 조정하는 것입니다. 시장 변동성이 강할 때 포지션을 줄이고 시장 변동성이 약할 때 포지션을 증가시키는 것입니다. 먼저 공식이: (총자산 * 1%) / ATR입니다. 초기 포지션은 1 유닛입니다. 그 날의 다양성의 감소가 ATR 수준에 도달하더라도 그 날의 손실은 전체 자산의 1% 내에서 제어 될 수 있습니다. 가격이 0.5 유닛으로 상승하면, 긴 포지션은 1 유닛으로 증가합니다. 4 유닛까지.
  3. 시장 진입 - 거북이의 시장 진입은 돈치안 채널을 기반으로합니다. 가격이 첫 20 또는 55 K 라인의 가장 높은 가격 이상으로 상승하면, 시장에 들어가 긴 거리를 갈 것입니다. 가격이 첫 20 또는 55 K 라인의 가장 낮은 가격 아래로 떨어지면, 시장에 들어가 짧은 거리를 갈 것입니다. 신호가 나타나면, 폐쇄 또는 다음 K 라인을 기다리지 않고 거래하기 위해 시장에 들어가십시오.
  4. 스톱 로스 - 장기적으로 손실을 멈추지 않는 거래는 성공하지 않지만 대부분의 거래자는 손실 포지션을 보유하고 시장이 뒤집어질 것으로 기대하며 위험을 감수하려고 노력하고 있습니다. 거북이 규칙은 손실 포지션에서 언제 철회해야하는지 엄격하게 규정합니다. 장기 포지션 주문을 보유하고 가격이 2 유닛으로 떨어지면 장기 포지션은 스톱 로스로 종료됩니다. 단기 포지션 주문을 보유하고 가격이 2 유닛으로 상승하면 단기 포지션은 스톱 로스로 종료됩니다.
  5. 스톱프로프트 - 거북이 규칙에서 스톱프로프트는 많은 부동 수익을 잃는 것을 의미하며, 이는 많은 트레이더들에게도 용납할 수 없는 부분이다. 현재 장기 포지션 오더를 보유하고 가격이 10일 둥치안 채널의 트랙 아래로 떨어지면 모든 장기 오더를 닫는다. 현재 단기 포지션 오더를 보유하고 가격이 10일 둥치안 채널의 트랙 위에 상승하면 모든 단기 포지션을 닫는다.

따라서 우리는 거북이 거래 규칙이 매우 간단하게 보이지만 실제로 거래 시스템의 프로토 타입의 진정한 의미를 형성했다고 볼 수 있습니다. 그것은 전체 거래 시스템의 모든 측면을 다루고 있으며, 거래자가 주관적 인 상상력적 인 결정을 내릴 수있는 공간을 남겨두고 있지 않습니다.

거북이 거래 방법의 가장 큰 장점은 효과적인 거래 방법의 집합을 설정하는 데 도움이되는 것입니다. 그것은 팩 오픈, 동적 스톱 이익 및 스톱 손실, 그리고 시장의 트렌드 다음 전략, 특히 ATR 가치의 사용 및 포지션 관리의 개념의 조합입니다. 물론, 그것은 또한 트렌드 추적 전략, 즉 부동의 이익과 취득과 같은 일반적인 문제를 가지고 있습니다. 승자 구매에서 얻은 모든 부동의 이익이 다음의 급격한 폭락의 물결으로 인해 제거 될 가능성이 있습니다. 일반적인 트렌드에서 매우 강하며 변동적인 시장에서 기대만큼 좋지 않습니다.

3. 미래 CTA 전략을 실제로 개발

3.1 MyLanguage를 기반으로 한 CTA 트렌드 전략의 개발

지난 세기 말, 매우 놀라운 거래 방법이 미국에서 금융 투자 분야에서 지배되기 시작했습니다. 수천 명의 사람들이 연습 한 후, 사람들은이 방법이 효과적이고 큰 실용적 가치를 가지고 있다는 것을 발견했습니다. 동시에 많은 투자 전문가와 전문 거래자들에 의해 인정되었습니다. 지금까지 외환, 금, 주식, 선물, 원유 또는 인덱스 및 채권, 혼돈 운영 방법과 같은 거의 모든 금융 투자 분야에 완벽하게 적용 할 수 있습니다.

혼돈이라는 단어는 원래 우주의 혼돈 상태의 설명을 가리킨다. 그 아이디어는 결과가 불가피하지만 기존의 지식으로 인해 결과를 계산할 수 없기 때문에 계산 자체가 결과를 변화시키고 있기 때문에 최대 또는 최소한의 결과가 마침내 나타날 수 있지만 불가피한 결과가 없습니다. 이것은 거래 시장과 매우 유사합니다. 참가자는 시장을 분석하고 구매하고 판매 할 때 시장도 변경합니다. 시장은 영원한 변동성을 가지고 있습니다. 참가자가 시장의 새로운 형태를 이해하면 시장은 또한 참가자가 인식한다는 것을 이해합니다. 따라서 변동이 발생합니다. 그리고 참가자의 알 수없는 방향으로 변화하는 경향이 있습니다. 참가자가 변화 규칙을 잡지 못하게하는 충분한 지혜가 있습니다. 즉 시장은 안정적이지 않으며 시장의 과거를 이해하는 것은 미래를 나타낼 수 없습니다.

카오스 운영 방법 (Chaos operation method) 은 빌 윌리엄스가 발명한 투자 아이디어, 거래 전략 및 입출 신호의 완전한 집합이다. 현재 세계 많은 투자자들이 시장 거래에 참여하기 위해 카오스 운영을 채택하고 있다. 중국의 금융 시장의 발전이 뒤떨어지고 있으며, 카오스 이론도 비교적 새로운 아이디어이기 때문에, 중국에서 카오스 운영 방법을 연구하는 사람은 거의 없다. 카오스 운영 방법은 높은 보편성을 가진 거래 전략이며 주식, 채권, 선물, 외환, 디지털 통화 등 거의 모든 금융 투자 분야에 적용될 수 있기 때문에, 이 과정은 투자 관심과 수입을 향상시키기 위한 출발점으로 카오스 전략의 단순화된 버전을 사용한다.

이름에서 알 수 있듯이, 혼돈 운영 방법의 이론적 기초는 혼돈 이론이다. 이 이론은 기상학자 에드워드 로렌즈 (Edward Lorenz) 가 제안했다. 이 이론은 20세기 말 가장 위대한 과학적 발견 중 하나입니다. 그는 유명한 "비둘기 효과"를 제시했다. 빌 윌리엄스는 혼돈 이론을 프랙탈 기하학, 비선형 역학 및 기타 학문과 결합하여 금융 투자 분야에 창의적으로 적용하여 매우 효과적인 기술적 분석 지표를 만들었습니다.

전체 카오스 운영 방법은 다섯 가지 주요 차원 (기술 지표) 으로 구성됩니다.

  • 악어

  • 프랙탈

  • 추진력

  • 가속

  • 균형 경선

img

위의 차트를 살펴보자. 알리거터는 프랙탈 기하학과 비선형 역학을 사용하는 균형 선의 집합이다. 그 본질은 기하급수적으로 가중된 이동 평균을 확장하는 것입니다. 이는 일종의 평균 선이지만 계산 방법은 일반적인 평균 선보다 약간 복잡합니다. 다음으로 MyLanguage에서 알리거터를 정의하는 방법을 살펴보자.

// Parameters
N1:=11;
N2:=21;

// Defining the price median
N3:=N1+N2;
N4:=N2+N3;
HL:=(H+L)/2;

// Alligator
Y^^SMA(REF(HL,N3),N4,1);
R:=SMA(REF(HL,N2),N3,1);
G:=SMA(REF(HL,N1),N2,1);

먼저, 우리는 2개의 외부 매개 변수 N1과 N2를 정의하고, 그 다음 외부 매개 변수에 따라 가장 높은 가격과 가장 낮은 가격의 평균 HL를 계산하고, 그 다음 다른 매개 변수와 평균 HL를 계산합니다. 치아에 대해, 그것은 중선의 중간 기간의 평균이며, 턱은 중선의 큰 기간의 평균입니다. 이 전략에서, 우리는 턱을 사용합니다.

카오스 연산 방법에서는 프랙탈 개념이 생생하게 정의된다. 우리는 비유를 할 수 있다: 손바닥을 열고 손가락을 위로 향하고, 중간 손가락은 상부 프랙탈, 왼쪽 작은 손가락과 반지 손가락, 그리고 오른쪽 지문 손가락과 엄지 손가락은 각각 기록이 없는 K선을 나타낸다. 기본 프랙탈은 이 다섯 K선으로 구성된다. 그러면 다음 코드로 프랙탈을 정의할 수 있다:

// Fractal
TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2;
BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2;

TOP:=REF(H,TOP_N);
BOTTOM:=REF(L,BOTTOM_N);

MAX_YRG^^MAX(MAX(Y,R),G); 
MIN_YRG^^MIN(MIN(Y,R),G); 

TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP);
BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

알리거터와 프랙탈 인덱스를 계산한 후, 우리는 이 두 가지 조건에 기반한 간단한 혼돈 연산 전략을 작성하고, 알리거터와 프랙탈 인덱스를 계산하는 기준값으로 기하급수적으로 가중된 이동 평균 선의 그룹을 사용할 수 있습니다. 물론 원래 혼돈 연산 전략은 더 복잡할 것입니다. 코드는 다음과 같습니다:

// If there are no current long position orders and the closing price rises above the upper fractal and the upper fractal is above the alligator, open a long position.
BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1);
// If there are no current short position orders and the closing price falls below the lower fractal and the lower fractal is below the alligator, open a short position.
SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1);

// Long positions are closed if the closing price falls below the jaws of the alligator.
C<Y,SP(BKVOL);
// Short positions are closed if the closing price rises above the jaws of the alligator.
C>Y,BP(SKVOL);

이해하기 쉽게, 나는 코드에 직접 상세한 언급을 썼다. 우리는 단순히 다음과 같이이 전략의 거래 논리를 나열 할 수 있습니다.

  • 롱 오픈 포지션: 현재 롱 포지션 오더가 없으며, 종료 가격은 상위 프랙탈 아래로 올라가고 상위 프랙탈은 알리거터 위에 있습니다.
  • 짧은 오픈 포지션: 현재 짧은 포지션 오더가 없으며, 종료 가격은 하위 프랙탈 밑에 떨어지고, 하위 프랙탈은 알리거터 밑에 있습니다.
  • 롱 클로징 포지션: 클로징 가격이 악어 턱 아래로 떨어지면
  • 마감 포지션: 마감 가격이 악어 턱 이상으로 상승하면

다음으로,이 간단한 혼란 운영 전략 백테스트의 결과가 실제로 어떻게 보이는지 보자. 백테스트를 실제 시장 환경에 더 가깝게 만들기 위해 수수료를 환율의 두 배로 설정하고, 오픈 및 클로징 포지션은 각각 두 점의 슬라이딩 포인트에 적용됩니다. 백테스트 데이터 유형은 리버 인덱스이며, 거래 유형은 리버 주력 연속이며, 고정 1 로트 오픈 위치입니다. 다음은 1 시간 수준에서 예비 백테스트 성능 보고서입니다.

img

자본 곡선 및 백테스트 성과 데이터에서 전략은 잘 수행되었으며 전체 자본 곡선은 꾸준히 상승했습니다. 그러나 2016 년 말부터 장강 품종의 시장 특성은 고 변동성의 일방적 추세에서 광범위한 변동성 추세로 변경되었습니다. 자본 곡선의 관점에서 2017 년부터 현재까지의 이익은 분명히 약합니다.

한 마디로, 혼돈 운영 방법의 본질은 시장이 어떻게 진행되는지 또는 그것이 진실인지 거짓인지 신경쓰지 않고 전환점을 찾는 것입니다. 만약 프랙탈을 뚫면 직접 시장에 들어갈 것입니다. 결코 시장을 예측하려고 시도하지 말고 관찰자와 추종자가 되십시오.

3.2 자바스크립트 언어를 기반으로 한 CTA 중재 전략의 개발

조지 소로스는 1987년에 쓴?? 금융의 화학?? 에서 중요한 주장을 내놓았다. 나는 시장 가격이 미래에 대한 편향된 시각을 제시한다는 점에서 항상 틀린다고 믿는다. 그는 시장 효율성 가설이 이론적인 가설에 불과하다고 믿었다. 실제로 시장 참여자는 항상 합리적이지 않으며, 각 시점에서 참가자는 모든 정보를 완전히 얻고 객관적으로 해석할 수 없다. 게다가, 동일한 정보일지라도 모든 사람들의 피드백은 다르다. 즉, 가격 자체는 이미 시장 참여자의 잘못된 기대를 포함하고 있기 때문에 본질적으로 시장 가격은 항상 틀린다. 이것은 중재자의 이익의 원천일 수 있다.

위의 원칙에 따르면, 비효율적인 선물 시장에서, 다른 기간에 배달 계약에 대한 시장 영향이 항상 동기화되지 않는 이유, 그리고 가격 결정이 완전히 효과적이지 않은 이유를 알 수 있습니다. 그런 다음, 다른 기간에 동일한 거래 대상의 배달 계약 가격에 기초하여, 두 가격 사이에 큰 가격 차이가있는 경우, 우리는 크로스 기간 중재를 위해 다른 기간에 선물 계약을 동시에 구매하고 판매 할 수 있습니다.

재화 선물과 마찬가지로 디지털 화폐는 또한 크로스 기간 중재 계약 포트폴리오를 가지고 있습니다. 예를 들어, OKEX 거래소에서는: ETC 현재 주, ETC 다음 주, ETC 분기 있습니다. 예를 들어, 현재 주 ETC와 ETC 분기 사이의 가격 차이는 오랫동안 약 5에 머물러 있다고 가정하십시오. 가격 차이는 하루 7에 도달하면 가격 차이는 미래에 5로 돌아갈 것으로 예상됩니다. 그 다음 우리는 그 주 ETC를 판매하고 가격 차이를 단축하기 위해 동시에 ETC 분기를 구입할 수 있습니다.

이러한 가격 차이가 존재하지만, 수동 중재에는 시간이 많이 소요되는 수동 작업, 정확도가 떨어지고 가격 변화의 영향으로 인해 많은 불확실성이 있습니다. 양적 중재의 매력은 양적 모델을 통해 중재 기회를 포착하고 중재 거래 전략을 수립하는 데 있으며, 프로그램 된 알고리즘을 통해 거래소에 자동으로 거래 명령을 배치하여 빠르고 정확하게 기회를 포착하고 효율적이고 안정적으로 수익을 창출하는 데 있습니다.

이 코스는 FMZ 퀀트 트레이딩 플랫폼과 OKEX 거래소에서 ETC 선물 계약을 사용하는 방법을 알려줍니다. 간단한 중재 전략으로 즉각적인 중재 기회를 포착하고 매번 볼 수있는 이익을 포착하고 디지털 통화 거래에서 발생할 수있는 위험을 헤지하는 방법을 보여줍니다.

디지털 화폐를 위한 횡단 기간 중재 전략을 만들자어려움: 정상

전략 환경

  • 거래 대상: 이더 클래식 (ETC)
  • 스프레드 데이터: 현재 주 ETC - ETC 분기 (동결합 테스트를 생략)
  • 거래 기간: 5분
  • 거래 기간: 5분
  • 거래 유형: 같은 유형의 크로스 기간

전략 논리

  • 가격 차이로 긴 지점을 개설하는 조건: 현재 계좌에 지점이 없으며 가격 차이가 공의 하단 경계보다 작으면 가격 차이를 길게합니다. 즉, 주간 개설 지점을 구매하고 분기 개설 지점을 판매합니다.
  • 가격 차이에 짧은 지점을 개설하는 조건: 현장 계좌에 지점이 없다면 가격 차이가 공의 상단보다 크다면 가격 차이를 짧게합니다. 즉, 주간 개설 지점을 판매하고, 분기 개설 지점을 구매하십시오.
  • 가격 차이에 따라 긴 포지션을 닫는 조건: 현재 주간에 주류 계좌가 ETC의 긴 주문을 유지하고 ETC 분기에 대한 짧은 주문을 보유하고 있으며 가격 차이가 공의 중간 경계보다 크다면 가격 차이를 닫습니다. 즉, 일주일 동안 ETC의 폐쇄 포지션을 판매하고 분기에 대한 ETC의 폐쇄 포지션을 구매하십시오.
  • 가격 차이를 짧게하는 포지션 폐쇄 조건: 주류 계좌가 현재 주에 ETC의 짧은 주문을 유지하고, ETC 분기에 긴 주문을 유지하고, 가격 차이가 공의 중간 경계보다 작으면 가격 차이를 짧게 닫습니다. 즉, 일주일 동안 ETC를 닫는 포지션을 구입하고, 분기에 ETC를 닫는 포지션을 판매하십시오.

위의 것은 디지털 화폐의 크로스 기간 중재 전략의 간단한 논리적 설명입니다. 그래서 프로그램에 우리의 아이디어를 구현하는 방법? 우리는 FMZ 양자 거래 플랫폼에 프레임워크를 구축하려고합니다.

function Data() {}  // Basic data function
Data.prototype.mp = function () {}  // Position function
Data.prototype.boll = function () {}  // Indicator function
Data.prototype.trade = function () {}  // Order placement function
Data.prototype.cancelOrders = function () {}  // Order withdrawal function
Data.prototype.isEven = function () {}  // Processing single contract function
Data.prototype.drawingChart = function () {}  // Drawing function

function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB);  // Create a basic data object
    var accountStocks = data.accountData.Stocks;  // Account balance
    var boll = data.boll(dataLength, timeCycle);  // Calculate the technical indicators of boll
    data.trade();  // Calculate trading conditions to place an order
    data.cancelOrders();  // Cancel orders
    data.drawingChart(boll);  // Drawing
    data.isEven();  // Processing of holding individual contract
}

//Entry function
function main() {
    while (true) {  // Enter the polling mode
        onTick();  // Execute onTick function
        Sleep(500);  // Sleep for 0.5 seconds
    }
}

우리의 거래 프로세스가 감독 거래에서 어떤지 상상해보십시오. 시스템 거래에는 본질적인 차이가 없습니다. 그것은 데이터를 획득하고 데이터를 계산하고 주문 거래를 배치하고 주문을 배치 한 후 처리하는 것 외에는 없습니다. 프로그램에서도 마찬가지입니다. 첫째, 프로그램은 컨벤션인 20 행에서 주요 기능을 실행합니다. 프로그램이 거래 전략 사전 처리 (이 경우) 를 완료하면 무한 루프 모드 즉 투표 모드에 들어갈 것입니다. 투표 모드에서는 onTick 함수가 반복적으로 실행됩니다.

그리고 onTick 함수에서는 주관적인 거래에서 우리의 거래 과정입니다. 먼저 기본 가격 데이터를 얻고, 그 다음 계좌 잔액을 얻고, 그 다음 인덱스를 계산하고, 그 다음 거래 조건을 계산하고 주문을하고, 마지막으로 주문 취소, 드로잉 및 단일 계약 처리를 포함하여 주문을 할 때 처리합니다.

전략 프레임워크는 전략 아이디어와 거래 프로세스에 따라 쉽게 설정 될 수 있습니다. 전체 전략은 세 단계로 단순화 될 수 있습니다.

  • 거래 전에 사전 처리.
  • 데이터를 수집하고 계산합니다.
  • 주문하고 나중에 처리해

다음으로, 우리는 실제 거래 과정과 거래 세부 사항에 따라 전략 프레임워크에 필요한 세부 코드를 작성해야합니다.

I. 거래 전 사전 처리

1. 글로벌 범위에서 필요한 글로벌 변수를 선언합니다.

  • 구성 차트에 대한 차트 객체를 선언
var chart = {}
  • 차트 함수를 호출하고 차트를 초기화
var ObjChart = Chart ( chart )
  • 가격 차이 시리즈를 저장하기 위해 빈 배열을 선언
var bars = []
  • 기록 역사 데이터 시간표 변수를 선언
var oldTime = 0

2. 전략의 외부 매개 변수를 구성합니다.

var tradeTypeA = "this_week"; // Arbitrage A Contract
var tradeTypeB = "quarter"; // Arbitrage B Contract
var dataLength = 10; // Indicator period length
var timeCycle = 1; // K-line period
var name = "ETC"; // Currencies
var unit = 1; // Order quantity

3. 데이터 처리 기능을 정의

  • 기본 데이터 함수: 데이터 생성자, 데이터, 및 내부 속성을 정의합니다. 포함: 계정 데이터, 위치 데이터, K-라인 데이터 시간표, 중재 A / B 계약의 구매 / 판매 가격, 그리고 긍정적 / 부정적인 중재 가격 차이.
function Data(tradeTypeA, tradeTypeB) { // Pass in arbitrage A contract and arbitrage B contract
    this.accountData = _C(exchange.GetAccount); // Get account information
    this.positionData = _C(exchange.GetPosition); // Get position information
    var recordsData = _C(exchange.GetRecords); // Get K-line data
    exchange.SetContractType(tradeTypeA); // Subscription arbitrage A contract
    var depthDataA = _C(exchange.GetDepth); // Depth data of arbitrage A contract
    exchange.SetContractType(tradeTypeB); // Subscription arbitrage B contract
    var depthDataB = _C(exchange.GetDepth); // Depth data of arbitrage B contract
    this.time = recordsData[recordsData.length - 1].Time; // Time of obtaining the latest data
    this.askA = depthDataA.Asks[0].Price; // Sell one price of Arbitrage A contract
    this.bidA = depthDataA.Bids[0].Price; // Buy one price of Arbitrage A contract
    this.askB = depthDataB.Asks[0].Price; // Sell one price of Arbitrage B contract
    this.bidB = depthDataB.Bids[0].Price; // Buy one price of Arbitrage B contract
    // Positive arbitrage price differences (Sell one price of contract A - Buy one price of contract B)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // Negative arbitrage price differences (Buy one price of contract A - Sell one price of contract B)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
  • 위치 함수를 얻으십시오: mp ()) 전체 위치 배열을 가로질러 지정된 계약 및 방향의 위치 양을 반환합니다. 그렇지 않으면 거짓을 반환합니다.
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // Get position information
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}
  • K선 및 표시기 기능: boll ((() 새로운 K-라인 염기서열은 긍정적 인 중재 / 부정적 중재 가격 차이 데이터에 따라 합성됩니다. 볼 표시기로 계산된 상단 트랙, 중단 트랙 및 하단 트랙의 데이터가 반환됩니다.
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // Temporary objects
    // Median value of positive arbitrage price difference and negative arbitrage price difference
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // Compare two depth data timestamps
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // Pass in the price difference data object into the K-line array according to the specified time period
    if (bars.length > num * 2) {
        bars.shift(); // Control the length of the K-line array
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // Call the boll indicator in the talib library
    return {
        up: boll[0][boll[0].length - 1], // boll indicator upper track
        middle: boll[1][boll[1].length - 1], // boll indicator middle track
        down: boll[2][boll[2].length - 1] // boll indicator down track
    } // Return a processed boll indicator data
}
  • 오더 기능: 거래 주문 계약 이름과 주문 유형을 입력 하 고, 그 다음 대조로 주문을 배치 하 고, 주문을 배치 한 후 결과를 반환 합니다. 동시에 다른 방향으로 두 주문을 배치 할 필요가 있기 때문에, 구매 / 판매 한 가격은 주문의 계약 이름에 따라 함수 내에서 변환 됩니다.
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // Resubscribe to a contract before placing an order
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // If the order is placed in contract A
        askPrice = this.askA; // set askPrice
        bidPrice = this.bidA; // set bidPrice
    } else if (tradeType == tradeTypeB) { // If the order is placed in contract B
        askPrice = this.askB; // set askPrice
        bidPrice = this.bidB; // set bidPrice
    }
    switch (type) { // Match order placement mode
        case "buy":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}
  • 주문 취소 기능: 주문 취소() 모든 미수 주문을 배열하고 하나씩 취소합니다. 또한, 미수 주문이 있으면 거짓이 반환되고, 미수 주문이 없다면 진실이 반환됩니다.
Data.prototype.cancelOrders = function () {
    Sleep(500); // Delay before cancellation, because some exchanges, you know what I mean
    var orders = _C(exchange.GetOrders); // Get an array of unfilled orders
    if (orders.length > 0) { // If there are unfilled orders
        for (var i = 0; i < orders.length; i++) { // Iterate through the array of unfilled orders
            exchange.CancelOrder(orders[i].Id); // Cancel unfilled orders one by one
            Sleep(500); // Delay 0.5 seconds
        }
        return false; // Return false if an unfilled order is cancelled
    }
    return true; // Return true if there are no unfilled orders
}
  • 단일 계약을 보유하는 핸들: isEven ((() 중재 거래의 단일 다리의 경우, 우리는 단순히 모든 포지션을 닫을 것입니다. 물론, 그것은 또한 추적 방법에 변경 될 수 있습니다.
Data.prototype.isEven = function () {
    var positionData = this.positionData; // Get position information
    var type = null; // Switch position direction
    // If the remaining 2 of the position array length is not equal to 0 or the position array length is not equal to 2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // Iterate through the position array
            if (positionData[i].Type == 0) { // If it is a long order
                type = 10; // Set order parameters
            } else if (positionData[i].Type == 1) { // If it is a short order
                type = -10; // Set order parameters
            }
            // Close all positions
            this.trade(positionData[i].ContractType, type, positionData[i].Amount);
        }
    }
}
  • 도면 함수: 도면 도표 ()) ObjChart Add () 방법을 호출하고, 그래프에 필요한 시장 데이터와 지표 데이터를 그리십시오: 상단 트랙, 중단 트랙, 하단 트랙, 긍정적 / 부정적인 중재 가격 차이.
Data.prototype.drawingChart = function (boll) {
    var nowTime = new Date().getTime();
    ObjChart.add([0, [nowTime, boll.up]]);
    ObjChart.add([1, [nowTime, boll.middle]]);
    ObjChart.add([2, [nowTime, boll.down]]);
    ObjChart.add([3

관련

더 많은