Разработка стратегии CTA от количественных сделок до абсолютных выгод для управления активами

Автор: , Создано: 2019-06-26 10:27:41, Обновлено: 2023-10-30 20:30:50

[TOC]

img

Преамбула

Почему мы должны учиться этому?В первую очередь, это курс, основанный на языках программирования JavaScript и Python, язык - это только технология, и в конечном итоге мы должны применить эту технологию к отрасли.

Систематическое обучение с помощью данного курса позволит вам получить более глубокое понимание области количественного трейдинга, если вы готовы к переходу в область количественного трейдинга, то количественный трейдинг может полностью поддержать вашу основную торговлю, развивая торговые стратегии, которые позволят вам получить прибыль на финансовых рынках, а также расширять каналы и платформы для инвестиционного финансирования.

Прежде чем начать, я расскажу о своем личном опыте торговли, я не из финансовой профессии, я изучал статистику. Сначала я начал заниматься субъективной торговлей акциями в студенческие годы, а затем стал количественным трейдером в частных фондах в стране, в основном занимаясь стратегическими исследованиями и разработкой стратегий.

В этом кругу, до и после этого, также есть несколько десятков лет, и я разработал различные типы стратегий. Моя инвестиционная идея заключается в том, чтобы контролировать риск выше всего и сосредоточиться на абсолютной прибыли.

Первый: стратегия CTA на фьючерсе, логика зарабатывания

1.1 Ознакомление с фьючерсными CTA

Кто-то может спросить, что такое CTA? Что такое CTA? CTA за рубежом называют консультантом по торговле товарами, а внутри страны обычно называют управляющим инвестициями. Традиционный CTA сосредотачивает средства большинства инвесторов, а затем поручает их профессиональным инвестиционным организациям, а затем инвестирует их через торговых консультантов (т.е. CTA) в фондовые, товарные и облигационные фьючерсы.

Но на самом деле, по мере того, как глобальный фьючерсный рынок продолжает расти, концепция CTA постоянно расширяется и становится намного более широкой, чем традиционные фьючерсы. Он может инвестировать не только в фьючерсный рынок, но и в процентный рынок, фондовый рынок, валютный рынок и опционный рынок.

Еще до 1980-х годов технология электронных дисков была не очень развита, и тогда большинство трейдеров судили о будущем движении товарных фьючерсов с помощью ручного рисунка технических индикаторов, таких как индексы Уильяма, KDJ, RSI, MACD, CCI. Позже трейдеры создали специальные фонды CTA, которые помогали клиентам управлять активами. Только после популярности электронных дисков в 1980-х годах появились настоящие фонды CTA.

Изменения в размерах управления фондами CTA img Единица: миллиард долларов

Если мы посмотрим на этот график, особенно с ростом количественных сделок, то глобальный размер фондов CTA увеличился с 130,6 млрд. долларов в 2005 году до более чем 300 млрд. долларов в 2015 году.

Вместе с ростом увеличились и результаты фондов CTA, в которых показаны показатели индекса CTA, являющегося отраслевым эталоном мировых консультантов по торговле товарами. С конца 1979 года по конец 2016 года индекс CTA накопился в 28.95 раза, с годовым доходом 9.59%, с шарп-коэффициентом 0.37 и максимальным отклонением 15.66%.

Поскольку в портфеле распределения активов стратегии CTA обычно имеют очень низкую релевантность для других стратегий. В следующем рисунке показано, что в период глобального биржевого медведя 2000-2002 годов и глобального кризиса по кредитованию 2008 года индекс фондов Barclays CTA не только не упал, но и достиг положительных результатов, и CTA может обеспечить сильную прибыль, когда происходит кризис на фондовых и облигационных рынках.

img

Развитие CTA в Китае - всего лишь почти десятилетие, но он добился значительного прогресса, в основном благодаря более открытой торговой среде, более низким порогам для торговли, более широкому использованию системы гарантийных фондов, более низкой стоимости сделок, более совершенной технической структуре бирж по сравнению с акциями и более легкой систематической торговле.

С 2010 года фонды CTA существуют в основном в виде частных фондов. С постепенным открытием внутренней политики для инвестирования в фонды частных лиц, фонды CTA стали существовать в виде частных лиц, и их более прозрачный и открытый способ работы стал необходимым инструментом для расположения активов большего числа инвесторов.

img

Как показано выше, CTA-стратегия также лучше подходит для индивидуальных трейдеров по сравнению с другими торговыми стратегиями, независимо от степени легкости доступа, порога капитала, способа выполнения стратегии торговли и паровки API. Внутренние фьючерсные контракты очень малы, например, можно торговать несколькими тысячами долларов на кукурузу или фасоль, и практически нет порога капитала.

img

Процесс проектирования стратегии CTA также относительно прост, сначала исторические данные обрабатываются, а затем вводятся в количественную модель, которая включает в себя инструменты математического моделирования, программирования и т. д.

1.2 Типы стратегий CTA на фьючерсы

С точки зрения стратегии торговли стратегии CTA также разнообразны: они могут быть трендовыми или оптовыми; они могут быть длинными или короткими; они могут быть основанными на техническом или фундаментальном анализе; они могут быть субъективными или системными.

CTA-стратегии имеют различные классификационные методы, которые могут быть разделены на: субъективные и системные, более продвинутые в развитии зарубежных CTA-стратегий, приближающиеся к 100%. В соответствии с методом анализа, они могут быть разделены на: фундаментальный анализ и технический анализ. В соответствии с источником дохода, они могут быть разделены на: трендовые и шок-трейдинг.

В целом CTA-стратегии составляют около 70% на рынке, а средняя стратегия возвращения составляет около 25%, а анти- или обратная стратегия составляет около 5%. Из них наибольшая доля составляет высокочастотная торговля, внутридневная торговля, средняя короткая торговля и средняя длинная торговля.

Высокочастотные стратегииВ настоящее время на рынке существуют два основных вида высокочастотных торговых стратегий: высокочастотная стратегия и высокочастотная стратегия. Стратегия предоставляет ликвидность на рынке торговли, т.е. на рынке торговли, где есть торговые посредники, кто-то хочет купить или продать сделку, и торговый посредник должен гарантировать, что его единица может быть выполнена.

Стратегия высокочастотных опционовВысокочастотный пакет - это торговля двумя сильно связанными акциями или комбинацией ETF и ETF. Согласно методу расчета ETF, ожидаемая цена ETF может быть рассчитана тем же способом. Показательная цена ETF может быть вычтена из ожидаемой цены ETF, чтобы получить дифференциал, который обычно работает в ценовом канале, который можно торговать, ожидая возвращения дифференциала, чтобы получить прибыль.

Внутренняя стратегияЕсли, в буквальном смысле, не держать акции на ночь, это может быть названо стратегией дневного трейдинга. Поскольку длительность длительного трейдинга коротка, обычно не сразу после входа в рынок можно получить прибыль, он быстро выходит из рынка. Таким образом, этот способ торговли несет меньший рыночный риск.

Средняя и длинная стратегииТеоретически, чем длиннее цикл держания, тем больше стратегическая емкость, тем меньше риск-прибыль. Особенно в институциональной торговле, поскольку короткая стратегия емкости ограничена, и большие средства не могут входить и выходить в короткие сроки, поэтому будет сконфигурировано больше средней долгой стратегии.

Стратегические данные CTAОбычно CTA-стратегии изучают данные минуты, часа и суток, включая: открытие, максимум, минимум, закрытие, объем сделок и т. д.; лишь небольшая часть CTA-стратегий использует Tick-данные, такие как глубокие данные о ценах покупки, продажи, покупки и продажи в L2 данных.

img

Основная идея стратегии CTA, которую мы в первую очередь придумали, была основана на традиционных технических показателях, поскольку в этой области имеется больше общедоступных справочников, логика обычно более проста и в основном основана на статистических принципах. Например, различные технические показатели, с которыми мы все хорошо знакомы: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, и т. Д.

На рынке также есть несколько классических моделей торговли, которые можно использовать и улучшить, включая: многоуровневые портфели, DualThrust, R-Breaker, морской торговый метод, сетевой торговый метод и многое другое.

Все это - торговые стратегии, основанные на традиционном техническом анализе, процесс которых заключается в том, чтобы на основе исторических данных и правильной торговой концепции вычислить факторы или условия покупки и продажи, которые имеют вероятное преимущество, и предположить, что рынок сохранит эту закономерность в будущем, в конце концов, реализовать торговую стратегию с помощью кода и полностью автоматизировать торговлю.

Наибольшее преимущество стратегии CTA заключается в том, что она может принести абсолютную прибыль независимо от того, растет ли текущий рынок или падает, особенно при быстром переходе рынка или когда рыночная тенденция явно плавная. Эта стратегия имеет большое преимущество.

1.3 Прибыльность стратегии CTA

В основном, фьючерсные стратегии CTA делают деньги из-за следующих причин:

  1. Движение цен имеет противоположность, оно всегда продолжается в тенденционном виде. Когда инвесторы наблюдают рост цен, они покупают вслед за ветром, в результате чего цены растут дальше. То же самое относится и к снижению цен. Поскольку инвесторы больше относятся к нерациональному поведению, иногда мы видим, что цены скачут сверх, а падают сверх.
  2. Толерантность каждого инвестора к соотношению прибыли и убытка несимметрична, а также способность к риску различна. Для большинства ритейлеров они предпочитают более консервативный способ торговли, и рынок легче ориентируется на тенденции.
  3. Формирование цены определяется сделками, которые, правда, за ними стоят люди, но человеческая природа трудно изменить, что приводит к тому, что фиксированные формы повторяются, а стратегии эффективны в пересмотре исторических данных, а также предсказывают, что могут и будут эффективны в будущем.

Кроме того, трендоуследующие сделки характеризуются тем, что они теряют немного денег, когда нет рынка, и зарабатывают много денег, когда рынок приходит, но все, кто занимается торговлей, знают, что рынок в большинстве случаев находится в состоянии нестабильности, и только в небольшом количестве времени он является трендовым рынком. Таким образом, стратегия трендоуследования имеет низкий процент выигрыша при торговле, но в целом прибыль и убыток на каждой сделке больше.

Поскольку стратегии отслеживания трендов нестабильны в отношении доходности, многие инвестиционные институты строят портфель с использованием разнообразных многостратегий, в том числе и с определенным количеством обратных стратегий.

CTA и традиционные активы img

Посмотрим на вышеприведенный график, теоретически различные стили или менее коррелирующие стратегии, одновременно делают одновременно разные торговые сигналы, когда сталкиваются с различными изменениями в рыночных ценах. Поскольку несколько кривых прибыли перекрываются друг с другом, что позволяет формировать дополнение в общем прибыле, кривая прибыли становится более плавной, что уменьшает волатильность прибыли.

Из вышесказанного можно сделать вывод, что вместо того, чтобы разработать стратегию на уровне мастера, лучше разработать несколько стратегий на уровне яичка. Как же контролировать эти стратегии? Здесь мы можем использовать алгоритмы случайного леса в машинном обучении.

Затем необходимо разработать материнскую стратегию, которая позволит оценить ликвидность, доходность и стабильность различных сортов на рынке фьючерсов на все товары, отфильтровать комбинации товарных фьючерсов с низкой волатильностью доходности, провести нейтральную отборку по отраслям, еще больше снизить общую волатильность путем распределения отраслевой конфигурации портфеля, и, наконец, торговать с помощью рыночной оценки, чтобы построить реальную комбинацию из нескольких сортов товарных фьючерсов.

Каждая разновидность также может быть сконфигурирована с помощью множества параметровых стратегий, которые позволяют выбирать комбинации параметров, которые хорошо работают вблизи ретроспекции, и когда рыночные тенденции очевидны, они обычно работают единообразно, что является эквивалентом повышения позиций; когда рынок находится в бурном секторе, они обычно работают несовместно, что позволяет покрывать риски с использованием большего или меньшего количества параметров, что является эквивалентом снижения позиций; это может еще больше снизить максимальный ретроспективный процент портфеля, но при этом сохранить общий уровень прибыли неизменным.

Классический пример стратегии CTA на фьючерсе

Ньютон однажды сказал: "Если я вижу дальше, чем кто-либо другой, это потому, что я стою на плечах гиганта".

На рынке существуют тактики CTA, как однолинейная стратегия, стратегия Брин-Белда, стратегии трейдеров на пляже, стратегии динамики, стратегии опциона и т. д.

2.1 Фундаментальный анализ фьючерсов (инвентарь, базовый разрыв, цена)

Фундаментальный анализ не требует внимания к краткосрочным ценовым движениям, полагая, что ценность в конечном итоге будет отражена в цене, а скорее анализирует факторы, влияющие на цену, чтобы определить, сколько стоит эта разновидность.

img

Если мы посмотрим на эту диаграмму, то увидим, что существует множество факторов, влияющих на цены товаров, в общей сложности до десятков, а затем и до десятков, и эти данные постоянно меняются.

Фактически, фундаментальный анализ товарных фьючерсов не анализирует все факторы, нам нужно только поймать ключевые элементы фундаментального анализа, чтобы найти закономерности из сложной информации.

МакрофакторыМакроэкономические данные сложны и изменчивы, каждый день, каждый час, много экономических данных публикуются, политические круги, центральные банки, банковские учреждения, официальные и неофициальные. Кроме политического и экономического кризиса, макроанализ является хорошим материалом для разговора и не очень практичен.

РазнообразиеВ фундаментальном анализе, разновидность анализа в основном анализирует подъем воды, отношения между спросом и предложением, запасы товаров, промышленные прибыли и т. д.

Друзья, которые занимаются фьючерсами, знают, что внутренние товарные фьючерсы можно просто разделить на: промышленные и сельскохозяйственные товары. Промышленные и сельскохозяйственные товары различаются методами анализа, мы разъясняем с обеих сторон предложения и спроса. В промышленных товарах предложение относительно стабильно, если нет значительного технологического прорыва, то производительность вряд ли существенно изменится в короткие сроки, поэтому факторы, влияющие на цены на промышленные товары, в основном, являются спросом.

Таким образом, согласно экономическим законам, цены товаров в конечном итоге определяются отношениями спроса и предложения, и теоретически можно судить о будущих ценах товаров, если можно получить данные о спросе и предложении. Для промышленных товаров данные о предложении легче получить, но трудно получить данные о спросе, для сельскохозяйственных продуктов данные о спросе легче получить, если вы хотите получить данные о предложении.

Фактически мы можем еще больше уменьшить, что взаимное результатом спроса и предложения на экономическом рынке является запас, мы можем судить о сильной или слабой взаимосвязи между спросом и предложением на рынке с помощью данных запасов. Если запас какого-либо товара высокий, это означает, что сила рынка в предложении больше, чем потребность, при условии неизменности внешних условий, цены на товар скоро упадут.

В дополнение к анализу запасов товара, необходимо проанализировать разницу цен на рынке наличности и на рынке фьючерсов, или так называемую разницу. Если цена фьючерса больше, чем цена на рынке наличности, мы называем это фьючерсом-лифтинг; если цена фьючерса меньше, чем цена на рынке наличности, мы называем это фьючерсом-лифтинг. Согласно системе доставки фьючерсов, цена фьючерса должна быть равна цене на рынке наличности на дату доставки фьючерса.

img

В теории цена фьючерса на дату поставки должна быть равна цене на месте. По мере приближения даты поставки, цена на месте и цена фьючерса будут совпадать, одна из которых возвращается на место, а другая возвращается на место.

Согласно вышеуказанному принципу, мы можем судить о будущих ценах на фьючерсы с использованием запасов и ключевых значений одновременно. Если запасы какого-либо товара низки, и если цена на фьючерс значительно ниже, чем цена на наличные, то мы можем судить: сила спроса на рынке наличности больше силы предложения, и вероятность роста цен на наличные в будущем больше. Кроме того, из-за системы поставки фьючерсов, цена фьючерсов будет компенсироваться с приближением даты поставки, и будет оставаться на уровне с текущими ценами, и вероятность роста цен на будущие фьючерсы больше.

Наконец, мы определяем вероятность будущих цен с помощью инвентаря и дефицита, но нет более точных точек продажи, поэтому нам также нужен технический анализ, чтобы дать четкие сигналы входа и выхода. Вся структура фундаментального анализа заключается в следующем: низкий инвентарь + глубокая нагрузка + технический анализ многолимитный сигнал = больше; высокий инвентарь + значительный подъем воды + технический анализ воздушный сигнал = пустое дело.

2.2 Пляжные торговые правила

Что касается стратегии торговли, то мы должны упомянуть о символическом законе торговли на пляже. Закон торговли на пляже произошел из одного из самых известных экспериментов в истории торговли, когда товарный спекулянт Ричард Деннис пытался выяснить, являются ли великие трейдеры рожденными или выращенными. Для этого в 1983 году он нанял 13 человек, которым преподал основные концепции торговли на фьючерсах, а также свои собственные методы и принципы торговли.

В течение следующих четырех лет средняя годовая прибыль морских пейзажей составила 80%. Денис также доказал, что с помощью простого набора систем и правил можно сделать хороших трейдеров из тех, у кого мало или никакого опыта торговли. Однако есть отдельные морские пейзажи, которые продают морские пейзажи на своих сайтах.

После того, как правда вышла на свет, было обнаружено, что правила торговли морской рыбой используют оптимизированный канал Dongqian и используют индикатор ATR для управления позициями. После десятилетий исторических испытаний, став легким способом торговли для обычных розничных торговцев, он до сих пор действует на некоторых сортах.

Основные принципы пляжа

  • Имейте преимущества: найдите позитивную стратегию торговли, потому что это создаст положительные результаты в долгосрочной перспективе.
  • Управление рисками: контролируйте риски, держитесь на месте, иначе вы не сможете дождаться дня, когда вы создадите результаты.
  • Устойчивость: только если вы упорно выполняете свою стратегию, вы действительно получаете результаты системы.
  • Простые системы в долгосрочной перспективе более жизнеспособны, чем сложные.

В следующий раз мы рассмотрим, что говорят законы о торговле пляжами. 1, Рынок - что покупать, что продавать, на каких рынках в основном торговать, морские пехотинцы - фьючерсные трейдеры, они выбирают только рынки с высокой ликвидностью объемов торговли, потому что выбор неактивных рынков увеличивает дополнительные скидки на вход и выход, а также упускает много трендовых возможностей. 2, размер позиции - сколько покупать и сколько продавать - очень важная часть всей стратегии, которую обычно большинство людей игнорируют или ошибочно относятся к этому. Пейдж-трейдинг использует ATR, то есть средний показатель истинной величины волатильности, для расчета открытых позиций, сигналов увеличения позиции, сигналов остановки. Это очень умелая конструкция, предназначенная для регулирования размеров позиций с помощью абсолютной величины волатильности рынка, для уменьшения объема держания при высокой волатильности рынка, для увеличения объема держания при слабой волатильности рынка. 3., Вход в рынок - Вход в рынок пиджака с использованием Dongqian канала, когда цена поднимается через 20 или 55 конечных линий K, он входит больше, когда цена падает через 20 или 55 конечных линий K, он входит пустой. 4., Стоп-лосс -- в долгосрочной перспективе сделка без стоп-лосса не будет успешной, но большинство трейдеров держат убыточные позиции, пытаясь надеяться, что рынок перевернется. Пейдж строго определяет, когда выйти из убыточных позиций, если удерживается несколько заказов, и цена упала на 2 единицы, многоголовый ущерб балансу. Пятое, приостановление - приостановление морской черепахи означает потерю большого количества флотов, что также трудно принять для многих трейдеров. Если в настоящее время у вас есть много заказов, и цена упала вниз по траектории 10-го дня Доньчжанского канала, то выведите все простые заказы; если в настоящее время у вас есть пустые заказы, и цена поднялась вверх по траектории 10-го дня Доньчжанского канала, то выведите все пустые заказы.

Таким образом, мы можем видеть, что законы морского трейдинга, хотя и кажутся простыми, на самом деле уже сформировали форму торговой системы в полном смысле слова, которая охватывает все аспекты полной торговой системы, не оставляя трейдерам места для субъективного воображения.

Самое большое преимущество прибрежной торговли заключается в том, что она помогает нам создать эффективный набор методов торговли, которая сочетает в себе лотную закладку, динамические остановки и остановки, а также стратегии отслеживания трендов на рынке, особенно использование значения ATR и управление позициями. Конечно, у нее также есть общая проблема с стратегией отслеживания трендов, которая заключается в том, что она отскакивает обратно.

Третья: Стратегия CTA для разработки фьючерсов в реальном мире

3.1 Разработка стратегии трендов CTA на основе марийского языка

В конце прошлого века в США в сфере финансовых инвестиций стал популярен удивительный метод торговли, который после того, как его практиковали тысячи людей, был признан эффективным и имел огромную практическую ценность, а также был признан многими инвестиционными экспертами и профессиональными трейдерами, и до сих пор может быть идеально применен практически во всех сферах финансовых инвестиций, будь то валюты, золото, акции, фьючерсы, сырая нефть, индексы и облигации.

Слово "хаос" относится к описанию хаотического состояния Вселенной, в котором мысль заключается в следующем: результат неизбежен, но из-за отсутствия знаний невозможно вычислить результат, поскольку вычисления сами по себе также изменяют результат, в конечном итоге может возникнуть наибольший или наименьший результат, а не неизбежный результат. Это очень похоже на торговый рынок, участники которого изменяют рынок, анализируя рынок и покупая и продавая сделки. Рынок имеет постоянную изменчивость, когда участники узнают о новой форме рынка, рынок также узнает, что это происходит, когда участники узнают, что это изменение.

Хаос-операционный метод - это полный набор инвестиционных идей, торговых стратегий и сигналов входа и выхода, изобретенный Биллом Уильямсом. В настоящее время многие инвесторы во всем мире участвуют в торговле хаос-операционными методами на рынках, а теория хаоса также является относительно новой идеей из-за задержки развития финансовых рынков в Китае, поэтому мало кто изучает хаос-операционные методы внутри страны.

Как следует из названия, теоретическая основа хаосовых операций - теория хаоса, предложенная метеорологом Эдвардом Лоренцем и являющаяся одним из величайших научных открытий конца XX века. Известный эффект бабочки был выдвинут им. Билл Уильямс творчески применил теорию хаоса в области финансовых инвестиций, и в сочетании с другими дисциплинами, такими как разделительная геометрия и нелинейная динамика, создал ряд очень эффективных технических аналитических показателей.

Весь хаотический подход состоит из пяти основных измерений (технологических показателей):

  • Аллигатор

  • Фрактал

  • Момент.

  • Ускорение

  • The Balance Line (Линия баланса)

    img

На рисунке выше мы видим, что рысь-линия - это набор сбалансированных линий, использующих геометрию деформации и нелинейную динамику, которая, по сути, является расширенным индексом с увеличенным весом перемещающейся средней, принадлежащей к удельной линии, но с немного более сложным расчетом, чем обычная удельная линия.

// 参数
N1:=11;
N2:=21;

// 定义价格中线
N3:=N1+N2;
N4:=N2+N3;
HL:=(H+L)/2;

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

Сначала мы определяем два внешних параметра N1 и N2, затем вычисляем средние значения HL для максимальной и минимальной цены на основе внешних параметров, а затем вычисляем средние значения HL с помощью различных параметров. Для поцелуя губ снова средний средний, зуб - средний средний средний, игло - средний средний средний.

В хаотическом методе очень образно определяется концепция дефисформы, мы можем сделать аналогию: расширяя ладонь, пальцы направлены вверх, средний палец - это верхний дефисформ, левый мизинчик и безымянник, правый указательный палец и большой палец - неинновационные высокие K-линии. Основной дефисформ состоит из этих 5 K-линий.

// 分形
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);

Вычислив линию и дефис, мы можем составить простую стратегию хаотических операций в соответствии с этими двумя условиями, используя набор индексов с взвешенными движущимися средними в качестве базовой цены для вычисления линий и дефис. Конечно, стратегия хаотических операций в оригинале будет более сложной.

// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓
BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1);
// 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓
SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1);

// 如果收盘价跌破鳄鱼的下巴时,多头平仓
C<Y,SP(BKVOL);
// 如果收盘价升破鳄鱼的下巴时,空头平仓
C>Y,BP(SKVOL);

Для удобства, я написал подробные комментарии прямо в код, и мы можем просто обобщить логику сделки этой стратегии в следующих пунктах:

  • Большое количество открытых позиций: если в настоящее время нет большого количества заказов, и цена закрытия поднимается вверх, и верхний разрыв формируется выше линии кита.
  • Открытие пустой позиции: если в настоящее время нет пустых заказов, и цена закрытия упала ниже разрыва, и нижний разрыв находится ниже линии кита.
  • Положительные результаты: если цены упадут, то рыба будет выбита из подбородка.
  • Если цены на акции вырастут, рыбак сломает челюсть.

Для того, чтобы приблизить рекурсию к реальному окружению, здесь установлены процедурные сборы в два раза выше, чем на бирже, с открытием и закрытием позиций плюс 2 скольжения.

img img img

С точки зрения кривой капитала и данных ретроспективной эффективности стратегия продемонстрировала хорошие результаты, а общая кривая капитала стабильно выросла. Однако с конца 2016 года рыночные характеристики сортов струженной стали изменились, превратившись из предыдущего одностороннего движения с высокой волатильностью в широкое колебание. С точки зрения кривой капитала, доходы в 2017 году были очень слабыми.

В общем, суть хаотического метода заключается в том, чтобы найти поворотный момент, не заботясь ни о том, как будет развиваться рынок, ни о ложных прорывах, и если они произойдут, сразу же вступать в игру. Никогда не пытайтесь предсказать рынок, но будьте наблюдателем и последователем.

3.2 Разработка стратегии на базе языка JavaScript

В 1987 году Сорос написал книгу "Альхамида рыночных финансов", в которой выдвинул важный тезис: "Я считаю, что рыночные цены всегда ошибочны в том смысле, в котором они предвзято относятся к будущему". Он считает, что эффективная рыночная гипотеза является лишь теоретической гипотезой, что в действительности участники рынка не всегда рациональны, и что в любой момент времени участники не могут полностью получить и объективно интерпретировать всю информацию, и что даже если это одна и та же информация, то отзывы всех людей будут разными. То есть, цена сама по себе уже содержит ошибочные ожидания участников рынка, поэтому по сути рыночная цена всегда ошибочна. Это, возможно, источник прибыли спекулянтов".

Согласно вышеуказанному принципу, мы также знаем, что в неэффективном рынке фьючерсов, не всегда синхронно влияет на рынок между разными периодами сделки на процентные ставки, и их ценообразование не является полностью эффективным. Таким образом, на основе цены сделки на процентные ставки в разные периоды одного и того же индикатора торговли, если две цены имеют большую разницу в цене, можно одновременно покупать и продавать контракты на фьючерсы в разные периоды, осуществляя сверхсрочную дифференциацию.

Как и товарные фьючерсы, цифровые валюты также имеют связанные с ними долгосрочные пакеты с дифференцированными контрактами. Например, на бирже OkEX есть: ETC на этой неделе, ETC на следующей неделе, ETC в квартале. Например, предположим, что разница между ценами ETC на этой неделе и ETC в квартале сохраняется в течение длительного периода около 5. Если разница в цене на день достигает 7, мы ожидаем, что разница вернется к 5 в какой-то момент в будущем.

Несмотря на то, что такая дифференциация существует, искусственная операция требует времени, недостаточной точности и влияет на изменение цены. Искусственная дифференциация часто содержит множество неопределенностей.

В этом разделе мы научим вас, как использовать изобретательские квантовые торговые платформы и ETC-фьючерсные контракты на бирже OkEX для торговли цифровыми валютами, чтобы продемонстрировать простую стратегию оптования, которая позволит вам уловить видимую прибыль при хеджировании рисков, которые могут возникнуть, если вы поймете мгновенные оптовые возможности.

Создание стратегии долгосрочного сбора цифровой валютыТрудность: средний уровеньСтратегическая среда

  • Торговый знак: ETH Classic (ETC)
  • Данные разницы цен: ETC в неделю - ETC в квартал ((исключить проверку согласованности)
  • Цикл торговли: 5 минут
  • 头寸匹配:1:1
  • Тип сделки: однородный период

Стратегическая логика

  • Условия открытия сверхдефицитной сделки: если текущий счет не имеет акций, и цена дефицита меньше, чем boll, то можно сделать передефицит; т.е. купить ETC в течение недели, продать ETC в течение квартала.
  • Условия открытия дифференцированной сделки: если текущий счет не имеет акций, и цена дифференциации больше, чем boll, то дифференцированная сделка осуществляется; т.е. продается ETC в течение недели, покупается ETC в течение квартала.
  • Условия свертывания дифференцированного курса: если текущий счет имеет дифференцированный курс ETC в течение недели, а также имеет дифференцированный курс ETC в течение квартала, и дифференцированный курс больше, чем boll в среднем, то дифференцированный курс будет дифференцированным; т.е. продать дифференцированный курс ETC в течение недели, купить дифференцированный курс ETC в течение квартала.
  • Условия проведения дифференцированного баланса: если текущий счет имеет дифференцированный баланс ETC в течение недели, и имеет несколько дифференцированных балансов ETC в течение квартала, и цена дифференцированного баланса меньше, чем в среднем, то дифференцированный баланс будет действовать; т.е. купить дифференцированный ETC в течение недели, продать дифференцированный ETC в течение квартала.

Выше приведено простое логическое описание стратегии долгосрочного оптования цифровой валюты, так как реализовать свои идеи в программе? Мы пытаемся создать рамки, прежде чем изобретатели количественно оценивают торговые платформы.

function Data() {}  // 基础数据函数
Data.prototype.mp = function () {}  // 持仓函数
Data.prototype.boll = function () {}  // 指标函数
Data.prototype.trade = function () {}  // 下单函数
Data.prototype.cancelOrders = function () {}  // 撤单函数
Data.prototype.isEven = function () {}  // 处理单只合约函数
Data.prototype.drawingChart = function () {}  // 画图函数

function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB);  // 创建一个基础数据对象
    var accountStocks = data.accountData.Stocks;  // 账户余额
    var boll = data.boll(dataLength, timeCycle);  // 计算boll技术指标
    data.trade();  // 计算交易条件下单
    data.cancelOrders();  // 撤单
    data.drawingChart(boll);  // 画图
    data.isEven();  // 处理持有单个合约
}

//入口函数
function main() {
    while (true) {  // 进入轮询模式
        onTick();  // 执行onTick函数
        Sleep(500);  // 休眠0.5秒
    }
}

Представьте себе, что происходит в процессе ведения сделок в управляющей сделке. В системе сделок нет никаких существенных различий, кроме получения данных, вычисления данных, обработки сделок, обработки после заказа. Так же происходит и в программе. Сначала программа выполняет 20-ю строку функции main, которая является общепринятым положением, когда программа выполняет процедуру обработки сделок, после этого (если есть) она переходит в бесконечный цикл, то есть режим опроса, в режиме опроса будет повторяться выполнение функции onTick.

Так что в функции onTick, это процесс, который мы используем в субъективной сделке: сначала мы получаем базовые данные о ценах, затем мы получаем баланс счета, затем мы рассчитываем показатели, затем мы начинаем рассчитывать условия сделки и размещаем заказы, и, наконец, мы обрабатываем после размещения заказов, включая: снятие заказов, рисунок, обработку отдельных контрактов.

Сравнение стратегических идей и процессов торговли позволяет легко выстроить стратегическую структуру.

  • Предоставление услуг перед покупкой.
  • С помощью электронной почты мы получаем и вычисляем данные.
  • Запись и последующая обработка.

После того, как будет построена рамка стратегии торговли, необходимо заполнить необходимый детальный код в рамках стратегии в соответствии с фактическим процессом торговли и деталями торговли.

Первое - предварительная обработка.

1. Заявление необходимых глобальных переменных

  • Обязательно объявляет объект chart для конфигурации графикаvar chart = {}
  • Вызвать функцию Chart, инициировать графикvar ObjChart = Chart ( chart )
  • Декларируйте пустую матрицу для хранения последовательности разницы в ценахvar bars = []
  • Заявляет переменную временной шкалы для записи исторических данныхvar oldTime = 0

2. Внешние параметры конфигурации политики

var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量

3. Определение функций обработки данных

  • Основная функция данных: Data () Создать конструкторную функцию Data и определить ее внутренние свойства. Включая: данные счета, данные хранения, K-линейные данные временной шкалы, цены покупки/продажи, положительные/противопоказательные разницы между контрактами A/B.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
    this.accountData = _C(exchange.GetAccount); // 获取账户信息
    this.positionData = _C(exchange.GetPosition); // 获取持仓信息
    var recordsData = _C(exchange.GetRecords); //获取K线数据
    exchange.SetContractType(tradeTypeA); // 订阅套利A合约
    var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
    exchange.SetContractType(tradeTypeB); // 订阅套利B合约
    var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
    this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
    this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
    this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
    this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
    this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
    // 正套价差(合约A卖一价 - 合约B买一价)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // 反套价差(合约A买一价 - 合约B卖一价)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
  • Получить функцию хранения: mp () Проходит через массив хранения, возвращает количество хранения в указанном контракте, в указанном направлении, если нет, возвращает false
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // 获取持仓信息
    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-линий на основе положительных/противоположных расхождений цен; и возвращается данные о верхнем, среднем и нижнем трассах, рассчитанные по индикаторуboll.
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // 临时对象
    // 正套价差和反套价差中间值
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // 对比两个深度数据时间戳
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // 根据指定时间周期,在K线数组里面传入价差数据对象
    if (bars.length > num * 2) {
        bars.shift(); // 控制K线数组长度
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
    return {
        up: boll[0][boll[0].length - 1], // boll指标上轨
        middle: boll[1][boll[1].length - 1], // boll指标中轨
        down: boll[2][boll[2].length - 1] // boll指标下轨
    } // 返回一个处理好的boll指标数据
}
  • Функция:trade () Вводится название и тип подзаказа, затем подзаказ по цене, и возвращается результат после подзаказа. Поскольку требуется одновременное выполнение двух различных подзаказов, внутри функции выполняется преобразование по цене покупки/продажи в соответствии с названием подзаказа.
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // 下单前先重新订阅合约
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // 如果是A合约下单
        askPrice = this.askA; // 设置askPrice
        bidPrice = this.bidA; // 设置bidPrice
    } else if (tradeType == tradeTypeB) { // 如果是B合约下单
        askPrice = this.askB; // 设置askPrice
        bidPrice = this.bidB; // 设置bidPrice
    }
    switch (type) { // 匹配下单模式
        case "buy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}
  • Функция отмены заказа:cancelOrders () Получить массив всех невыполненных заказов и отменить их по отдельности.
Data.prototype.cancelOrders = function () {
    Sleep(500); // 撤单前先延时,因为有些交易所你懂的
    var orders = _C(exchange.GetOrders); // 获取未成交订单数组
    if (orders.length > 0) { // 如果有未成交的订单
        for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
            exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
            Sleep(500); //延时0.5秒
        }
        return false; // 如果取消了未成交的单子就返回false
    }
    return true; //如果没有未成交的订单就返回true
}
  • Обработка одиночных контрактов: isEven ()) При обработке сверхурочных сделок возникает одностороннее положение, где прямым способом обработки всех позиций является простое сверление. Конечно, можно также перейти к методу отслеживания.
Data.prototype.isEven = function () {
    var positionData = this.positionData; // 获取持仓信息
    var type = null; // 转换持仓方向
    // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组
            if (positionData[i].Type == 0) { // 如果是多单
                type = 10; // 设置下单参数
            } else if (positionData[i].Type == 1) { // 如果是空单
                type = -10; // 设置下单参数
            }
            // 平掉所有仓位
            this.trade(positionData[i].ContractType, type, positionData[i].Amount);
        }
    }
}
  • Функция рисования:drawingChart () Призыв метода 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, [nowTime, this.basb]]);
    ObjChart.add([4, [nowTime, this.sabb]]);
    ObjChart.update(chart);
}

4. Исполняет код для предварительного обработки транзакций внутри входной функции main (), который выполняется только один раз после запуска программы; включает:

  • Не очень важная информация в фильтре.SetErrorFilter ( )
  • Настройка цифровых валют для торговлиexchange.IO ( )
  • Графики, сделанные до запуска программыObjChart.reset ( )
  • Информация о статусе перед запуском программыLogProfitReset ( )

После определения вышеперечисленной предварительной обработки транзакций следует перейти к следующему шагу, перейти в режим просмотра, повторить выполнение функции onTick (); и установить время покоя при просмотрах Sleep (), поскольку API некоторых цифровых валютных бирж устанавливают встроенные ограничения на количество посещений в течение определенного времени.

function main() {
    // 过滤控制台中不是很重要的信息
    SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP");
    exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种
    ObjChart.reset(); //程序启动前清空之前绘制的图表
    LogProfitReset(); //程序启动前清空之前的状态栏信息
    while (true) { // 进入轮询模式
        onTick(); // 执行onTick函数
        Sleep(500); // 休眠0.5秒
    }
}

Второе, получать и вычислять данные

  1. Получение базовых объектов данных, балансов счетов, данных по индикаторамboll для использования в логике торговли.
function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象
    var accountStocks = data.accountData.Stocks; // 账户余额
    var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据
    if (!boll) return; // 如果没有boll数据就返回
}

Третье, подать заявку и последующее рассмотрение

  1. В соответствии с вышеизложенной стратегической логикой, выполняется операция покупки и продажи. Сначала определяется, соответствуют ли условия цены и показателя, затем определяется, соответствуют ли условия хранения, и, наконец, выполняется функция trade ().
// 价差说明
// basb = (合约A卖一价 - 合约B买一价)
// sabb = (合约A买一价 - 合约B卖一价)
if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨
    if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
        data.trade(tradeTypeA, "closebuy"); // 合约A平多
    }
    if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
        data.trade(tradeTypeB, "closesell"); // 合约B平空
    }
} else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨
    if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
        data.trade(tradeTypeA, "closesell"); // 合约A平空
    }
    if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
        data.trade(tradeTypeB, "closebuy"); // 合约B平多
    }
}
if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额
    if (data.basb < boll.down) { // 如果basb价差低于下轨
        if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
            data.trade(tradeTypeA, "buy"); // 合约A开多
        }
        if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
            data.trade(tradeTypeB, "sell"); // 合约B开空
        }
    } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨
        if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
            data.trade(tradeTypeA, "sell"); // 合约A开空
        }
        if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
            data.trade(tradeTypeB, "buy"); // 合约B开多
        }
    }
}
  1. После того, как заказ будет завершен, необходимо обрабатывать нерегулярные ситуации, такие как невыполненные заказы, наличие отдельных контрактов, а также рисовать графики.
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约

Мы создали более 200 строк, чтобы создать простую стратегию долгосрочного сбора цифровой валюты.

// 全局变量
// 声明一个配置图表的 chart 对象
var chart = {
    __isStock: true,
    tooltip: {
        xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
    },
    title: {
        text: '交易盈亏曲线图(详细)'
    },
    rangeSelector: {
        buttons: [{
            type: 'hour',
            count: 1,
            text: '1h'
        }, {
            type: 'hour',
            count: 2,
            text: '3h'
        }, {
            type: 'hour',
            count: 8,
            text: '8h'
        }, {
            type: 'all',
            text: 'All'
        }],
        selected: 0,
        inputEnabled: false
    },
    xAxis: {
        type: 'datetime'
    },
    yAxis: {
        title: {
            text: '价差'
        },
        opposite: false,
    },
    series: [{
        name: "上轨",
        id: "线1,up",
        data: []
    }, {
        name: "中轨",
        id: "线2,middle",
        data: []
    }, {
        name: "下轨",
        id: "线3,down",
        data: []
    }, {
        name: "basb",
        id: "线4,basb",
        data: []
    }, {
        name: "sabb",
        id: "线5,sabb",
        data: []
    }]
};
var ObjChart = Chart(chart); // 画图对象
var bars = []; // 存储价差序列
var oldTime = 0; // 记录历史数据时间戳

// 参数
var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量

// 基础数据
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
    this.accountData = _C(exchange.GetAccount); // 获取账户信息
    this.positionData = _C(exchange.GetPosition); // 获取持仓信息
    var recordsData = _C(exchange.GetRecords); //获取K线数据
    exchange.SetContractType(tradeTypeA); // 订阅套利A合约
    var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
    exchange.SetContractType(tradeTypeB); // 订阅套利B合约
    var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
    this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
    this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
    this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
    this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
    this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
    // 正套价差(合约A卖一价 - 合约B买一价)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // 反套价差(合约A买一价 - 合约B卖一价)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}

// 获取持仓
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // 获取持仓信息
    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指标数据
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // 临时对象
    // 正套价差和反套价差中间值
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // 对比两个深度数据时间戳
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // 根据指定时间周期,在K线数组里面传入价差数据对象
    if (bars.length > num * 2) {
        bars.shift(); // 控制K线数组长度
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
    return {
        up: boll[0][boll[0].length - 1], // boll指标上轨
        middle: boll[1][boll[1].length - 1], // boll指标中轨
        down: boll[2][boll[2].length - 1] // boll指标下轨
    } // 返回一个处理好的boll指标数据
}

// 下单
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // 下单前先重新订阅合约
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // 如果是A合约下单
        askPrice = this.askA; // 设置askPrice
        bidPrice = this.bidA; // 设置bidPrice
    } else if (tradeType == tradeTypeB) { // 如果是B合约下单
        askPrice = this.askB; // 设置askPrice
        bidPrice = this.bidB; // 设置bidPrice
    }
    switch (type) { // 匹配下单模式
        case "buy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}

// 取消订单
Data.prototype.cancelOrders = function () {
    Sleep(500); // 撤单前先延时,因为有些交易所你懂的
    var orders = _C(exchange.GetOrders); // 获取未成交订单数组
    if (orders.length > 0) { // 如果有未成交的订单
        for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
            exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
            Sleep(500); //延时0.5秒
        }
        return false; // 如果取消了未成交的单子就返回false
    }
    return true; //如果没有未成交的订单就返回true
}

// 处理持有单个合约
Data.prototype.isEven = function () {
    var positionData = this.positionData; // 获取持仓信息
    var type = null; // 转换持仓方向
    // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // 遍历持仓数

Связанные

Больше

Дианван99Учиться учиться

Папочка.Учиться

Кунфэн91Учиться