Первое поколение CTA появилось в 1960-х и 1970-х годах. В то время CTA-стратегии получали значительные доходы из-за сильных тенденций на товарных рынках. В это время сильные тенденции на товарных рынках были связаны с устойчивым экономическим ростом и ростом инфляции после Второй мировой войны. Сильные трендовые рынки позволяли простым трендовым системам получать лучшую отдачу.
Стратегии, используемые в торговых системах первого поколения, являются теми, с которыми теперь знакомы стратегии отслеживания тенденций, такие как системы движущихся средней (с некоторыми простыми фильтрационными условиями, например, когда короткие движущиеся средние превышают длительные движущиеся средние или наоборот), одна простая стратегия отслеживания тенденций может эффективно играть роль в продолжении основных тенденций целей торговли. Продолжающийся экономический рост, инфляция и нефтяной кризис являются причинами такого продолжения. Однако, когда многие трейдеры используют те же стратегии, и длительные основные сделки больше не существуют, стратегия первого поколения должна быть разработана для адаптации к новой среде.
Благодаря депонированию доллара и золота, финансовые фьючерсные рынки быстро развивались в 1970-1980 годах, что позволило фьючерсным управляющим фондам участвовать во многих фьючерсных рынках, включая денежный рынок, рынок облигаций, фондовые фьючерсы и фондовые финансовые деривативы. Кроме того, развитие информационных технологий и низкие затраты делают доступ к данным легким в дневное время. Увеличение размера средств в фондах CTA и усиление конкуренции делают стратегии CTA более сложными и адаптивными.
Основываясь на вышеуказанных рыночных характеристиках, вторая генерация CTA торговых систем и стратегий имеет следующие характеристики по сравнению с первой генерацией CTA стратегий:
Темы торговли более разнообразны. Включение финансовых фьючерсных рынков позволяет более разнообразить виды торговли и рынки.
В дополнение к торговым стратегиям, стратегии второй генерации CTA не ограничиваются чисто трендовым отслеживанием и ценовыми прорывами; применение большего количества математических моделей для мониторинга нескольких рынков; использование трендовых отслеживаний в зависимости от различных рыночных условий или среднего отклика; наличие длительных периодов низкой волатильности на рынке фьючерсов из-за многочисленных институтов, участвующих в ликвидности рынка фьючерсов; в этом случае традиционные системы первой генерации CTA затрудняются быть прибыльными и адаптироваться к изменениям рынка. Эта стратегия становится важной.
Стратегия второго поколения CTA позволяет вести краткосрочные сделки в торговых окнах и на время удержания. В отличие от стратегии первого поколения CTA, стратегия второго поколения уже начала контролировать внутридневные торговые модели с краткосрочными и высокочастотными сделками.
Третье поколение 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