CTA取引システムの最初の世代は1960年代と1970年代に登場した.当時の商品市場の強いトレンドにより,CTA戦略はかなりの利益を得た.この時期の商品市場の強いトレンドは,第二次世界大戦後の持続的な経済成長と上昇する経済インフレに起因する.強力なトレンド市場は,より良いリターンを達成するための単純なトレンド追跡システムを可能にする.最初の世代のCTAシステムは,より少ない基本的な市場と品種に対処し,取引システムは比較的シンプルで,通常は複数の取引目標を追跡する取引システムである.当時の商品市場のトレンドのために,この戦略はうまく機能した.
第1世代の取引システムで使用される戦略は,現在トレンドトラッキング戦略に慣れているもの,例えば移動平均システム (短期移動平均が長期移動平均を上回る時やその逆など,いくつかの単純なフィルタリング条件を含む).単純なトレンドトラッキング戦略は,取引目標ファンドメンタルの継続的なトレンドを効果的にプレイすることができます.持続的な経済成長,インフレ,石油危機はこの持続の理由です.しかし,多くのトレーダーは同じ戦略を使用し,ファンドメンタルは引き続き存在する場合,新しい環境に適応するために第一世代の取引戦略を開発する必要があります.
金融先物市場は,1970年から1980年にかけて急速に発展し,通貨市場,債券市場,株式指数先物および株式金融衍生品を含む多くの先物市場に参加することを可能にした.また,情報技術の発展と低コストにより,昼間データを取得することが容易になった.CTA基金に入る資金の規模の増加と競争の増加により,CTA戦略はより複雑で適応可能になった.
上記の市場特性を踏まえ,第2世代のCTA取引システムと戦略は,第1世代のCTA戦略と比較して以下の特徴を有する.
金融先物市場への参入により,取引の種類と市場がより多様化しました.
取引戦略に関しては,第2世代CTA取引システムの戦略は純粋なトレンド追跡と価格突破に限定されない.複数の市場を監視するために,より多くの数学モデルを適用する.異なる市場条件または平均応答戦略に従ってトレンド追跡を使用するかどうか.多くの機関が先物市場の流動性に参加しているため,先物市場の継続的な低変動期も発生した.この場合,伝統的な第一世代のCTAシステムは利益を得たり,市場の変化に適応することは困難です.この戦略は重要になります.
2代目のCTA戦略は,取引ウィンドウと保持時間で短期取引を行うことができます. 1代目のCTA戦略とは異なり, 2代目の戦略は,短期および高周波取引の日中取引パターンを監視し始めています.この特徴は,コンピュータ技術の発展から生じ,金融データの提供をより迅速かつ頻繁にします.
第3世代のCTA取引システムは,第2世代の取引システムのさらなる多様化,分散化および適応性である.第3世代のCTAは,より多くの市場と品種を取引するためにより多くの取引システムを使用する.戦略の観点から,より収益性の高い市場モデルを使用する.これらすべては,複数の市場で動作する複数のモデルの組み合わせに基づいている.
CTA戦略の広範な適用とCTA戦略の成熟度により,大量に接触され,多くの量的なトレーダー (特に初心者) が理解したいと考えられるクラシックな戦略モデルである.FMZ Quantプラットフォームは,標準的なCTA戦略クラスライブラリを非常に早く開発した.読者がFMZ QuantプラットフォームでCTA戦略を適用したい場合は,コードをコピーするか,クラスライブラリを直接参照することができます.
拡張性も非常に便利です. コードコメントは非常に明確で理解しやすいです. 詳細なカスタマイズや拡張をしたい場合は,既存のフレームワークで直接行うだけです.
ソースコードの一部 (JavaScriptバージョン):
function main() {
$.CTA(exchanges[0], 0.01, function(r, mp, pair){ // The first parameter is the exchange object to be done, the second parameter 0.01 is the minimum order quantity required by the exchange, the third anonymous function function() {...} is the callback function, and the trading logic is written in the function. The first parameter r of the callback function receives the latest K-line data, the second parameter receives the number of positions, and the third parameter receives the name of the trading pair.
if (r.length < 20) { // Determine the number of K-line bars
return
}
var emaSlow = TA.EMA(r, 20)
var emaFast = TA.EMA(r, 5)
var cross = _Cross(emaFast, emaSlow); // To determine the intersection status of indicators, for _Cross, please refer to: https://www.fmz.com/bbs-topic/9116
if (mp <= 0 && cross > 1) {
Log(pair, "Buy, Golden Cross period", cross, "mp:", mp);
return 0.1 * (mp < 0 ? 2 : 1) // The value returned is the number of positions to be opened, a positive number is to open a long position, a negative number is to open a short position, and 0 is to close all positions.
} else if (mp >= 0 && cross < -1) {
Log(pair, "Sell, Bearish Crossover period", cross, "mp:", mp);
return -0.1 * (mp > 0 ? 2 : 1)
}
})
}
ソースコードとクラスライブラリに関する詳細については,以下を参照してください:https://www.fmz.com/strategy/57267.