第1世代のCTA取引システムは,1960年代と1970年代に登場した.CTA戦略は,当時の商品市場の強いトレンドにより,当時相当な利益を得ていた.この時期の商品市場の強いトレンドは,第二次世界大戦後の継続的な経済成長とインフレに起因した.強いトレンド市場は,シンプルなトレンドトラッキングシステムによりより良い収益を得ることを許した.第1世代のCTAシステムは,基本的な市場や品種を少々処理し,取引システムは比較的シンプルで,通常複数の取引目標を追求する取引システムであった.当時の商品市場のトレンドにより,この戦略はうまく機能した.
1世代取引システムで使用される戦略は,現在慣れているトレンド追跡戦略である移動平均システム (短期の移動平均線が長期移動平均線を上回る時,またはその逆の場合など,いくつかの単純なフィルタリング条件を加え) のような戦略である. 1世代トレンド追跡戦略は,取引目標の基本的継続的な傾向を効果的に発揮することができる. 継続的な経済成長,インフレ,そして石油危機がこの持続性背後にある理由である. しかし,多くのトレーダーが同じ戦略を使用し,基本的継続的な取引がもはや存在しないとき, 1世代戦略は,新しい環境に適応するために開発する必要があります.
ドルと黄金の脱
上記の市場特性を基に,第2世代CTA取引システムと戦略は,第1世代CTA戦略と比較して以下の特徴を有する.
取引のテーマはより多様である.金融先物市場の加入により取引の種類と市場はより多様化している.
取引戦略の上に,第2世代CTA取引システムの戦略は,純粋なトレンド追跡と価格突破に限定されない.複数の市場をモニターするためにより多くの数学モデルを使用する.異なる市場条件または平均応答戦略に基づいてトレンド追跡を使用するかどうか.多くの機関がフューチャー市場の流動性に関与しているため,フューチャー市場の持続的な低波動期も発生している.この状況では,従来の第1世代CTAシステムは,収益性を持ち,市場の変化に適応するのが困難である.この戦略は重要になる.
CTAの第2世代戦略は,取引窓と保持時間において短期取引を行うことができる.第1世代のCTA戦略とは異なり,第2世代の戦略は,短期および高周波取引の日中取引パターンを監視し始めている.この特徴は,コンピュータ技術の進歩によって生じ,金融データの提供がより迅速かつ頻繁になる.
第3世代CTA取引システムは,第2世代取引システムのさらなる多様化,分散性,および適応性を有するものである. 第3世代CTAは,より多くの取引システムを利用し,より多くの市場と品種を取引する. 戦略的には,より有利な市場モデルを使用する. これらはすべて,複数のモデルを組み合わせて複数の市場で運用する.
CTA戦略の応用が広まり,時間とともに沉着し,非常に成熟し,多くのトレーダーが広く接触し,理解したいという古典的な戦略モデル (特に初心者のために) を広めるため,発明者定量化プラットフォームは,標準的なCTA戦略のクラスバックリを早々に開発し,読者が発明者定量化プラットフォームで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