Что вы получите, пройдя этот курс? Во-первых, этот курс основан на языках программирования JavaScript и Python. Язык - это только технология. Наконец, мы должны применить эту технологию к отрасли. Количественная торговля - это развивающаяся отрасль, которая в настоящее время находится на стадии быстрого развития и имеет большой спрос на таланты.
Благодаря систематическому изучению этого курса вы можете получить более глубокое понимание области количественной торговли. Если вы студент, готовящийся вступить в сферу количественной торговли, это также поможет вам. Если вы являетесь энтузиастом по инвестициям в акции или фьючерсы, то количественная торговля может помочь вашей субъективной торговле. Развивая торговые стратегии, вы можете получить прибыль на финансовом рынке, а также расширить каналы и платформы для ваших инвестиций и финансового управления.
До этого позвольте мне рассказать о моем личном опыте торговли. Я не специализируюсь на финансах, я изучал статистику. Сначала я начал торговать акциями субъективно в школьные годы. Позже я стал количественным трейдером отечественных фондов частного капитала, в основном занимающимся исследованием стратегии и разработкой стратегии.
Я торгую в этом кругу уже более десяти лет, и разработал различные типы стратегий. Моя инвестиционная философия заключается в том, что контроль рисков превыше всего и фокусируется на абсолютной доходности. Тема нашей темы: от количественной торговли до управления активами - разработка стратегии CTA для абсолютной доходности.
Кто-то может спросить, что такое CTA? Что именно такое CTA? CTA называют консультантами по торговле товарами в зарубежных странах и инвестиционным менеджером в Китае. Традиционный CTA заключается в сборе средств большинства инвесторов, а затем вверении их профессиональным инвестиционным учреждениям и, наконец, инвестировании в фьючерсы на фондовые индексы, фьючерсы на товары и фьючерсы на казначейские облигации через торговых консультантов (то есть CTA).
Но на самом деле, с непрерывным развитием и расширением глобального фьючерсного рынка, концепция CTA также расширяется, и ее объем далеко выходит за рамки традиционных фьючерсов. Она может инвестировать не только на фьючерсном рынке, но и на рынке процентных ставок, фондовом рынке, валютном рынке и опционном рынке. Пока существует определенное количество исторических данных для этого сорта, она может разработать соответствующие стратегии CTA на основе этих исторических данных.
Еще в 1980-х годах технология электронной торговли не была зрелой. В то время большинство трейдеров судили о будущем тренде товарных фьючерсов, рисуя технические индикаторы вручную, такие как индекс Уильяма, KDJ, RSI, MACD, CCI и т. Д. Позже трейдеры создали специальный фонд CTA, чтобы помочь клиентам управлять активами. Только после популяризации электронной торговли в 1980-х годах начал появляться настоящий фонд CTA.
Изменения в размере управления фондами CTA
В миллиардах долларов
Особенно с ростом количественной торговли масштаб глобальных фондов CTA увеличился с 130,6 миллиардов долларов США в 2005 году до более чем 300 миллиардов долларов США в 2015 году.
По мере роста показателей увеличиваются и показатели CTA. Давайте посмотрим на индекс Barclays CTA в таблице ниже. Индекс Barclay CTA является представительным отраслевым эталоном для глобальных консультантов по торговле сырьевыми товарами. С конца 1979 года по конец 2016 года суммарная доходность индекса Barclay CTA Fund составила до 28,95 раза, годовая доходность составила 9,59%, коэффициент Sharp составил 0,37, а максимальный вывод составил 15,66%.
Поскольку в портфеле распределения активов стратегия CTA обычно поддерживает очень низкую корреляцию с другими стратегиями. Как показано в красном круге ниже, во время глобального медвежьего рынка акций с 2000 по 2002 год и глобального субприм-кризиса в 2008 году индекс фонда Barclay CTA не только не упал, но и достиг положительной доходности. Когда фондовый рынок и рынок облигаций находились в кризисе, CTA мог обеспечить сильную доходность. Кроме того, мы можем видеть, что уровень прибыли индекса Barclay Commodity CTA с 1980 года был сильнее, чем S&P 500, а вывод также намного ниже, чем S&P 500.
Развитие CTA в Китае было только за последние десять лет, но импульс очень силен. Это в основном связано с относительно открытой торговой средой внутренних товарных фьючерсов, низким порогом торговых фондов, использованием системы маржи для торговли как на длинных, так и на коротких позициях, низкими затратами на транзакции, более продвинутой технической структурой биржи по сравнению с акциями и более легкой системой торговли.
С 2010 года фонды CTA в основном существовали в виде частных фондов. С постепенным открытием инвестиционного поля специального счета фонда в внутренней политике, фонды CTA начали существовать в виде специального счета фонда.
Стратегии CTA также более подходящие для индивидуальных трейдеров, чем другие торговые стратегии с точки зрения простоты входа, порога капитала, выполнения торговых стратегий и подключения API.
Процесс разработки стратегии CTA также относительно прост. Во-первых, исторические данные сначала обрабатываются, а затем вводятся в количественную модель. Количественная модель включает в себя торговую стратегию, сформированную математическим моделированием, дизайном программирования и другими инструментами, и торговый сигнал генерируется путем вычисления и анализа этих данных. Конечно, в фактическом развитии это не так просто, как вышеприведенная диаграмма. Здесь мы просто даем вам общую концепцию.
С точки зрения торговой стратегии, стратегия CTA также диверсифицирована: это может быть стратегия тренда или стратегия арбитража; Это может быть крупносрочная средне- и долгосрочная стратегия, или краткосрочная стратегия внутридневная; Логика стратегии может основываться на техническом анализе или фундаментальном анализе; Это может быть субъективная транзакция или системная транзакция.
Стратегия CTA имеет различные методы классификации. Согласно методу транзакции, она может быть разделена на субъективную транзакцию и системную транзакцию. Развитие зарубежной стратегии CTA относительно продвинуто, и стратегия CTA системной транзакции была близка к 100%. Согласно методу анализа, она может быть разделена на базовый анализ и технический анализ. Согласно источнику дохода, она может быть разделена на трендовую торговлю и осцилляционную торговлю.
В целом, на стратегию CTA приходится около 70% от общего рынка торговли, на стратегию тренда - около 25%, а на стратегию контр-тренда или обратного тренда - около 5%. Среди них стратегию тренда с наибольшей долей можно разделить на высокочастотную торговлю, внутридневную торговлю, краткосрочную и среднесрочную торговлю и среднесрочную и долгосрочную торговлю в зависимости от периода позиции.
В настоящее время на рынке существуют две основные стратегии высокочастотного трейдинга: одна - стратегия высокочастотного рыночного трейдинга, другая - стратегия высокочастотного арбитража. Стратегия рыночного трейдинга заключается в обеспечении ликвидности на торговом рынке. То есть на торговом рынке с маркет-мейкером, если кто-то хочет торговать, маркет-мейкер должен обеспечить, чтобы его ордер можно было торговать. Если на рынке недостаточно ликвидности, и ордер не может торговаться, маркет-мейкер должен купить или продать ордер контрагента.
Высокочастотный арбитраж относится к торговле двумя высококоррелированными акциями или портфелем ETF и ETF. Согласно методу расчета ETF, ожидаемая цена ETF может быть рассчитана таким же образом. Цена индекса ETF может вычесть ожидаемую цену ETF, чтобы получить разницу в цене. Обычно разница в цене будет работать в ценовом канале. Если разница в цене проходит через верхний и нижний каналы, вы можете торговать ценовой разницей, ждать возврата ценовой разницы и зарабатывать на ней доход.
В буквальном смысле, до тех пор, пока нет позиции на ночь, она может называться внутридневная торговая стратегия. Из-за короткого периода хранения внутридневного трейдинга, обычно невозможно получить прибыль сразу после входа на рынок, а затем быстро покинуть рынок. Поэтому этот режим торговли несет низкий рыночный риск. Однако, поскольку рынок быстро меняется за короткий промежуток времени, внутридневная стратегия обычно имеет более высокие требования к трейдерам.
Теоретически, чем длиннее период хранения, тем больше стратегическая способность и тем ниже соотношение риск-доходность. Особенно в институциональных операциях из-за ограниченной возможности краткосрочных стратегий большие фонды не могут выходить и выходить с рынка за короткий промежуток времени, будут выделены более долгосрочные стратегии. Как правило, период позиции составляет несколько дней и месяцев или даже дольше.
Как правило, стратегия CTA изучается с помощью минутных, часовых и ежедневных данных, которые включают в себя: цену открытия, самую высокую цену, самую низкую цену, цену закрытия, объем торгов и т. Д. Только несколько стратегий CTA будут использовать данные Tick, такие как цена покупки, цена продажи, объем покупки, объем продажи и другие подробные данные в данных L2.
Что касается основной идеи стратегии CTA, то первое, о чем мы думаем, это основанные на традиционных технических показателях, потому что в этой области существует много общедоступных справочных материалов, а логика обычно простая, большинство из которых основаны на статистических принципах.
На рынке также есть некоторые классические модели торговли, которые также могут быть использованы в качестве ссылки и улучшены, в том числе: множественная комбинация скользящих средних, DualThrust, R-Breaker, метод торговли Turtle, метод торговли сеткой и т. Д.
Все это торговые стратегии, основанные на традиционном техническом анализе. Процесс заключается в извлечении факторов или условий торговли с вероятностными преимуществами в соответствии с историческими данными и правильными торговыми концепциями, и предполагает, что рынок все еще будет иметь такие законы в будущем. Наконец, торговая стратегия реализуется с помощью кода и полностью автоматической торговли. Открыть позиции, остановить прибыль, остановить убытки, увеличить позиции, уменьшить позиции и т. Д., Которые, как правило, не требуют ручного вмешательства. На самом деле, это стратегия покупки победителей с использованием положительного коэффициента автокорреляции временных рядов цен.
Самое большое преимущество стратегии CTA заключается в том, что независимо от того, растет ли текущий рынок или падает, он может получить абсолютную доходность, особенно когда рынок быстро меняется, или тенденция рынка очевидно плавная, преимущество стратегии очевидно, короче говоря, если есть тенденция, есть прибыль. Однако, если рынок находится в волатильной ситуации или тенденция не очевидна, стратегия может покупать в высокой точке и продавать в низкой точке и останавливать убыток туда-сюда.
Фьючерсная стратегия CTA является прибыльной главным образом из-за следующих моментов:
Кроме того, торговая особенность отслеживания трендов заключается в том, чтобы потерять небольшую сумму денег, когда нет рынка, и заработать большое состояние, когда наступает рынок. Однако люди, которые занимались торговлей, знают, что рынок волатилен большую часть времени, и только в течение небольшого количества времени является трендовым рынком. Поэтому стратегия отслеживания трендов имеет низкий показатель выигрыша в торговле, но общая прибыль и убытки каждой сделки относительно велики.
Поскольку стратегия отслеживания тренда нестабильна с точки зрения дохода, многие инвестиционные учреждения будут использовать несколько разновидностей и стратегий для создания портфеля, который также будет сконфигурирован с определенным количеством стратегий обратного отклонения.
Корреляция между CTA и традиционными активами
Теоретически, различные стратегии с различными стилями или относительно низкой корреляцией иногда будут одновременно передавать одни и те же, а иногда и другие торговые сигналы, когда сталкиваются с различными изменениями в рыночных ценах.
Из вышеперечисленного можно сделать вывод, что лучше разработать несколько умеренных подстратегий, чем разработать мастер-стратегию. Как контролировать эти стратегии? Здесь мы можем учиться на алгоритме случайного леса в машинном обучении. Случайный лес не является независимым алгоритмом, он является структурой принятия решений, содержащей несколько деревьев решений. Он эквивалентен родительской стратегии выше подстратегии дерева решений. Кластер субстратегии организован и контролируется через родительскую стратегию.
Далее мы должны разработать материнскую стратегию. Мы можем оценить ликвидность, рентабельность и стабильность каждого сорта на всем рынке товарных фьючерсов, чтобы отобразить портфель товарных фьючерсов с низкой волатильностью прибыли, а затем провести нейтральный скрининг отрасли, еще больше снизить общую волатильность через отраслевую дисперсию портфеля и, наконец, построить фактический портфель товарных фьючерсов с несколькими сортами путем соответствия рыночной стоимости для торговли.
Каждый сорт также может быть настроен с многопараметровыми стратегиями, и он может выбрать комбинацию параметров с хорошей производительностью в бэкстестесте. Когда тенденция рынка очевидна, многопараметровые стратегии, как правило, будут работать последовательно, что эквивалентно добавлению позиций; Когда рынок находится в волатильной ситуации, производительность нескольких наборов параметровых стратегий, как правило, будет несовместима, так что они могут хеджировать риски, выходя долгими или короткими, соответственно, что эквивалентно сокращению позиций. Это может еще больше снизить максимальный показатель бэкстеста портфеля, сохраняя при этом общий показатель доходности неизменным.
Ньютон однажды сказал: если я вижу дальше, чем другие, это потому, что я стою на плечах гигантов.
К общедоступным на рынке стратегиям CTA относятся стратегия SMA, стратегия полос Боллинджера, правила торговли черепахами, стратегия импульса, стратегия арбитража и так далее. Количественные торговые стратегии имеют одну характеристику, то есть они медленно потерпят неудачу, как только они станут общедоступными. Но это не влияет на нас, чтобы учиться на этих стратегиях и учиться на их сути, чтобы мы могли решать проблемы на плечах гигантов.
Фундаментальный анализ не должен заботиться о краткосрочной ценовой тенденции. Считается, что стоимость будет отражаться в цене в конечном итоге. Речь идет скорее об анализе факторов, лежащих в основе цены, чтобы определить, сколько стоит сорт. Как правило, используется метод анализа сверху вниз: от макрофакторов, факторов сорта и других факторов.
Из приведенной выше диаграммы мы видим, что существует множество факторов, влияющих на цены на сырьевые товары, и эти данные постоянно меняются.
Фактически, фундаментальный анализ товарных фьючерсов не заключается в анализе всех факторов. Нам нужно только понять основные элементы фундаментального анализа, чтобы узнать правила из сложной информации.
Макроэкономические данные сложны и изменчивы. Каждый день, каждый момент, публикуется много экономических данных, от национальной политики, центральных банков, инвестиционных банков, официальных и неофициальных. В дополнение к политическому и экономическому кризису макроанализ является хорошим материалом для беседы, но не практичным.
В фундаментальном анализе анализ разнообразия в основном анализирует премию и дисконт, соотношение спроса и предложения, запасы товаров, промышленную прибыль и т. Д. Можно сказать, что освоение анализа фактора разнообразия товарных фьючерсов может судить о большей части рыночной тенденции.
Как знают друзья, которые делали фьючерсы, внутренние товарные фьючерсы можно просто разделить на промышленные продукты и сельскохозяйственные продукты. Методы анализа промышленной продукции и сельскохозяйственной продукции различны. Мы рассмотрим два аспекта предложения и спроса. В промышленной продукции предложение относительно стабильно. Если не произойдет крупный технологический прорыв, производственная мощность вряд ли значительно изменится в течение короткого периода времени. Поэтому основным фактором, влияющим на цену промышленной продукции, является спрос. Спрос на сельскохозяйственную продукцию относительно стабилен. В долгосрочной перспективе спрос на сельскохозяйственную продукцию меняется, но в краткосрочной перспективе спрос на сельскохозяйственную продукцию, как правило, стабилен, поэтому основным фактором, влияющим на цену сельскохозяйственной продукции, является предложение.
Таким образом, согласно законам экономики, в конечном итоге цены на товары определяется связь между спросом и предложением. Теоретически, до тех пор, пока можно получить данные о спросе и предложении, можно определить будущую цену на товары. Для промышленных продуктов данные о предложении легко получить, но получить данные о спросе сложно. Для сельскохозяйственных продуктов данные о спросе легко получить, и получить данные о предложении трудно.
На самом деле, мы можем далее вычитать. Взаимным результатом предложения и спроса на экономическом рынке является запас. Мы можем судить о силе отношения между рынком предложения и спроса с помощью данных запасов. Если запас товара очень высок, это означает, что рыночное предложение больше, чем спрос, и цена товара будет снижаться при условии, что внешние условия останутся неизменными. Если запас товара очень низок, это означает, что рыночный спрос больше, чем предложение, и цена товара увеличится при условии, что внешние условия останутся неизменными.
В дополнение к анализу товарного инвентаря, нам также нужно проанализировать разницу в цене между спотовым рынком и фьючерсным рынком, которая также называется базовой разницей. Если цена фьючерса больше спотовой цены, мы называем ее премией фьючерса; Если цена фьючерса меньше спотовой цены, мы называем ее дисконтом фьючерса. Согласно системе поставки фьючерсов, на дату поставки фьючерсов цена фьючерса должна быть равна спотовой цене.
Независимо от премии или скидки, из-за ограничений системы поставки фьючерсов, цена фьючерса на дату поставки должна быть равна спотовой цене в теории. По мере приближения даты поставки, как спотовая цена, так и цена фьючерса будут иметь тенденцию быть последовательными.
Согласно вышеуказанному принципу, мы можем использовать запас и базовую разницу для определения будущих фьючерсных цен одновременно. Если запас товара низкий, и если цена фьючерса намного ниже спотовой цены, мы можем судить, что спрос на спотовом рынке больше предложения, и вероятность роста спотовой цены в будущем велика; также из-за системы поставки фьючерсов, по мере приближения даты поставки цена фьючерса будет расти, и она будет равна спотовой цене. Вероятность роста цены фьючерса в будущем больше.
Наконец, мы судим о вероятном направлении будущей цены через запас и базовую разницу, но нет точной точки покупки и продажи, поэтому нам нужно сотрудничать с техническим анализом, чтобы дать четкий сигнал входа и выхода.
Когда дело доходит до торговых стратегий, мы должны говорить о репрезентативных правилах торговли черепахой. Правило торговли черепахой происходит из самого известного эксперимента в истории торговли. Ричард Деннис, товарный спекулянт, хочет знать, рождаются ли великие трейдеры или обучены. С этой целью в 1983 году он нанял 13 человек и научил их основным концепциям торговли фьючерсами, а также своим собственным методам и принципам торговли. Эти студенты назывались
В течение следующих четырех лет, черепахи достигли среднего годового совокупного процента в 80%. Деннис доказал, что с помощью простой системы и правил, люди с небольшим или никаким опытом торговли могут стать отличными трейдерами. Однако, некоторые черепахи продают правила торговли черепахами на веб-сайте с целью получения прибыли.
После того, как правда вышла на свет, люди обнаружили, что правила торговли Turtle приняли оптимизированный канал Donchian и использовали индикаторы ATR для управления позициями.
Итак, давайте посмотрим, что говорят правила торговли черепахой.
Таким образом, мы можем видеть, что, хотя торговое правило Черепахи выглядит очень просто, на самом деле оно сформировало реальное представление о прототипе торговой системы. оно охватывает все аспекты полной торговой системы, не оставляя места трейдерам для принятия субъективных воображаемых решений, что просто делает преимущества запрограммированной работы системы играть, включая: правила входа и выхода, управление фондами и контроль рисков и т.д.
Наибольшее преимущество торгового метода черепахи заключается в том, что он помогает нам установить набор эффективных торговых методов. Это сочетание открытия партий, динамической стоп-прибыли и стоп-пробега и следующей стратегии тренда рынка, особенно использование стоимости ATR и концепции управления позициями, которые очень стоит изучить. Конечно, у него также есть общая проблема со стратегией отслеживания тренда, то есть плавающая прибыль и возвращение. Вполне вероятно, что все плавающие прибыли, полученные от покупки победителей, будут изъяты из-за следующей волны резких падений. Это очень сильное в общей тенденции, и не так хорошо, как ожидалось на волатильном рынке.
В конце прошлого века в США в области финансовых инвестиций начал преобладать очень удивительный торговый метод. После тысячи практик люди обнаружили, что этот метод имеет эффективность и большую практическую ценность. В то же время он был признан многими инвестиционными экспертами и профессиональными трейдерами. До сих пор он может быть совершенно применим практически ко всем областям финансовых инвестиций, будь то валюты, золото, акции, фьючерсы, сырая нефть или индекс и облигации, который является методом хаос-операции.
Слово хаос относится к описанию хаотического состояния Вселенной изначально. Его идея заключается в том, что результат неизбежен, но поскольку существующие знания не могут рассчитать результат, поскольку сам расчет также изменяет результат, максимальный или минимальный результат может появиться в конце концов, но нет неизбежного результата. Это очень похоже на торговый рынок. Участники также меняют рынок, когда они анализируют рынок и покупают и продают. Рынок имеет вечную изменчивость. Когда участники понимают новую форму рынка, рынок также понимает, что он признан участниками, поэтому происходит изменение. И он будет иметь тенденцию меняться в неизвестном направлении участников. Он имеет достаточно мудрости, чтобы помешать участникам поймать его правила изменения, то есть рынок не стабилен, и понимание прошлого рынка не может представлять будущее.
Метод хаос-операции - это полный набор инвестиционных идей, торговых стратегий и сигналов входа и выхода, изобретенный Биллом Уильямсом. В настоящее время многие инвесторы в мире используют хаос-операцию для участия в рыночных сделках. Поскольку развитие финансового рынка Китая отстает, а теория хаоса также является относительно новой идеей, в Китае мало кто изучает методы хаос-операции. Поскольку метод хаос-операции является торговой стратегией с высокой универсальностью и может применяться практически во всех областях финансовых инвестиций, включая акции, облигации, фьючерсы, валюту и цифровую валюту, этот курс использует упрощенную версию стратегии хаоса в качестве отправной точки для улучшения вашего инвестиционного интереса и дохода.
Как следует из названия, теоретической основой метода работы хаоса является теория хаоса, которая была предложена метеорологом Эдвардом Лоренцем. Это было одно из величайших научных открытий в конце 20-го века. Он выдвинул знаменитый "эффект бабочки". Билл Уильямс творчески применил теорию хаоса к области финансовых инвестиций, в сочетании с фрактальной геометрией, нелинейной динамикой и другими дисциплинами, и создал серию очень эффективных индикаторов технического анализа.
Весь метод работы Хаоса состоит из пяти основных измерений (технических показателей):
Аллигатор
Фрактал
Импульс
Ускорение
Линия баланса
Давайте посмотрим на приведенный выше график. Аллигатор - это набор линий равновесия, использующих фрактальную геометрию и нелинейную динамику. Его суть заключается в расширении экспоненциально взвешенной скользящей средней, которая является своего рода средней линией, но его метод расчета немного сложнее обычной средней линии. Далее, давайте посмотрим, как определить Аллигатора в 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-линию без рекордного высоты.
// 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 часа.
По данным кривой капитала и результатов обратного теста, стратегия показала хорошие результаты, а общая кривая капитала стабильно увеличивалась. Однако с конца 2016 года рыночные характеристики сортов арматуры изменились, с односторонней тенденции высокой волатильности до широкой тенденции волатильности. С точки зрения кривой капитала прибыль с 2017 года по настоящее время очевидно слаба.
Одним словом, суть метода хаоса заключается в том, чтобы найти поворотный момент, не заботясь о том, как развивается рынок или является ли это истинным или ложным прорывом. Если он прорвется через фракталь, он войдет на рынок напрямую. Никогда не пытайтесь предсказать рынок, но будьте наблюдателем и последователем.
Джордж Сорос выдвинул важное предложение в книге "Алхимия финансов", написанной в 1987 году: Я считаю, что рыночные цены всегда ошибочны в том смысле, что они представляют предвзятое представление о будущем. Он считал, что гипотеза эффективности рынка является только теоретической гипотезой. На самом деле, участники рынка не всегда рациональны, и в каждый момент времени участники не могут полностью получить и объективно интерпретировать всю информацию. Кроме того, даже если это одна и та же информация, обратная связь каждого отличается. То есть сама цена уже содержит неправильные ожидания участников рынка, поэтому по сути, рыночная цена всегда ошибочна. Это может быть источником прибыли арбитражей.
Согласно вышеуказанным принципам, мы можем знать, что на неэффективном фьючерсном рынке причина, по которой влияние рынка на контракты поставки в разные периоды не всегда синхронно, и ценообразование не является полностью эффективным. Затем, основываясь на цене контракта поставки одного и того же объекта сделки в разные периоды, если между двумя ценами существует большая разница в цене, мы можем покупать и продавать фьючерсные контракты в разные периоды одновременно для межпериодного арбитража.
Как и товарные фьючерсы, цифровая валюта также имеет портфель контрактов на арбитражный период. Например, на бирже OKEX есть: ETC текущей недели, ETC следующей недели, ETC квартал. Например, предположим, что разница в цене между текущей неделей ETC и кварталом ETC остается около 5 в течение длительного времени. Если разница в цене достигает 7 в один день, мы ожидаем, что разница в цене вернется к 5 в будущем. Затем мы можем продать ETC на этой неделе и купить ETC квартал в то же время, чтобы сократить разницу в цене, и наоборот.
Хотя эта разница в ценах существует, в ручном арбитраже существует много неопределенностей из-за трудоемких ручных операций, плохой точности и влияния изменений цен.
В этом курсе вы узнаете, как использовать платформу FMZ Quant Trading и фьючерсный контракт ETC на бирже OKEX, чтобы продемонстрировать, как использовать мгновенные возможности арбитража, извлекать прибыль, которую можно увидеть каждый раз, и хеджировать риски, которые могут возникнуть в торговле цифровой валютой с помощью простой стратегии арбитража.
Создать стратегию арбитража для цифровой валютыТрудность: нормальная
Стратегическая среда
Логика стратегии
Выше приведено простое логическое описание кросс-периодической стратегии арбитража цифровой валюты.
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, это наш торговый процесс в субъективной сделке: сначала, получить базовые данные цены, затем получить баланс счета, затем рассчитать индекс, затем рассчитать условия торговли и разместить заказ, и, наконец, обработка после размещения заказа, включая отмену заказа, чертеж и обработку одного контракта.
Стратегическую структуру можно легко создать в соответствии с идеей стратегии и процессом транзакций.
Далее нам нужно заполнить необходимый детальный код в рамках стратегии в соответствии с фактическим процессом транзакции и деталями транзакции.
var chart = {}
var ObjChart = Chart ( chart )
var bars = []
var oldTime = 0
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
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;
}
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;
}
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
}
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);
}
}
}
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