Оглавление
Глава 1 Основы количественной торговли
1.1 Что такое количественная торговля?
краткое содержание
Количественная торговля, как продукт сочетания науки и машин, меняет ландшафт современного финансового рынка. Сейчас многие инвесторы обратили внимание на эту сферу. Как минимизировать риски и добиться максимальной прибыли? Это также является целью этой серии курсов. В качестве первой статьи мы кратко объясним «Что такое количественная торговля».
Обзор
Когда многие люди слышат термин «количественная торговля», они думают, что это что-то высококлассное и что оно сделает их богатыми в одночасье. Эпоха искусственного интеллекта, сопровождаемая развитием передовых технологий, таких как глубокое обучение, большие данные и облачные вычисления, придала ему таинственный оттенок. Похоже, что при использовании количественной торговли можно построить «идеальную» торговую стратегию.
На самом деле, в определенной степени количественная торговля стала мифом. Если отвлечься от торговли, «квантификация» на самом деле представляет собой использование компьютеров, статистики, математики и других методов с помощью научной инвестиционной системы для нахождения набора ожидаемых систем торговых сигналов. Эта сигнальная система подскажет нам, когда и по какой цене следует покупать и продавать.
Развитие количественной торговли
Возвращаясь к первоисточнику, человек, который первым применил количественные методы для анализа изменений данных и выявления закономерностей колебаний рыночных цен, не был ни голландцем, родиной акций, ни британцем, продвигавшим современные финансы, ни американцем, сосуществовавшим с финансами с момента основания страны, а был французом.
Еще в XVIII веке помощник французского биржевого маклера Жюль Реньо предложил современную теорию изменения цен акций. Позднее он опубликовал книгу «Расчет вероятности и философия торговли акциями», в которой подробно изложил открытый им закон рыночных подъемов и спадов (нормальное распределение): «Отклонение цены пропорционально квадратному корню времени», и в конечном итоге добился успеха в торговле посредством рациональных и количественных инвестиционных решений.
В наши дни, в эпоху Интернета + больших данных + облачных вычислений + искусственного интеллекта, количественная торговля также развивается быстрыми темпами. Лондонский Кэнэри-Уорф, некогда являвшийся мировым финансовым центром, давно превратился в центр ИТ-компаний. Ведущие мировые инвестиционные банки также создают собственные количественные команды, пытаясь присоединиться к финансовой войне «кто получит модель, тот победит в мире». Эти ИТ-команды, которые разрабатывают торговые модели, также называются квантовыми командами. С точки зрения масштаба, Соединенные Штаты, которые начали раньше, уже имеют большое количество сильных количественных хедж-фондов.
Напротив, в Китае как аппаратное обеспечение, так и возможности инвестиционных исследований все еще находятся на начальных стадиях развития. Однако все больше и больше учреждений и профессиональных инвесторов осознали преимущества количественной торговли и приняли участие в этой области. Особенно по мере того, как надзор становится все более строгим, а эффективность рынка постепенно повышается, количественная торговля имеет более широкие возможности для роста.
Характеристики количественной торговли
Научная проверка: Представьте, что если у вас есть торговая система, и вы используете смоделированную торговую систему для проверки ее эффективности, это может занять огромное количество времени. Если вы протестируете ее напрямую с реальной торговой системой, вы можете потерять реальные деньги. Однако функция бэктестинга в количественной торговле может использоваться для научного тестирования торговой системы с использованием большого объема исторических данных. Позвольте данным говорить о том, что работает, а что нет, вместо того, чтобы просто следовать за толпой.
Объективный и точный: В торговле наш настоящий враг — это мы сами. Управлять своим менталитетом легче сказать, чем сделать. Человеческие слабости, такие как жадность, страх и удача, будут многократно усилены на рынке торговли. Количественная торговля может помочь нам преодолеть эти слабости и принимать более обоснованные решения в торговле.
Своевременно и эффективно: В субъективной торговле скорость реакции людей не может быть выше, чем у компьютеров, а физическая сила и энергия людей не могут работать 24 часа в сутки. На торговом рынке, где возможности мимолетны, количественная торговля может полностью заменить субъективную торговлю, находить торговые возможности и отслеживать изменения рынка своевременно и быстро.
Контроль риска: Количественная торговля позволяет не только изучать исторические закономерности, которые могут повториться в будущем на основе исторических данных, но и эти исторические закономерности также являются стратегиями с более высокой вероятностью выигрыша. Вы также можете сформировать различные инвестиционные портфели, чтобы снизить системные риски и сгладить кривую финансирования.
Каковы классические торговые стратегии для количественной торговли?
Стратегия открытия прорыва
Первые полчаса после открытия часто могут определить тренд дня. Эта стратегия использует то, находится ли цена на положительной или отрицательной линии в течение получаса после открытия, в качестве стандарта для оценки тренда дня. Если это положительная линия, откройте позицию на покупку; если это отрицательная линия, откройте позицию на продажу и закройте позицию в течение нескольких минут перед закрытием. Это очень простая торговая стратегия.
Стратегия канала Дончиана
Рисунок 1-1 Диаграмма стратегии канала Дончиана
Стратегию канала Дончиана можно считать родоначальником внутридневной торговли. Ее правила таковы: покупать, если текущая цена выше самой высокой цены предыдущих N K-линий; продавать, если текущая цена ниже самой низкой цены предыдущих N K-линий. Знаменитые правила торговли Черепахами используют модифицированную версию стратегии канала Дончиана.
Стратегия арбитража между периодами
Кросс-периодный арбитраж — наиболее распространенный тип арбитражной сделки. Он основан на ценах контрактов с разными месяцами поставки для одного и того же торгового продукта. Если между двумя ценами существует большая разница в цене, фьючерсные контракты разных периодов могут покупаться и продаваться одновременно для проведения кросс-периодного арбитража. Предположим, что разница в цене между основным контрактом и вторичным основным контрактом остается на уровне около -50~50 в течение длительного времени. Если в определенный день спред достигает 70, мы ожидаем, что в какой-то момент в будущем спред вернется к 50. Затем вы можете продать основной контракт и одновременно купить вторичный основной контракт, чтобы зашортить разницу в ценах. наоборот.
Подвести итог
Выше мы кратко представили соответствующие концепции количественной торговли с точки зрения ее определения, развития, характеристик и классических торговых стратегий.
Понимание количественной торговли — важный шаг на пути к становлению квантовым аналитиком. Наконец, я желаю всем обогатиться на медвежьем рынке и как можно скорее реализовать свои знания! Помните, от финансовой свободы вас отделяет всего один бычий рынок!
Предварительный просмотр следующего раздела
В чем разница между количественной и традиционной торговлей? Что следует выбрать в реальной торговле: традиционную или количественную торговлю? В следующем разделе мы рассмотрим эти два вопроса для дальнейшего понимания количественной торговли.
Домашнее задание
- Кратко опишите одним предложением, что такое количественная торговля?
- Каковы характеристики количественной торговли?
1.2 Почему стоит выбрать количественную торговлю
краткое содержание
Многие люди используют сложное стратегическое программирование в качестве отправной точки при обсуждении количественной торговли, непреднамеренно набрасывая завесу таинственности на количественную торговлю. В этом разделе мы попытаемся сделать простой "набросок" количественной торговли на понятном языке, чтобы раскрыть ее тайну. Я считаю, что даже новичок без базовых знаний сможет легко ее понять.
Разница между количественной торговлей и субъективной торговлей
Субъективная торговля больше внимания уделяет человеческому анализу и рыночному чутью. Даже если появляются сигналы покупки и продажи, заказы будут размещаться выборочно. Люди скорее пропустят рынок, чем совершат ошибку. Человеческие чувства сложны, изменчивы и ненадежны. Как только большинство трейдеров сталкиваются с последовательными убытками, они, как правило, переключаются на другой метод. Он крайне непредсказуем и легко подвержен прибылям и убыткам, что затрудняет получение стабильной прибыли.
Количественная торговля разрабатывает последовательные стратегии покупки и продажи посредством понимания транзакций. В торговле относитесь ко всем трендам одинаково, и систематически открывайте и закрывайте позиции. Лучше ошибиться, чем упустить. Он также имеет полную систему оценки, которая определяет, для какого типа рынка и продуктов стратегия больше подходит, посредством бэктестинга исторических данных, и достигает прибыльности за счет комбинирования нескольких стратегий и продуктов.
Короче говоря, субъективная торговля является основой количественной торговли, а количественная торговля является усовершенствованием субъективной торговли. Субъективная торговля больше похожа на практику боевых искусств. Сможете ли вы в конечном итоге добиться успеха, зависит в основном от вашего таланта. Некоторые люди могут не достичь просветления за десять лет, в то время как другие могут достичь просветления за один день. Количественная торговля больше похожа на фитнес. Пока вы усердно работаете, вы можете нарастить мышцы, даже если у вас нет таланта.
Лучше ли количественная торговля, чем субъективная?
Успешный субъективный трейдер в некотором смысле также является количественным трейдером. Потому что успешный субъективный трейдер должен иметь свой собственный набор правил и методов, то есть торговую систему. Успешная субъективная торговля должна основываться на торговой дисциплине и торговых правилах, а часть исполнения торговых правил на самом деле является количественной частью субъективной торговли.
Напротив, успешный количественный трейдер должен быть также превосходным субъективным трейдером, поскольку разработка количественных торговых стратегий фактически является кристаллизацией торговой философии человека. Если восприятие и понимание рынка изначально неверны, то разработанные торговые стратегии вряд ли принесут прибыль в долгосрочной перспективе.
Таким образом, с точки зрения прибыльности, ключевым фактором, определяющим, сможет ли трейдер в конечном итоге добиться успеха, является торговая философия, а не то, является ли это субъективной торговлей или количественной торговлей. Количественная торговля может показаться высокопарной на первый взгляд, но ее суть прибыли ничем не отличается от субъективной торговли по сути. Они как две стороны одного и того же, которые одновременно противоположны и едины.
Но нельзя отрицать, что количественная торговля имеет много преимуществ с точки зрения торговых инструментов.
Более быстрый обзор: Если вы хотите протестировать торговую стратегию, вам нужно рассчитать большой объем исторических данных. Количественная торговля может рассчитать результаты в течение нескольких минут. Эта скорость во много раз превышает скорость субъективной торговли.
Более научно:Чтобы оценить, хороша ли стратегия, мы полагаемся на данные (такие как коэффициент Шарпа, максимальная скорость просадки, годовая доходность), а не на корыстных шарлатанов.
Больше возможностей:В мире существуют тысячи торговых продуктов. Невозможно одновременно отслеживать рынок для субъективной торговли, но количественная торговля может отслеживать весь рынок в режиме реального времени, не упуская ни одной торговой возможности и увеличивая прибыльность.
Может ли количественная торговля действительно приносить прибыль?
Конечно, можно, но долго придерживаться этого правила сложно. Зарабатываете ли вы деньги или нет, не зависит от самой количественной торговли, это всего лишь инструмент. Количественная торговля просто реализует торговые идеи запрограммированным, регулярным и количественным образом. Программа только заменяет исполнение. Трудность заключается в стабильном зарабатывании денег в долгосрочной перспективе, поскольку рынок — это игра, которая динамично меняется, и торговые идеи также должны меняться вместе с рынком.
Риски количественной торговли
Количественная торговля также сопряжена с рисками. Почему? Потому что количественная торговля заключается в обнаружении закономерностей в исторических данных и формировании торговых стратегий. Однако финансовый рынок — это экологическая система, а его законы и человеческая природа — это интерактивный динамический процесс. В конечном счете, это все еще человеческий рынок. Законы рынка будут зависеть от человеческой природы, а жадность и страх в человеческой природе будут меняться вместе с изменениями на рынке. На рынке очень мало неизменных законов. Какой бы мощной ни была торговая стратегия, трудно справиться с такими внезапными изменениями законов.
Подвести итог
Из вышеприведенного объяснения мы видим, что количественная торговля — это не уникальный метод торговли, а всего лишь торговый инструмент, помогающий нам анализировать логику торговли и улучшать торговые стратегии. Независимо от того, являетесь ли вы стоимостным инвестором или техническим инвестором, инвестируете ли вы в акции, облигации, сырьевые товары или опционы, на самом деле все можно оценить количественно. По сравнению с трейдерами, которые принимают решения на основе личного опыта, оружием в руках количественных трейдеров являются рыночные данные и рациональность.
Предварительный просмотр следующего раздела
Количественная оценка — это всего лишь метод торговли, стратегия — всего лишь носитель торговых идей, а программа выполняет каждый торговый процесс. В следующем разделе вы узнаете о полном жизненном цикле количественной торговли, который будет включать: концепцию стратегии, построение модели, бэктестинг и настройку, имитационную торговлю, реальную торговлю, мониторинг стратегии и т. д.
Домашнее задание
- В чем заключается наиболее важное различие между количественной и субъективной торговлей?
- Каковы преимущества количественной торговли по сравнению с субъективной торговлей?
1.3 Что нужно подготовить для количественной торговли?
краткое содержание
Полный жизненный цикл количественной торговли — это не только сама торговая стратегия. Он состоит как минимум из шести звеньев, включая: концепцию стратегии, построение модели, бэктестинг и настройку, имитационную торговлю, реальную торговлю, мониторинг стратегии и т. д.
Стратегическое мышление
Прежде всего, чтобы заниматься количественной торговлей, вам необходимо вернуться на торговый рынок, больше наблюдать за ценами на рынке, понять законы рыночных колебаний, попытаться вывести логику каждой сделки и, наконец, обобщить торговую стратегию. Здесь нет короткого пути. Возможно, вам придется почитать классические книги по инвестициям или продолжить торговать и учиться на своих неудачах.
Для новичков в количественной торговле лучшим способом разработки торговых стратегий на начальном этапе является подражание. Непосредственно используйте существующие индикаторы технического анализа для построения логики стратегии и прописывания правил покупки и продажи, чтобы получить простую стратегию. Предположим, ваша торговая стратегия такова: покупать, если цена выше средней цены за последние 10 дней, и продавать, если цена ниже средней цены за последние 10 дней. Тогда его архитектура будет выглядеть следующим образом (как показано ниже):

Рисунок 1-2 Пример торговой стратегии
Конечно, по мере накопления опыта в разработке стратегий и формирования собственного метода торговли ваши логические выборы будут становиться все более разнообразными, и вы перейдете к более систематической количественной торговле. Если вы можете быть трейдером с количественным мышлением, будь то на фондовом или фьючерсном рынке, это благословение, потому что такой человек имеет устойчивую и стабильную прибыль, независимо от того, на каком рынке торговли он находится.
Построение модели
Во-вторых, вам необходимо освоить инструмент количественной торговли, чтобы писать торговые стратегии и реализовывать свои торговые идеи. Можно использовать любое распространенное на рынке программное обеспечение. Но если вы хотите стать высококлассным количественным трейдером, вам нужно научиться
Знать компьютерный язык. Я рекомендую Python, потому что это авторитетный язык для научных вычислений.
Он также предоставляет различные пакеты анализа с открытым исходным кодом, обработки файлов, работы в сети, баз данных и т. д.
Если ваши способности к программированию слабы, что считается слабым местом большинства новичков, рекомендуется использовать относительно простой визуальный язык программирования или язык Mai, который может повысить ваш интерес к изучению количественной торговли и позволит вам сосредоточиться на стратегиях и эффективно завершить разработку стратегий. Как показано ниже: Используя язык Mai, разработайте торговую стратегию, как указано выше. Дважды щелкните изображение, чтобы увидеть подробные комментарии в коде стратегии.

Рисунок 1-3 Страница разработки торговой стратегии
Код стратегии на рисунке выше демонстрируется с использованием языка Mai количественного инструмента изобретателя. Он объединяет множество функциональных модулей, которые можно использовать напрямую, и поддерживает функции бэктестинга и реальной торговли. Это хороший способ быстро начать.
Тестирование на исторических данных и настройка
Затем, после написания стратегической модели, следующим шагом будет тестирование стратегии на исторических данных, а также проверка и оптимизация параметров. Вы можете использовать различные параметры для бэктестинга стратегии и наблюдать за коэффициентом Шарпа стратегии, максимальной просадкой, годовой доходностью и т. д. Постоянно отлаживая и модифицируя стратегию, мы в конечном итоге получим полноценную количественную торговую стратегию.
Например, мы берем исторические данные за 2017 год как данные внутри выборки, а исторические данные за 2018 год — как данные вне выборки. Сначала мы используем данные 2017 года для оптимизации нескольких наборов параметров с хорошей производительностью, а затем используем эти параметры для оптимизации 2018 года.
Тестирование данных на исторических данных. В общем, результаты тестирования вне выборки не так хороши, как результаты тестирования внутри выборки. Однако, если результаты тестирования вне выборки и внутри выборки сильно различаются, то стратегия практически неэффективна, и необходимо наблюдать и анализировать, чтобы определить причины неудачи стратегии.
Предположим, что мы обнаружили, что стратегия терпит неудачу из-за данных, выходящих за пределы выборки, и что большие убытки вызваны определенными экстремальными рыночными условиями, тогда мы можем добавить фиксированное условие стоп-лосса, чтобы избежать этого риска; если мы обнаружили, что стратегия терпит неудачу из-за слишком большого количества транзакций, то мы можем немного ужесточить торговую логику и уменьшить частоту торговли.
Следует отметить, что если сама торговая логика изначально неверна, то будет сложно получить прибыльную стратегию, как бы вы ее ни модифицировали. В это время вам нужно пересмотреть свое стратегическое мышление. Кроме того, при оптимизации параметров, чем больше доступных групп параметров, тем лучше, что указывает на широкую применимость стратегии. При бэктестинге стратегии со слишком малым количеством сделок могут страдать от ошибки выжившего. Если результатом бэктеста является сверхприбыльная кривая фонда
Во многих случаях ваша логика неверна.
Имитационная торговля
Затем, когда у вас появится стратегия с правильной торговой логикой, приносящая прибыль как внутри выборки, так и за ее пределами, не спешите торговать на реальном счете. Особенно для новичков необходимо вести имитационный счет не менее 3 месяцев. Если это средне- или низкочастотная стратегия переноса на следующий день, потребуется более длительное имитационное время торговли.
На совершенно неизвестном моделируемом рынке в будущем наблюдайте за эффективностью стратегии в моделируемой торговле, внимательно проверяйте, соответствует ли сигнал бэктеста моделируемому торговому сигналу, и есть ли отклонение между ценой при размещении ордера и ценой при завершении транзакции. Если эффективность соответствует ожиданиям, то это означает, что стратегия эффективна.
Реальная торговля
Наконец, после длительного тестирования стратегии, настало время применить ее в реальной торговле. Конечно, мы также должны сохранять бдительность и остерегаться экстремальных рыночных условий во время количественной торговли. В реальной торговле ожидания от стратегии, как правило, не учитываются, и достижение 50% ожиданий считается успешным.
Мониторинг политики
Наконец, мне нужно напомнить всем, что по мере продвижения торговли мы также должны наблюдать за эффективностью стратегии. Когда мы обнаруживаем, что стратегия имеет убытки, превышающие ожидания, мы должны переоценить стратегию. Поскольку характеристики рынка будут меняться, стратегии, которые мы формируем сейчас, в основном нацелены на прошлые характеристики рынка. При изменении характеристик рынка необходимо своевременно скорректировать модель стратегии или временно приостановить ее реализацию.
Подвести итог
В этой статье мы объясним весь процесс количественной торговли. Короче говоря, если вы инвестор с опытом работы на рынке, то вас будут сдерживать основы компьютерного языка. Вы можете начать с визуального языка или языка Mai, потренироваться на этой платформе, построить стратегии, а затем постепенно перейти к высококлассной количественной торговле на Python.
Если вы студент-естественник и инженер или ИТ-практик с хорошими навыками программирования, то вам будет мешать опыт рыночных инвестиций. Не стоит недооценивать этот момент. Как квалифицированный количественный инвестор, оба типа знаний являются незаменимыми.
Предварительный просмотр следующего раздела
Основой всего жизненного цикла количественной торговли по-прежнему является торговая стратегия. В следующем разделе мы подробно рассмотрим элементы полной торговой стратегии с точки зрения структуры торговой стратегии. Это поможет вам более комплексно выстроить свою торговую стратегию и вывести количественную торговлю на новый уровень!
Домашнее задание
- Попробуйте написать торговую стратегию в этом разделе, используя язык Mai.
- Какой показатель эффективности является наиболее важным при количественном трейдинговом бэктестинге?
1.4 Каковы элементы полной стратегии?
краткое содержание
Полная стратегия на самом деле представляет собой набор правил, которые трейдеры устанавливают для себя. Она охватывает все аспекты сделки и не оставляет места для субъективного воображения трейдеров. Стратегия даст ответ на каждое решение о покупке и продаже. Он включает в себя как минимум выбор стратегии, выбор продукта, управление капиталом, размещение заказов, реагирование на экстремальные рыночные условия, торговый менталитет и т. д.
Выбор стратегии
С точки зрения хедж-фондов основные торговые стратегии можно разделить на трендовую торговлю, парную торговлю, корзинную торговлю, событийную торговлю, высокочастотную торговлю, опционные стратегии и т. д., как показано на рисунке ниже. Конечно, способ классификации стратегий не является фиксированным.

Рисунок 1-4 Классификация торговых стратегий
Для новичков в количественной торговле вам не нужно беспокоиться о таком количестве терминов и понятий. Просто начните с самого простого шаг за шагом. Если я и рекомендую новичкам только одну количественную торговую стратегию, то это торговля по тренду, потому что она проста и эффективна. Я считаю, что даже если вы не будете систематически изучать финансовые знания, вы все равно сможете успешно торговать. И эта стратегия существовала уже долгое время, в ранних стратегиях публичной торговли, и она по-прежнему эффективна на многих рынках сегодня, потому что человеческую природу трудно изменить.
Что покупать и продавать
Любой, кто занимался торговлей, должен знать, что каждый сорт имеет свою индивидуальность. Некоторые сорта обладают очень «горячим» характером, хорошей ликвидностью, большими колебаниями и высокой волатильностью; некоторые сорта обладают очень «послушным» характером, колеблясь в определенном диапазоне в течение всего года и имея низкую волатильность.
Поэтому при выборе торговых продуктов необходимо иметь понятие волатильности. Продукты с высокой волатильностью часто могут легко развить хорошую тенденцию. Для товарных фьючерсов, если это стратегия отслеживания тренда, попробуйте выбрать промышленные продукты. С точки зрения атрибутов продукта промышленные продукты, как правило, имеют большую волатильность, чем сельскохозяйственные продукты.
Различные стратегии адаптируются к различным рыночным условиям, и выбор правильных торговых продуктов является очень важным началом для большого проекта фьючерсной торговли. В абсолютном смысле не существует абсолютно хороших или абсолютно плохих сортов. В зависимости от вашего стиля инвестирования и готовности к риску вам необходимо внести соответствующие коррективы в свои собственные стандарты.
Сколько покупать и продавать
В торговле легко потерять деньги, но трудно их заработать. Когда средства на счете теряют 50%, требуется 100% прибыли, чтобы возместить убыток. Даже если вы можете получать 100% прибыли много раз, вам достаточно потерять 100% один раз, чтобы потерять все. Поэтому зрелая торговая стратегия должна включать управление капиталом.
Чтобы сделать это более понятным для всех, здесь также используется стратегия скользящей средней из предыдущего раздела. Фактически, многие торговые стратегии, построенные с использованием традиционных технических индикаторов, как правило, имеют максимальный уровень просадки более 50% и даже больше. Но это очень рискованная стратегия, которая совершенно неработоспособна?
Очевидно, что нет, поскольку максимальный уровень просадки можно полностью контролировать посредством управления фондом. Если позиция уменьшится вдвое, общий риск также уменьшится вдвое, а максимальная просадка составит 30%. Если позиция уменьшится еще вдвое, то максимальная просадка составит 15%. В итоге мы получаем стратегию с максимальной просадкой, контролируемой на уровне около 15%. Это простой и грубый метод управления деньгами. Многие знают, что они не могут работать с полной позицией, но они не знают, почему они не могут работать с полной позицией. Ответ здесь.
Когда покупать и продавать
Правильная точка покупки — это половина успеха, поскольку она может быстро вывести вас из зоны затрат. Но никто не может сказать вам, что начинать с этой точки правильно, а начинать с той — неправильно. Открытие позиции не является сутью торговли. Суть торговли заключается в том, как максимально оптимизировать позицию после открытия позиции.
Независимо от того, краткосрочная это стратегия или долгосрочная, значение имеет не то, кто дольше удерживает позицию, а соотношение риска и доходности. Другими словами, конечный результат, влияющий на эффективность стратегии, — это то, как выйти и когда получить прибыль. Методы выхода можно разделить на два типа: выход по стоп-лоссу и выход по тейк-профиту. Эти две части необходимы для любой торговой системы и также являются важными водоразделами, определяющими успех или неудачу торговой стратегии.
Как покупать и продавать
1. Вид и способ размещения заказа:
Существует множество типов и методов размещения ордеров, например: использование лимитных ордеров очереди, цены контрагента, последней цены, переоценки, верхней предельной цены, нижней предельной цены, первой цены покупки, второй цены покупки, первой цены продажи, второй цены продажи или использование сначала цены очереди, а затем переоценки, размещение ордеров партиями или разделение больших ордеров на более мелкие ордера или просто размещение всех ордеров напрямую.
2. Отменить заказ
Если ордер не выполнен, следует ли вам продолжать ждать или отменить ордер? Условие отмены основано на времени. Например, если в течение 10 секунд нет транзакции, а цена находится на расстоянии 10 прыжков от цены, когда был размещен ордер, следует ли вам продолжать ждать, отменить ордер или выполнить его.
3. Последующие заказы
Если заказ не выполнен, следует ли его выполнять. Если преследуем ордер, должны ли мы преследовать его по последней цене, цене контрагента или ценовому лимиту? Если преследуемый ордер еще не был выполнен, должны ли мы продолжать преследовать ордер?
4. Ценовой предел
Что делать, если сигнал ордера появляется на уровне верхней или нижней предельной цены? Стоит ли стоять в очереди на исполнение по верхней и нижней предельным ценам и что делать, если исполнение не произошло.
5. Аукцион звонков
Стоит ли участвовать в первом аукционе и как это сделать.
6. Ночная торговля
Для некоторых товарных фьючерсов ночная торговля проходит с 21:00 до 02:30 следующего дня. В течение этого периода вы можете выбрать, делать это вручную или с помощью компьютера.
7. Крупные фестивали
Нужно ли вам сохранять свои позиции перед сверхдлинными каникулами во время крупных фестивалей? Как контролировать риски в случае их сохранения.
Экстремальные рыночные условия
-
Значительные колебания цен за короткий период времени
Как справляться с такими ситуациями, как мгновенные ценовые лимиты, постоянные ценовые лимиты, ошибочные заказы, ценовые паники на рынке «черных лебедей» и т. д. -
Риск ликвидности
Если у контрагента нет нужного вам объема ордера, а вам необходимо завершить сделку вовремя, особенно когда ликвидность неосновных контрактов очень низкая, размещаемые вами ордера могут легко оказать влияние на рынок, а проскальзывание велико, как вам следует поступить в этой ситуации? -
Изменения в правилах отбора
В ночную торговлю добавляются товарные фьючерсы, увеличивается коэффициент маржи и увеличивается комиссия за обработку. Краткосрочные стратегии, в частности, будут очень чувствительны к этим изменениям. -
Риски торговой среды
Например: как реагировать на внезапные отключения электроэнергии, интернета, сбои в работе компьютеров, сбои программного обеспечения, приостановку переводов банковских фьючерсов, стихийные бедствия и т. д.
Вероятность возникновения вышеуказанной ситуации очень мала или практически невозможна. Но если это может произойти, это произойдет. Необходимо сделать эти предположения и принять меры предосторожности.
Психологическая конструкция
Три основные психологические эмоции, распространенные в трейдинге, — это жадность, страх и удача. Инвесторам необходима сильная система психологии торговли, чтобы контролировать и даже использовать три вышеуказанные эмоции на разных этапах.
Перед началом торговли у вас должны быть общие ожидания относительно будущего, включая ожидания рынка и психологические ожидания в отношении продукта. Ожидания рынка касаются четкой цели относительно положения рынка и будущего направления, а ожидания относительно продукта касаются торговых возможностей и статуса риска продукта в его текущем положении. Без вышеуказанной психологической основы ничего достичь невозможно.
Весь процесс реальной торговли — это процесс непрерывного анализа, коррекции и исполнения. На торговлю тратится не так много времени, но больше времени тратится на отслеживание и терпение. Это процесс, который всесторонне исследует менталитет и проверяет человеческую природу. Все привычки трейдеров будут полностью отображены и усилены в процессе торговли. Только постоянно изучая и обобщая опыт и уроки, продолжая приобретать опыт, мы можем преодолеть общие черты мышления и психологические слабости человеческой натуры.
Подвести итог
Подводя итог, так называемая торговая стратегия на самом деле такова. У нее есть идеальная сторона и неполная сторона. Когда мы измеряем, является ли торговая стратегия разумной, мы не можем смотреть только на ее идеальную сторону или неполную сторону. Мы должны всесторонне проанализировать целостность стратегии.
Наконец, основываясь на характеристиках стратегии, в сочетании с вашей собственной личностью и финансовым положением, оцените, подходит ли вам стратегия. Если она подходит вам, вы должны полностью оценить, насколько вероятно, что вы будете ее придерживаться, и заранее спланировать худший исход. Если вы продумали наихудший сценарий, то вероятность его реализации относительно высока.
Помните, в трейдинге уверенность исходит из вашего искреннего признания, а уверенность исходит из правильной торговой философии!
Предварительный просмотр следующего раздела
Это последняя статья первой главы. В следующей главе мы подробнее объясним инструменты количественной торговли, в том числе: общее введение в количественные инструменты, как настроить систему количественной торговли, общие объяснения API и как писать стратегии для количественной системы.
Домашнее задание
- Должны ли стратегии трендовой торговли выбирать продукты с высокой или низкой волатильностью?
- Какие существуют типы торговых ордеров?
Глава 2. Введение в количественные инструменты
2.1 Общее введение в количественные инструменты
краткое содержание
В предыдущей главе мы познакомились с соответствующими концепциями количественной торговли и получили базовое представление о количественной торговле. Итак, какие инструменты количественной торговли существуют на рынке? Как нам следует выбирать в соответствии с нашими потребностями?
Открытое и коммерческое программное обеспечение
Внутренние инструменты количественной торговли можно разделить на две категории: программное обеспечение с открытым исходным кодом и коммерческое программное обеспечение. Так называемое программное обеспечение с открытым исходным кодом можно понимать как программное обеспечение, исходный код которого открыт и может быть напрямую загружен для использования; под коммерческим программным обеспечением обычно понимается программное обеспечение с закрытым исходным кодом, которое поддерживается и эксплуатируется коммерческими компаниями, которым обычно платят.
Количественное программное обеспечение с открытым исходным кодом
Прежде всего, программное обеспечение с открытым исходным кодом обладает большой гибкостью и является полностью бесплатным. Пользователи могут в основном использовать это программное обеспечение для реализации любой функции, будь то средне- или низкочастотные торговые стратегии, арбитражные стратегии или опционные стратегии, которые могут быть достигнуты с помощью настраиваемых модулей. Поскольку пользователи контролируют исходный код программного обеспечения и могут понять каждый уголок программного обеспечения, оно более надежно и безопасно.
Хотя программное обеспечение с открытым исходным кодом имеет много преимуществ, оно не очень дружелюбно к новичкам в количественной торговле. Вам нужно систематически изучать стандартный язык программирования, такой как Python, Java или C++. От начала до сдачи, вы можете себе представить, насколько это сложно. Иногда отладка ошибок может заставить вас усомниться в своей жизни. И в отличие от коммерческого программного обеспечения, существуют специальные службы технической поддержки клиентов, которые мгновенно ответят на ваши вопросы. В этот момент вы не только не почувствуете чувства выполненного долга, но и отобьете желание продолжать обучение.
Поэтому, с точки зрения обучения, рекомендуется, чтобы начинающие в количественной торговле начинали шаг за шагом, начиная с самого простого коммерческого программного обеспечения. Хотя оно платное, если стратегия прибыльная, плата за программное обеспечение составляет лишь часть прибыли. Более того, коммерческое программное обеспечение, как правило, поддерживается командой, и его зрелость определенно намного сильнее, чем программное обеспечение с открытым исходным кодом.
Программное обеспечение для количественного анализа бизнеса
В Китае существуют десятки коммерческих программ для количественной торговли, например: Interactive Broker — профессиональное, комплексное решение, имеющее множество продуктов; APAMA, способное обрабатывать большие объемы параллельных данных и подходящее для высокочастотной торговли; SPT, поддерживающее интерфейс C++ и имеющее хорошую эффективность исполнения; Nuggets Quantitative, ориентированное на исполнение транзакций и контроль рисков; а также MC, TB и MQ для индивидуальных трейдеров. На рисунке ниже мы провели комплексную оценку основных отечественных количественных платформ, а также сделали определенную классификацию сложности количественных инструментов. Читатели могут выбирать в соответствии со своей реальной ситуацией.

Рисунок 2-1 Комплексная оценка основных отечественных количественных платформ
Хотя вышеперечисленное является коммерческим программным обеспечением, оно также использует стандартные языки программирования или языки сценариев. Вместо этого лучше напрямую использовать программное обеспечение с открытым исходным кодом, которое является бесплатным и безопасным. Начинающим рекомендуется напрямую использовать количественную платформу FMZ Inventor, веб-сайт — www.fmz.com. В качестве отправной точки для изучения количественной торговли.
Познакомьтесь с изобретателем инструментов количественной торговли
Количественные инструменты изобретателя дружелюбны к новичкам. Даже если у вас нет базовых знаний, вы можете ощутить прелесть количественного анализа, основанного на инструментах в нем. Этот инструмент предназначен для высокочастотной торговли и предъявляет строгие требования к производительности и безопасности. Поддержка высокочастотных стратегий, арбитражных стратегий и трендовых стратегий. И он объединяет полный процесс разработки стратегии, тестирования, оптимизации, моделирования и реальной торговли. Кроме того, он поддерживает как простой и удобный в использовании язык Mai, так и продвинутые языки количественной торговли, такие как Python и C++, что означает беспроблемное переключение после одного обучения. И только реальная торговля оплачивается по 0,125 юаней/час, что снижает ваши затраты на программное обеспечение на этапе обучения. В то же время вы можете заниматься имитацией торговли бесплатно.
Первый шаг к количественной оценке: использование количественных инструментов
Количественные инструменты очень просты в использовании. Вам нужно только зайти на сайт и нажать на него, чтобы разработать собственную количественную стратегию. Вы можете войти на официальный сайт Inventor Quantitative Tool, зарегистрироваться и войти в систему, а затем нажать на центр управления, чтобы использовать его (как показано ниже). Он похож на популярный в настоящее время TikTok. После регистрации и входа в систему вы можете публиковать собственные короткие видео, а после входа в количественный инструмент вы можете разработать собственную количественную торговую стратегию.

Рисунок 2-2 Главная страница количественной торговой платформы FMZ
Будет централизованная функциональная область для программирования количественных инструментов. Функциональная область в основном включает (как показано ниже). Центр управления в верхнем левом углу является основной функцией количественного инструмента. После нажатия на него вы можете писать торговые стратегии и бэктестинг стратегий, устанавливать биржу для торговых продуктов, создавать кастодиана для управления стратегическими роботами и создавать специальные количественные торговые роботы. Что касается конкретного использования функций, мы подробно представим их в последующих статьях. В настоящее время мы проводим только предварительную работу.

Рисунок 2-3 Страница управления после входа в количественную торговую платформу FMZ
Друзья, которые только начинают заниматься количественными исследованиями, не должны отчаиваться из-за непонимания кодов и программирования. Чтобы снизить порог для пользователей, официальное сообщество выпустило множество видеоуроков, которые помогут новичкам в количественной торговле быстро приступить к работе; в то же время Strategy Square объединяет тысячи официальных и сторонних бесплатных и открытых торговых стратегий, которые каждый может копировать и изучать.
Кроме того, классические образцы стратегий также настраиваются в интерфейсе редактирования стратегий. Вы можете напрямую использовать код стратегии, щелкнув по нему, и легко ощутить основной процесс всей количественной торговли. Даже начинающие пользователи могут немедленно изучить его и следовать ему!
Перед торговлей реальными деньгами симуляция торговли также является обязательным шагом. Имитация торговли этого инструмента соответствует правилам биржи и является полностью бесплатной. Время, цена, объем ордера и т. д., включенные в симуляцию, сопоставляются с реальным рынком в реальном времени, что в высокой степени соответствует реальной торговле. Значительно повысить эффективность проверки стратегии.
Подвести итог
Будь то программное обеспечение с открытым исходным кодом или коммерческое программное обеспечение, нет различия между хорошим и плохим, и нет идеального количественного торгового инструмента. Каждый инструмент имеет свою собственную направленность. Самое главное — выбрать инструмент, который подходит вам в соответствии с вашими потребностями. Коммерческое программное обеспечение является платным, оно лучше с точки зрения обслуживания и т. д. и может больше подойти новичкам, которые только выходят на рынок этой отрасли. Если вы работаете в этой отрасли уже долгое время и накопили большой опыт или вам необходимо реализовать более сложные торговые стратегии, лучшим выбором будет программное обеспечение с открытым исходным кодом.
Предварительный просмотр следующего раздела
Как использовать инструменты? Так же, как когда мы покупаем новый мобильный телефон и нам нужно выполнить простые настройки запуска, когда мы включаем его в первый раз, количественные инструменты также нуждаются в базовых настройках и конфигурациях. В следующем разделе мы шаг за шагом проведем вас по настройке количественного торгового инструмента Inventor. Откройте первую дверь к количественной торговле, включая: добавление бирж, добавление кастодианов, создание торговых стратегий, создание количественных роботов и т. д. После завершения базовой конфигурации вы можете официально написать свою первую количественную стратегию.
Домашнее задание
- Каковы две основные категории инструментов количественной торговли?
- Какие языки количественного программирования наиболее часто используются?
2.2 Как настроить систему количественной торговли Inventor
краткое содержание
При разработке количественных торговых стратегий первое, что нужно сделать, это настроить торговые инструменты. Что такое конфигурация? На самом деле это просто настройки. В этом разделе мы расскажем вам о настройке биржи, создании торговой стратегии и создании количественного торгового робота, которые являются необходимыми предпосылками для количественной торговли.
Конфигурация делится на конфигурацию обучения начального уровня для имитации торговли и конфигурацию торговли в реальном времени. В этой категории мы в основном фокусируемся на внутренних товарных фьючерсах. Другие типы количественных инвестиций не рекомендуются или не вводятся из-за специфических внутренних условий, но рабочий процесс тот же, отличается только процесс конфигурации.
Добавление биржи
Добавление обмена — это первый шаг во всем процессе настройки. Пожалуйста, смотрите рисунок ниже для конкретного процесса. На этом этапе нам необходимо подчеркнуть, что добавление биржи не составит труда для тех, кто не уверен, к какой бирже они принадлежат. Рекомендуется сначала смоделировать обучение.

Рисунок 2-4 Регистрация количественной торговой платформы FMZ и добавление шагов обмена
Конфигурация товарной фьючерсной биржи (в реальном времени)
Наша количественная торговля в реальном времени в основном фокусируется на внутренних фьючерсных торговых продуктах. В настоящее время основными объектами услуг Inventor Quantitative также являются внутренние фьючерсные биржи. Для друзей, которые занимаются иностранной валютой, Inventor Quantitative может использоваться в качестве обучающей платформы, поскольку количественная торговля иностранной валютой уже появилась на таких платформах, как MT5, но она более профессиональная.
При настройке в режиме реального времени необходимо учитывать следующие моменты: поскольку количественные инструменты изобретателя поддерживают несколько торговых рынков, при настройке товарных фьючерсов необходимо сначала выбрать «традиционные фьючерсы» на шаге 1; на шаге 2 необходимо указать фьючерсный счет и пароль, предоставленные вам фьючерсной компанией, в которой вы открыли счет.
Количественный инструмент изобретателя принимает протокол CTP и поддерживает все отечественные фьючерсные компании. При настройке реального рынка не будет сбоя связи, если только учетная запись и пароль неверны. Поэтому новичкам следует обратить внимание на четкую проверку учетной записи и пароля.

Рисунок 2-5 Платформа количественной торговли FMZ добавляет фьючерсную биржу
Конфигурация товарной фьючерсной биржи (симуляция)
Друзьям, которые только начинают заниматься товарными фьючерсами, я предлагаю сначала смоделировать торговлю в течение некоторого периода времени, поскольку в процессе разработки количественных торговых стратегий требуется постоянное тестирование, отладка и оптимизация. Как и в случае с вождением, сначала вам определенно придется потратить несколько месяцев на обучение в автошколе, а затем, сдав экзамен и получив права, вы сможете отправиться в путь.
Здесь мы рекомендуем использовать SimNow для имитации торговли. SimNow — это финансовая платформа для имитации торговли, специально созданная Shangqi Technology для инвесторов. Этот продукт имитирует правила торговли и расчетов различных бирж и в настоящее время поддерживает товарный фьючерсный бизнес различных внутренних фьючерсных бирж. Конкретный процесс см. на рисунке ниже.

Рисунок 2-6 Страница управления количественной торговой платформой FMZ после входа в систему
Написание стратегии
Библиотека стратегий — это место хранения кодов, что эквивалентно нашему хранилищу количественных торговых стратегий. В основном он делится на две функции: написание стратегии и бэктестинг-симуляция. Область написания стратегии — это наша основная рабочая область для разработки стратегий в будущем (как показано ниже). Многие новички часто блокируются различными кодами и считают это очень сложным. На самом деле, если вы уделите немного внимания, вы сможете выучить эти коды. Не испытывайте никакой психологической нагрузки. Область бэктестинга симуляции может использоваться для отладки стратегий в процессе разработки стратегии, а также для тестирования стратегий после завершения разработки стратегии. Мы подробно объясним это в следующих главах.

Рисунок 2-7 Шаги по созданию политики
Создание количественного торгового робота
Количественный торговый робот является исполнителем торговой стратегии. После создания стратегии создайте робота, который может автоматически помочь вам выполнить каждую торговую логику в коде стратегии, а также открывать и закрывать позиции, снимать ордера и другие операции купли-продажи. Конкретные шаги по созданию количественного торгового робота следующие: Первый шаг ①: На странице центра управления нажмите «Робот», нажмите «Создать робота». Шаг ②: Дайте роботу индивидуальное имя. Шаг 3: Нажмите на знак «+», чтобы добавить торговую платформу. Шаг 4: Нажмите «Создать робота».

Рисунок 2-8 Шаги создания робота
Подвести итог
В вышеописанном процессе, за исключением первого шага выбора реальной торговли и моделирования, последующие шаги по написанию стратегии и созданию торговых роботов являются унифицированными шагами. Весь количественный инструмент настроен, торговый робот уже запущен и будет совершать операции купли-продажи в соответствии с конкретными условиями стратегии. Настройка количественной торговли выполняется в три шага: добавьте биржу и введите пароль для своего фьючерсного счета; напишите торговую стратегию; и создайте количественного торгового робота в режиме реального времени. Разве это не просто?
Предварительный просмотр следующего раздела
Хотя количественную торговлю можно осуществить всего за три простых шага, вы можете обнаружить, что добавлять биржи и создавать количественных торговых роботов легко. Однако реализовать жизнеспособную торговую стратегию не так-то просто. В следующем разделе мы познакомим вас с наиболее часто используемыми API в количественной торговле, чтобы подготовиться к написанию реальной торговой стратегии. Потому что какой бы инструмент количественной торговли ни использовался, он неотделим от интерфейса API, который является важной функцией для реализации стратегий количественной торговли.
Домашнее задание
- Попробуйте добавить биржу.
- Попробуйте написать торговую стратегию в этом разделе.
2.3 Общее объяснение API
краткое содержание
Когда дело доходит до программирования, мы не можем обойти API. Для многих не-ИТ-людей, что именно представляет собой API? API ≈ Я не понимаю. В этом разделе мы простым языком объясним, что такое API, и познакомим вас с API, которые обычно используются в количественных инструментах изобретателей.
Что такое API?
Если вы выполните поиск в Интернете, вы получите следующие результаты: API (интерфейс прикладного программирования) — это набор предопределенных функций, цель которых — предоставить приложениям и разработчикам возможность доступа к набору процедур на основе определенного программного обеспечения или оборудования без необходимости доступа к исходному коду или понимания деталей внутреннего рабочего механизма. Итак, если говорить проще, что же такое API?
На самом деле, в нашей повседневной жизни у нас есть много сценариев, похожих на API. Например, когда вы идете в ресторан, чтобы поесть, вам просто нужно посмотреть меню и заказать еду, не зная, как она готовится. Названия блюд в меню — это конкретные API, а меню — это документация API.
Что такое API в количественной торговле?
Если вам нужно узнать начальную цену текущего продукта сегодня, вам не нужно знать, как ее получить. Вам просто нужно написать «OPEN» в редакторе кода и использовать его напрямую. «OPEN» — это API цены открытия на языке Mai.
Часто используемый API языка Mai
Прежде чем объяснять API языка Mai, давайте рассмотрим общую структуру кода и его функциональные компоненты. Это поможет вам лучше понять API. Смотрите пример ниже:

Рисунок 2-9 Пример языка Mai
Как показано в коде выше:
Фиолетовый АА — это переменная. Переменная — это величина, которая может меняться, как в алгебре, которую мы изучали в средней школе. Если цена открытия назначена на АА, то АА является ценой открытия; если наивысшая цена назначена на АА, то АА является наивысшей ценой. Конечно, AA — это всего лишь пользовательское имя, вы также можете определить его как BB.
Зеленый символ «:=» означает присваивание, то есть присвоение значения справа от «:=» переменной слева.
Оранжевый код — это API языка Mai инструмента Inventor Quantitative Tool. Обратите внимание, что OPEN в первой строке — это API для получения цены закрытия, которую можно использовать напрямую; MA во второй строке — это API для получения скользящей средней, которая требует передачи двух параметров, то есть вам нужно сообщить инструменту Inventor Quantitative Tool, какой тип скользящей средней вам нужен: если вы хотите получить 50-периодную скользящую среднюю, рассчитанную на основе цены открытия, вы можете записать ее как: MA(OPEN,50); обратите внимание, что между двумя параметрами есть английская запятая.
Желтый «//» — это символ комментария, а синие китайские иероглифы за ним — это содержимое комментария. Они предназначены для самостоятельного прочтения и используются для указания того, что означает строка кода. Программа не обрабатывает комментарии во время работы. Обратите внимание, что перед символом комментария в конце каждой строки кода должна стоять английская точка с запятой.
Имея базовое представление о структуре кода, мы познакомим вас ниже с некоторыми часто используемыми языками, которые мы также будем часто использовать в будущем.
ОТКРЫТО——Получите начальную цену последней K-line
Пример: AA: =OPEN; Получить цену открытия последней K-линии и присвоить результат AA
ВЫСОКАЯ ——Получите самую высокую цену на последнюю модель K-line
Пример: AA: =HIGH; Получить самую высокую цену последней K-линии и присвоить результат AA
НИЗКАЯ——Получите самую низкую цену на последнюю модель K-line
Пример: AA: =LOW; Получить самую низкую цену последней K-линии и присвоить результат AA
ЗАКРЫТЬ——Получите последнюю цену закрытия линии К. Когда внутридневная линия К не завершилась, получите последнюю цену
Пример: AA: =CLOSE; Получить цену закрытия последней K-линии и присвоить результат AA
VOL——Получите последние данные по объему транзакций K-line
Пример: AA: =VOL; Получить последний объем транзакций K-line и присвоить результат AA
REF(X,N) — ссылается на значение X N циклов назад.
Пример: REF(CLOSE,1); Получить цену открытия предыдущей K-линии
MA(X,N) ——Найти простое скользящее среднее значение X за N периодов
Пример: MA(CLOSE,10); //Получаем 10-периодную скользящую среднюю последней K-линии
CROSSUP(A,B) — Когда A пересекает B снизу вверх, возвращается 1 (Да), в противном случае возвращается 0 (Нет)
Пример: CROSSUP(CLOSE,MA(C,10)) // Цена закрытия пересекает 10-периодную среднюю цену
CROSSDOWN(A,B) — Когда A пересекает B сверху, возвращается 1 (Да), в противном случае возвращается 0 (Нет)
Пример: CROSSDOWN(CLOSE,MA(C,10)) // Цена закрытия пересекает вниз 10-периодную среднюю цену
BK——Купить Открытие Позиции
Пример: CLOSE>MA(CLOSE,5),BK; //Цена закрытия больше 5-периодной скользящей средней, позиция покупки
SP——Продать, чтобы закрыть позицию
Пример: CLOSE<MA(CLOSE,5),SP; // Цена закрытия меньше 5-периодной скользящей средней, продаем и закрываем позицию
SK——Продажа Открытие Позиции
Пример: CLOSE<MA(CLOSE,5),SK; //цена закрытия меньше 5-периодной скользящей средней, позиция продажи
BP ——Купить для закрытия
Пример: CLOSE>MA(CLOSE,5),BP; //Цена закрытия больше 5-периодной скользящей средней, покупаем и закрываем позицию
BPK ——Купить, чтобы закрыть позицию, и купить, чтобы открыть позицию (обратная длинная позиция)
Пример: CLOSE>MA(CLOSE,5),BPK; // Цена закрытия больше 5-периодной скользящей средней, закрываем короткую позицию, а затем покупаем, чтобы открыть новую позицию.
SPK ——Продажа для закрытия позиции и продажа для открытия позиции (короткая продажа)
Пример: CLOSE<MA(CLOSE,5),SPK; // Цена закрытия меньше 5-периодной скользящей средней, закрываем длинную позицию, а затем продаем открытую позицию.
ЗАКРЫТИЕ ——Закрытие всех позиций, рекомендуется для использования в модели увеличения и уменьшения позиций. Пример: ЗАКРЫТИЕ; закрытие всех позиций во всех направлениях.
Часто используемые API языка JavaScript
Прежде чем объяснять API языка JavaScript, давайте рассмотрим общую структуру кода и его функциональные компоненты. Это поможет вам лучше понять API. Смотрите пример ниже:

Рисунок 2-10 Пример кода JavaScript
Как показано в коде выше:
Создание переменной в языке JavaScript часто называют «объявлением» переменной. В красном коде мы используем ключевое слово var для объявления переменной, а имя переменной указано в оранжевом коде: «aa».
В JavaScript для присвоения значений используется знак равенства, то есть значение справа от «=» присваивается переменной слева.
Голубой код "exchange" — это объект обмена. Здесь exchange относится к фьючерсной компании, которую вы задаете. Это фиксированный формат, который означает, что при вызове API языка JavaScript вы должны указать объект обмена.
Зеленый код — это JavaScript API. Когда мы вызываем его, мы на самом деле вызываем функцию в объекте обмена. Обратите внимание на точку после синего кода, которая также является фиксированным форматом. Функция здесь та же самая, что и функция, которую мы изучали в средней школе. Если функция не требует параметров, используйте пустые скобки для обозначения этого; если функция должна передавать параметры, запишите параметры внутри скобок.
После изучения базовой структуры и принципов кода на примерах мы покажем вам несколько API языка JavaScript, которые вы часто будете использовать в будущем.
SetContractType("Product Code") ——Установите тип контракта, то есть, каким продуктом вы хотите торговать.
Пример: exchange.SetContractType("rb1905"); //Установите тип транзакции на "Контракт на арматуру 1905"
GetTicker ——Получить данные Tick
Пример: exchange.GetTicker(); //Получить данные Tick
GetRecords ——Получить данные K-line
Пример: exchange.GetRecords(); //Получить данные K-line
Купить
Пример: exchange.Buy(5000, 1); //Купить один лот по 5000 юаней
Продать——Купить
Пример: exchange.Sell(5000, 1); //Продать один лот по 5000 юаней
GetAccount ——Получить информацию об учетной записи
Пример: exchange.GetAccount(); //Получить информацию об аккаунте
GetPosition ——Получить информацию о позиции
Пример: exchange.GetPosition(); //Получить информацию о позиции
SetDirection ——Установите тип длинного или короткого ордера
Пример:
exchange.SetDirection("buy"); //Установите тип ордера на покупку, чтобы открыть длинную позицию
exchange.SetDirection("closebuy"); //Установите тип ордера на продажу, чтобы закрыть длинные позиции
exchange.SetDirection("sell"); //Установите тип ордера на продажу, чтобы открыть короткую позицию
exchange.SetDirection("closesell"); //Установите тип ордера на покупку, чтобы закрыть короткие позиции
Журнал - Вывод сообщения в журнал.
Пример: Log("hello, world"); // Вывести "hello world" в журнал
Сон — приостановка программы на определенный период времени.
Пример: Sleep(1000); //Приостановить программу на 1 секунду
У некоторых из вас могут возникнуть вопросы: как запомнить столько API, перечисленных выше? На самом деле, вам не обязательно все это запоминать. На официальном сайте Inventor Quant есть подробный набор документации по API. Это как искать в словаре: когда вам что-то нужно, просто загляните в него. Не пугайтесь кодов и другого контента, с которым вы знакомы впервые. Мы хотим организовать наши собственные стратегии с помощью этих языков. Пожалуйста, помните, что технология никогда не является порогом количественной оценки. Наличие у вас хорошей стратегии является ключом к тому, сможете ли вы долгосрочно работать на количественном рынке.
Подвести итог
Выше приведены наиболее часто используемые API в количественной торговле, которые в основном включают: получение данных, расчет данных, размещение заказов на покупку и продажу, которых достаточно для обработки простой количественной торговой стратегии. Конечно, если вы хотите написать более сложную стратегию, вам нужно зайти на официальный сайт Inventor Quantitative Tool, чтобы получить его.
Домашнее задание
- Попробуйте написать утверждение на языке май о том, что 5-периодная скользящая средняя пересекает 10-периодную скользящую среднюю.
- Попробуйте использовать GetAccount в JavaScript, чтобы получить информацию о своей учетной записи, и вывести ее в журнал с помощью Log.
Предварительный просмотр следующего раздела
Программирование похоже на сборку кубиков Lego, API — на различные части кубиков, а процесс программирования заключается в том, чтобы собрать различные детали Lego в целостную игрушку. В следующем разделе я покажу вам, как использовать API языка Mai для создания полноценной количественной торговой стратегии.
2.4 Как писать стратегии в Inventor Quantitative System
краткое содержание
Изучив предыдущие разделы, вы наконец-то можете приступить к написанию количественных торговых стратегий. Это будет для вас самым важным шагом на пути перехода от ручной торговли к количественной торговле. На самом деле, это не так уж и загадочно. Написание стратегии — это не более чем превращение ваших идей в код. В этом разделе мы реализуем количественную торговую стратегию с нуля и познакомим вас с тем, как писать стратегии в системе Inventor Quantitative System.
Подготовить
Сначала откройте официальный сайт Inventor Quantitative Tool и нажмите по очереди «Библиотека стратегий» и «Новая стратегия». Следует отметить, что перед началом написания кода вам необходимо выбрать язык Mai или язык JavaScript в выпадающем меню языков программирования. Конечно, платформа также поддерживает Python, C++ и визуальный язык.
Стратегические идеи
В предыдущей главе мы представили стратегию прорыва цены через скользящую среднюю. То есть: если цена выше средней цены за последние 10 дней, покупайте; если цена ниже средней цены за последние 10 дней, продавайте. Однако, хотя цена может напрямую отражать состояние рынка, будет много ложных сигналов прорыва; поэтому нам необходимо модернизировать и улучшить эту стратегию.
Сначала выберите скользящую среднюю с большим периодом, чтобы определить направление тренда, которая, по крайней мере, отфильтровала почти половину ложных сигналов прорыва. Хотя скользящая средняя с большим периодом медленная, она будет более стабильной; затем, чтобы еще больше увеличить вероятность успеха входа, добавьте еще одно условие, что эта скользящая средняя с большим периодом будет, по крайней мере, восходящей; наконец, используйте относительное положение цены, краткосрочной скользящей средней и долгосрочной скользящей средней, чтобы сформировать полную торговую стратегию.
Стратегическая логика
Используя вышеизложенные стратегические идеи и мысли, мы можем попытаться выстроить логику стратегии. Логика здесь не в том, чтобы просить вас рассчитать законы движения небесных тел; это не так уж и сложно. Это не более чем выражение предыдущих стратегических идей словами.
Открытие длинной позиции: Если текущей позиции нет, а цена закрытия больше краткосрочной скользящей средней, а цена закрытия больше долгосрочной скользящей средней, а краткосрочная скользящая средняя больше долгосрочной скользящей средней, а долгосрочная скользящая средняя растет.
Открыть короткую позицию: Если текущей позиции нет, а цена закрытия меньше краткосрочной скользящей средней, а цена закрытия меньше долгосрочной скользящей средней, а краткосрочная скользящая средняя меньше долгосрочной скользящей средней, а долгосрочная скользящая средняя падает.
Закрытие длинной позиции: Если в данный момент у вас открыт длинный ордер, а цена закрытия меньше долгосрочной скользящей средней, или краткосрочная скользящая средняя меньше долгосрочной скользящей средней, или долгосрочная скользящая средняя снижается.
Закрытие короткой позиции: Если в данный момент у вас открыт короткий ордер, а цена закрытия больше долгосрочной скользящей средней, или краткосрочная скользящая средняя больше долгосрочной скользящей средней, или долгосрочная скользящая средняя растет.
Вышеизложенное является логической частью всей количественной торговой стратегии. Если преобразовать текстовую версию логики стратегии в код, то она будет включать три шага: получение рыночных условий, расчет индикаторов и размещение ордеров на покупку и продажу.
Языковая стратегия
Первый шаг — получить рыночную информацию. В этой количественной торговой стратегии нам нужно получить только цену закрытия. В языке Mai API для получения цены закрытия: CLOSE. То есть, вам нужно написать CLOSE в коде, чтобы получить цену закрытия последней K-линии.
Затем идут расчетные индикаторы. В этой количественной торговой стратегии мы используем всего 2 технологии, а именно: краткосрочную скользящую среднюю и долгосрочную скользящую среднюю. Мы предполагаем, что краткосрочная скользящая средняя — это 10-периодная скользящая средняя, а долгосрочная скользящая средняя — это 50-периодная скользящая средняя. Так как же нам использовать код для представления 10-периодной скользящей средней и 50-периодной скользящей средней? Пожалуйста, смотрите следующий рисунок:

Рисунок 2-11 Код стратегии языка Mai
При ручной торговле мы можем сразу увидеть, растет или падает 50-периодная скользящая средняя, но как выразить это в коде? Подумайте об этом внимательно. Чтобы оценить, растет ли скользящая средняя, разве 50-периодное скользящее среднее значение текущей линии K не больше 50-периодного скользящего среднего значения предыдущей линии K, а 50-периодное скользящее среднее значение предыдущей линии K не больше 50-периодного скользящего среднего значения предыдущей линии K? Обратное верно, то есть скользящая средняя падает. Итак, в коде это должно быть так:

Рисунок 2-12 Код скользящего среднего суждения языка Mai
Обратите внимание на розово-красный код «AND» в строках 8 и 9 на рисунке выше. На языке май это означает «и». Например, 9-я строка переводится на китайский язык как: если 50-периодная скользящая средняя текущей K-линии больше 50-периодной скользящей средней предыдущей K-линии, а 50-периодная скользящая средняя предыдущей K-линии больше 50-периодной скользящей средней предыдущей K-линии, то значение рассчитывается как «да»; в противном случае значение рассчитывается как «нет», а результат присваивается «MA50_ISUP».
Последний шаг — разместить заказы на покупку и продажу. Вам нужно только вызвать API заказа количественного инструмента изобретателя после кода логики покупки и продажи, чтобы выполнить операции покупки и продажи. Пожалуйста, смотрите следующий рисунок:

Рисунок 2-13 Код транзакции покупки и продажи на языке Mai
Обратите внимание на розово-красный код «OR» в строках 13 и 14 на картинке выше. На языке май это означает «или». Например, строка 13 переводится на китайский язык как: если цена закрытия текущей K-линии меньше 50-периодной скользящей средней текущей K-линии или 10-периодная скользящая средняя текущей K-линии меньше 50-периодной скользящей средней текущей K-линии, то значение рассчитывается как «да» и ордер размещается немедленно; в противном случае значение рассчитывается как «нет» и ничего не происходит.
Обратите внимание: «И» и «ИЛИ» — логические операторы в языке маи:
«И» означает, что когда все условия «да», то конечное условие — «да»;
«ИЛИ» означает, что среди всех условий, если хотя бы одно из условий имеет значение «да», то окончательное условие будет «да».
Подвести итог
Выше представлен весь процесс написания торговых стратегий на языке Mai в Inventor Quantitative Tool. Всего три шага: от идеи стратегии до ее замысла и описания логики словами, и, наконец, реализация полной торговой стратегии с помощью кода. Хотя это простая стратегия, конкретный процесс ее реализации аналогичен процессу реализации сложной стратегии, за исключением того, что алгоритм и структура данных стратегии отличаются. Таким образом, если вы понимаете и овладеваете процессом количественной стратегии, описанным в этом разделе, вы можете использовать язык Mai для проведения количественных стратегических исследований и практиковаться с количественными инструментами изобретателя по мере необходимости.
Домашнее задание
- Попробуйте реализовать стратегии, описанные в этом разделе, самостоятельно.
- На основе стратегии в этом разделе добавьте функции стоп-профит и стоп-лосс.
Предварительный просмотр следующего раздела
В разработке количественных торговых стратегий языки программирования подобны оружию и снаряжению. Хороший язык программирования может помочь вам получить вдвое больший результат при вдвое меньших усилиях. Например, в индустрии количественной торговли существует более десятка наиболее часто используемых языков, включая Python, C++, Java, C#, EasyLanguage, Mai Language и т. д. Какое оружие мне выбрать, отправляясь на поле боя? В следующем разделе мы познакомим вас с этими распространенными языками программирования и характеристиками каждого языка программирования.
Глава 3 Простой язык программирования для реализации торговых стратегий
3.1 Горизонтальная оценка языков программирования количественной торговли
краткое содержание
В Главе 1 и Главе 2 мы изучили основы количественной торговли и то, как использовать количественные инструменты изобретателя. В этой главе мы подробно реализуем торговую стратегию. Если вы хотите хорошо выполнять свою работу, вам сначала нужно заточить свои инструменты. Для реализации торговых стратегий необходимо сначала освоить язык программирования. В этом разделе впервые представлены основные языки программирования в количественной торговле, а также характеристики каждого языка программирования.
Что такое язык программирования
Прежде чем изучать язык программирования, необходимо сначала понять концепцию «языка программирования». Язык программирования — это язык, который понимают и люди, и компьютеры. Это стандартизированный код общения. Цель языка программирования — использовать человеческий язык для управления компьютерами и сообщать им, что мы хотим делать. Компьютеры могут выполнять инструкции в соответствии с языками программирования, и мы также можем писать коды для выдачи инструкций компьютерам.
Так же, как наши родители учили нас говорить в детстве, они также учили нас понимать, что говорят другие. После длительного периода влияния и самостоятельного обучения мы научились говорить, не осознавая этого, и могли понимать, что говорят другие дети. Существует множество языков, включая китайский, английский, французский и т. д. Например:
Китайский: Привет, мир!
Русский: Привет, мир!
Французский: Bonjour tout le monde
Если вы используете язык программирования для отображения «Hello World» на экране компьютера, это будет выглядеть так:
Язык C: puts("Hello World");
Язык Java: System.out.println("Hello World");
Язык Python: print("Hello World")
Мы видим, что компьютерные языки имеют свои собственные определенные правила, и существует множество языков. Эти языковые правила являются классификациями языков программирования, которые нам нужно объяснить вам сегодня. В каждой классификации нам нужно запомнить только самые основные и часто используемые правила, и мы можем использовать эти языки программирования для общения с компьютерами и позволить компьютерам выполнять соответствующие стратегии в соответствии с нашими инструкциями.
Классификация языков программирования
Чтобы облегчить вам поиск и сравнение, а также помочь выбрать подходящий вам язык программирования для количественной торговли, мы классифицируем шесть наиболее часто используемых языков программирования, а именно: Python, Matlab/R, C++, Java/C#, EasyLanguage и визуальный язык (как показано ниже).

Рисунок 3-1 Оценка языка программирования
Мы оценили их по функциональности, скорости работы, масштабируемости и сложности обучения. Оценка находится в диапазоне от 1 до 5. Например, оценка 5 по функциональному диапазону означает, что функция мощная, а оценка 1 означает, что функция слабая. (Как показано выше) Визуальный язык и EasyLanguage просты в изучении и отлично подходят для новичков; Python — мощный язык с большими возможностями расширения, что делает его пригодным для разработки более сложных торговых стратегий; C++ обеспечивает более высокую скорость торговли и больше подходит для высокочастотных трейдеров.
Однако оценка каждого языка программирования в основном направлена на его применение в сфере количественной торговли и содержит личные субъективные элементы. Вы также можете критиковать в разделе комментариев или выдвигать свои мнения для обсуждения. Далее мы начнем знакомить вас с этими языками программирования по одному.
Визуальный язык
Визуальное программирование имеет долгую историю и не является чем-то новым. Эта концепция программирования "что видишь, то и получаешь", оснащенная различными модулями управления, может строить логику кода и завершать разработку торговой стратегии простым перетаскиванием. Процесс очень похож на строительные блоки.

Рисунок 3-2 Интерфейс визуального языка программирования
Как показано выше, ту же программу можно завершить всего несколькими строками кода в визуальном программировании платформы количественной торговли Inventor. Это значительно снижает порог программирования, что является отличным опытом работы, особенно для трейдеров, не имеющих никаких знаний в области программирования.
Поскольку базовая стратегия реализации этого визуального языка преобразована в C++, это мало влияет на скорость работы программы. Однако его функциональность и масштабируемость относительно слабы, и на нем невозможно разрабатывать слишком сложные или изощренные торговые стратегии.
EasyLanguage
Так называемый EasyLanguage относится к языку программирования, уникальному для некоторого коммерческого программного обеспечения для количественной торговли. Хотя эти языки также имеют некоторые объектно-ориентированные функции, в своих приложениях они в основном реализованы в виде скриптов. С точки зрения синтаксиса он также очень близок к нашему естественному языку. Для новичков в количественной торговле использование EasyLanguage в качестве точки входа — лучший выбор. Например: язык май в количественной торговой платформе изобретателя.
Этот скриптовый язык не имеет проблем с бэктестингом стратегии и реальной торговлей в своем конкретном программном обеспечении, но он часто ограничен в плане масштабируемости. Например, разработчики стратегий не могут вызывать внешние API. Более того, с точки зрения скорости работы, этот скриптовый язык работает на собственной виртуальной машине, а его оптимизация производительности не так хороша, как у Java/C#, поэтому он медленнее.
Python
На Stackoverflow количество посещений основных языков программирования за последние годы практически не изменилось, и только Python демонстрирует тенденцию к росту. Python можно использовать для разработки веб-сайтов, машинного обучения, глубокого обучения, анализа данных и т. д. Благодаря своей гибкости и открытости он стал самым распространенным языком. То же самое касается и области количественных инвестиций. В настоящее время большинство отечественных количественных платформ основаны на Python.
Базовые структуры данных Python, списки и словари, очень эффективны и в принципе могут удовлетворить потребности в представлении данных. Если вам нужна более быстрая и полная структура данных, рекомендуется использовать NumPy и SciPy. Эти две библиотеки в основном называются стандартными библиотеками для научных вычислений Python.
Для финансовой инженерии более специализированной библиотекой является Pandas, которая имеет две структуры данных, Series и DataFrame, и отлично подходит для обработки временных рядов.
С точки зрения скорости Python находится посередине, медленнее C++ и быстрее EasyLanguage, в основном потому, что Python — динамический язык, и его скорость при работе на чистом Python средняя. Однако вы можете использовать Cython для статической оптимизации некоторых функций, чтобы приблизиться к скорости C++.
Как язык-связующее, Python является бесспорным номером один с точки зрения производительности расширения. Помимо возможности расширяемого подключения к другим языкам, API расширения также разработано так, чтобы быть очень простым в использовании. С точки зрения сложности обучения, Python имеет простой синтаксис, легко читаемый код и прост в освоении.
Matlab/R
Далее идут Matlab и R. Эти два языка в основном используются для анализа данных. Авторы языка создали множество синтаксических конструкций для научных операций. Их характеристики в том, что они естественным образом поддерживают количественные торговые операции. Однако сфера его применения относительно ограничена, и в основном он используется для анализа данных и бэк-тестирования стратегий. Что касается разработки торговых систем и алгоритмов стратегий, то их удобство использования и стабильность относительно невысоки.
Кроме того, их скорость работы и масштабируемость относительно низкие, поскольку Matlab и R работают на уникальных языковых виртуальных машинах. С точки зрения производительности их виртуальные машины значительно хуже, чем Java и C#. Но поскольку их синтаксис ближе к математическим выражениям, их относительно легче выучить.
C++
C++ — это язык программирования общего назначения, поддерживающий несколько моделей программирования, таких как процедурное программирование, абстракция данных, объектно-ориентированное программирование, обобщенное программирование и шаблоны проектирования. Вы можете использовать C++ для реализации всех функций, которых хотите достичь, но самым большим недостатком такого мощного языка является то, что его очень сложно изучить, например, из-за шаблонов, указателей, утечек памяти и т. д.
В настоящее время C++ по-прежнему является предпочтительным языком программирования для крупномасштабной высокочастотной торговли. Причина проста. Поскольку характеристики языка C++ легче поддаются приближению к базовому компьютеру, он является наиболее эффективным инструментом для разработки высокопроизводительных систем бэктестинга и исполнения, обрабатывающих большие объемы данных.
Java/C#
Java/C# — это статические языки, которые работают на виртуальных машинах. По сравнению с C++, здесь нет ошибок выхода за пределы массива, нет дампа памяти, выброшенные исключения могут точно определить местоположение кода ошибки, у них есть собственный механизм автоматической сборки мусора, нет необходимости беспокоиться об утечках памяти и т. д. Поэтому с точки зрения сложности изучения синтаксиса они также проще, чем C++. С точки зрения скорости работы, поскольку все их виртуальные машины имеют собственную функцию JIT для компиляции во время выполнения, их скорость уступает только C++.
Однако с точки зрения функциональности невозможно оптимизировать базовую торговую систему так, как это сделано в C++. С точки зрения производительности расширения он слабее, чем C++, поскольку их расширение должно проходить через мост C, а сами эти два языка работают на виртуальных машинах, поэтому при расширении функциональных модулей необходимо преодолеть дополнительный слой стены, чтобы достичь этого.
Подвести итог
Но опять же, язык количественного программирования не важен, важна идея. Нет абсолютно никаких проблем в использовании количественного языка Mai и языка визуализации изобретателя в качестве трамплина для количественного входа. Чтобы улучшиться после входа, вам нужно постоянно пробовать и исследовать в сочетании с различными рыночными условиями. Можно сказать, что идеи определяют выход, а видение определяет область.
«Разработайте свою стратегию, торгуйте своими идеями». С этой точки зрения ядром количественной торговли по-прежнему является торговля идеями. Как количественному трейдеру, вам необходимо не только освоить базовый синтаксис и функции платформы для написания стратегий, но и испытать торговые концепции в реальных боевых условиях. Количественная оценка — это всего лишь инструмент и носитель для отражения различных торговых концепций.
Домашнее задание
- Каковы преимущества языка Python для количественной торговли?
- Попробуйте написать несколько часто используемых API, используя язык Mai изобретателя?
Предварительный просмотр следующего раздела
Я считаю, что с вышеизложенным введением в языки программирования вы должны знать, как выбирать. В следующих нескольких главах мы изучим разработку количественной торговой стратегии целенаправленным образом в соответствии с классификацией языков программирования.
3.2 Краткое руководство по языку Mai
краткое содержание
Что такое язык май? Так называемый язык Mai представляет собой набор библиотек программных функций, расширенный из ранних технических индикаторов. Алгоритмы инкапсулированы в функции, и пользователям нужно только вызывать функции построчно, словно играя со строительными блоками, чтобы реализовать логику стратегии.
Он принимает режим построения "малый синтаксис, большая функция", что значительно повышает эффективность письма. Стратегии, требующие более 100 предложений на других языках, обычно могут быть записаны всего в дюжине предложений на языке Mai. В сочетании с библиотекой финансовых статистических функций и структурой данных количественных инструментов изобретателя он также может поддерживать некоторую сложную торговую логику.
Полная стратегия
Чтобы помочь вам быстро усвоить ключевые знания этого раздела, перед знакомством с кратким руководством по количественному моделированию микроволн Inventor вам следует сначала получить предварительное представление о концепциях этого раздела. Мы по-прежнему используем долгосрочную 50-дневную скользящую среднюю и краткосрочную 10-дневную скользящую среднюю в качестве базовых случаев и рассмотрим полный случай стратегии, упомянутый в предыдущей главе:
Открытие длинной позиции: Если текущей позиции нет, а цена закрытия больше краткосрочной скользящей средней, а цена закрытия больше долгосрочной скользящей средней, а краткосрочная скользящая средняя больше долгосрочной скользящей средней, а долгосрочная скользящая средняя растет.
Открыть короткую позицию: Если текущей позиции нет, а цена закрытия меньше краткосрочной скользящей средней, а цена закрытия меньше долгосрочной скользящей средней, а краткосрочная скользящая средняя меньше долгосрочной скользящей средней, а долгосрочная скользящая средняя падает.
Закрытие длинной позиции: Если в данный момент у вас открыт длинный ордер, а цена закрытия меньше долгосрочной скользящей средней, или краткосрочная скользящая средняя меньше долгосрочной скользящей средней, или долгосрочная скользящая средняя снижается.
Закрытие короткой позиции: Если в данный момент у вас открыт короткий ордер, а цена закрытия больше долгосрочной скользящей средней, или краткосрочная скользящая средняя больше долгосрочной скользящей средней, или долгосрочная скользящая средняя растет.
Если это написано на языке май, то это выглядит так:

Рисунок 3-3 Полный пример языка маи
Чтобы написать полную количественную торговую стратегию, обычно требуется несколько шагов: сбор данных, расчет данных, логический расчет, размещение ордера и т. д. Как показано на рисунке выше, во всем коде для получения основных данных используется только один API, который представляет собой «CLOSE» в первой и второй строках; затем строки с первой по девятую представляют собой часть расчета данных; и, наконец, строки с одиннадцатой по четырнадцатую представляют собой часть логического расчета и размещения заказа.
Обратите внимание, что фиолетовый код — это переменная; в строках с первой по девятую зелёный «:=» — это оператор присваивания, и данные справа от оператора присваивания присваиваются переменной слева после вычисления; оранжевый код — это API, например, в первой строке вызов MA (скользящей средней) требует передачи двух параметров, которые можно понимать как настройки, то есть при вызове MA необходимо задать тип MA; розово-красные «И» и «ИЛИ» — это логические операторы, которые в основном используются для соединения нескольких логических вычислений и т. д. Имея вышеизложенные базовые знания, давайте начнем изучать подробные основы языка майя.
Основные данные
Базовые данные (цена открытия, максимальная цена, минимальная цена, цена закрытия, объем торгов) являются неотъемлемой частью количественной торговли. Чтобы получить последние базовые данные в стратегии, вам нужно только вызвать API количественного инструмента изобретателя. Если вы хотите получить исторические базовые данные, вы можете использовать «REF», например: REF (CLOSE, 1) — для получения вчерашней цены закрытия.
Переменные
Переменная — это число, которое можно изменить. Имя переменной можно понимать как код. Ее наименование поддерживает китайские иероглифы, буквы, цифры и тире, но длина должна контролироваться в пределах 31 символа. Имена переменных не могут повторяться друг с другом, именами параметров или именами функций (API), и каждый оператор должен заканчиваться точкой с запятой. Если вы хотите добавить комментарии на своем языке после написания, используйте «//» в конце. Его необходимо писать заглавными буквами с использованием метода ввода половинной ширины. Как показано на следующем рисунке:

Рисунок 3-4 Тип данных языка Mai
Назначение переменной
Назначение переменной — это назначение значения с правой стороны оператора присваивания переменной с левой стороны. Существует 4 типа операторов присваивания, которые могут контролировать, отображается ли значение на диаграмме, и определять позицию отображения. Зеленые шрифты на рисунке ниже — это операторы присваивания, а именно «:», «:=», «^^» и «..». Комментарии к коду на рисунке подробно объясняют их значение.

Рисунок 3-5 Назначение переменной языка Mai
Типы данных
В языке Mai существует множество типов данных, среди которых наиболее часто используются числовые, строковые и логические типы. Числовые типы — это числа, включая целые числа, десятичные дроби, положительные и отрицательные числа и т. д., например: 1, 2, 3, 1,1234, 2,23456...; строковые типы могут пониматься как текст, китайский, английский языки, а числа могут быть строками, например: «Inventor Quantification», «CLOSEPRICE», «6000», а строковые типы должны быть заключены в английские точки с запятой; логический тип является самым простым, он имеет только два значения «да» и «нет», например: 1 представляет истину для «да», а 0 представляет ложь для «нет».
Оператор относительности
Реляционные операторы, как следует из названия, — это операторы, используемые для сравнения отношений между двумя значениями. Они равны, больше, меньше, больше или равны, меньше или равны и не равны, как показано ниже:

Рисунок 3-6 Операторы языка Mai
Логические операторы
Логические операции могут объединять отдельные булевы операторы в единое целое. Наиболее часто используемые из них — «И» и «ИЛИ». Предположим, что есть два логических значения: «цена закрытия больше цены открытия» и «цена закрытия больше скользящей средней». Мы можем объединить их в логическое значение, например: «цена закрытия больше цены открытия и (И) цена закрытия больше скользящей средней», «цена закрытия больше цены открытия или (ИЛИ) цена закрытия больше скользящей средней».

Рисунок 3-7 Логическая работа языка Mai
Внимание всем:
«И» означает, что когда все условия «да», то конечное условие — «да»;
«ИЛИ» означает, что среди всех условий, если хотя бы одно из условий имеет значение «да», то окончательное условие будет «да».
«И» можно записать как «&&», а «ИЛИ» можно записать как «||».
Оператор
Часто используемые арифметические операторы в языке маи («+», «-»,*“, “/”) ничем не отличается от математики, изучаемой в начальной школе, как показано ниже:

Рисунок 3-8 Арифметические операции в языке маи
Приоритеты
Если есть 100*Какой шаг программа вычисляет первым для выражения (10-1)/(10+5)? Математика средней школы учит нас: ① Если это операция одного уровня, то она обычно вычисляется слева направо. ② Если есть и сложение, и вычитание, и умножение, и деление, сначала вычислите умножение и деление, а затем сложение и вычитание. ③Если есть скобки, сначала вычислите содержимое внутри скобок. ④ Если это соответствует законам эксплуатации, то законы эксплуатации можно использовать для упрощения расчетов. Приоритет языка май такой же, как показано ниже:

Рисунок 3-9 Приоритет арифметических операций в языке Mai
Режим исполнения
В языке Mai количественного инструмента изобретателя существует два режима выполнения стратегии программы, а именно: режим цены закрытия и режим цены в реальном времени. Режим цены закрытия означает, что установлен текущий сигнал K-линии, и транзакция ордера выполняется немедленно при начале следующей K-линии. Режим цен в реальном времени означает, что как только будет установлен текущий сигнал K-line, транзакция ордера будет выполнена немедленно.
Внутридневные стратегии
Если это внутридневная стратегия, когда вам необходимо закрыть позицию в конце торгового дня, вам необходимо использовать функцию времени «TIME». Эта функция отображается в четырехзначной форме, когда она находится выше второго периода и ниже дневного периода, а именно: ЧЧММ (1450-14:50). Примечание: При использовании функции ВРЕМЯ в качестве условия закрытия позиции по окончании торговли рекомендуется, чтобы условие открытия также имело соответствующее ограничение по времени. Как показано ниже:

Рисунок 3-10 Функция времени языка микрофона
Классификация моделей

Рисунок 3-11 Классификация модели языка маи
В языке Mai существует два типа классификации моделей, а именно: нефильтрующая модель и фильтрующая модель. На самом деле это очень легко понять: модель без фильтрации допускает непрерывные сигналы открытия или закрытия, которые могут реализовывать функции добавления и сокращения позиций. Фильтрующая модель не допускает непрерывных сигналов открытия или закрытия. То есть, когда появляется сигнал открытия, последующие сигналы открытия будут отфильтровываться до тех пор, пока не появится сигнал закрытия. Порядок сигналов в нефильтрующей модели: открыть-закрыть-открыть-закрыть-открыть.....
Подвести итог
Выше приведено краткое введение в язык Mai. После его изучения вы сможете программировать количественные торговые стратегии. Если вам необходимо написать более сложные стратегии, вы можете обратиться к документации API Inventor Quantitative Tool Mai Language или напрямую обратиться в официальную службу поддержки клиентов, чтобы они написали для вас количественные торговые стратегии.
Предварительный просмотр следующего раздела
Дневная торговля также является торговой моделью. Этот метод не оставляет позиции на ночь, поэтому риск волатильности рынка ниже. При возникновении неблагоприятных рыночных условий можно вовремя внести коррективы. После изучения введения в язык Mai в этом разделе, в следующем разделе мы покажем вам, как написать реализуемую внутридневную количественную торговую стратегию.
Домашнее задание
- Попробуйте использовать Inventor Quantitative Tool, чтобы написать API на языке Mai для получения основных данных.
- Каковы способы отображения назначений переменных на диаграмме?
3.3 Как реализовать стратегии на языке маи
краткое содержание
В предыдущей статье мы объяснили предпосылки реализации торговых стратегий с точки зрения введения в язык Mai, базового синтаксиса, метода выполнения модели, классификации моделей и т. д. В этой статье мы продолжим содержание предыдущей статьи и поможем вам шаг за шагом реализовать осуществимую внутридневную количественную торговую стратегию с использованием обычно используемых модулей стратегии и технических индикаторов.
Модуль политики
Подумайте, как построить робота из деталей Lego? Его нельзя собрать по частям сверху вниз или снизу вверх. Любой человек, обладающий хотя бы небольшой толикой здравого смысла, знает, что голову, руки, ноги, крылья и т. д. следует собирать по отдельности, а затем объединять в полноценного робота. То же самое и при написании программ. Запишите необходимые функции в модули стратегии, а затем объедините модули стратегии в полноценную количественную торговую стратегию. Ниже я перечислю некоторые часто используемые стратегические модули:
Увеличение фазы
Увеличение этапа рассчитывается путем вычисления процента разницы между ценой закрытия текущей K-линии и ценой закрытия предыдущих N периодов. Например, чтобы рассчитать прирост последних 10 периодов K-линии, код можно записать так:

Рисунок 3-12. Стадия роста языка Mai
Новые максимумы
Чтобы установить новый максимум, нам нужно рассчитать, превышает ли текущая K-линия самую высокую цену за N периодов. Например, чтобы вычислить, больше ли текущая K-линия, чем самая высокая цена среди последних 10 K-линий, код можно записать так:

Рисунок 3-13 Mai Language достигает нового максимума
Большой объем роста
Крупнообъемную восходящую атаку можно понимать как рост цен и резкое увеличение объема торгов. Например: если цена закрытия K-линии в 1,5 раза превышает цену закрытия предыдущих 10 K-линий, это означает, что она выросла на 50% за 10 дней; объем торгов в 5 раз превышает среднее значение последних 10 K-линий. В коде это можно записать так:

Рисунок 3-14 Объем Maiyuyu растет
Узкая отделка
Консолидация в узком диапазоне означает, что цены остаются в определенном диапазоне в течение последнего периода времени. Например: если разница между самой высокой ценой за 10 периодов и самой низкой ценой за 10 периодов, деленная на цену закрытия текущей К-линии, составляет менее 0,05. В коде это можно записать так:

Рисунок 3-15 Узкий диапазон языка пшеницы
Скользящая средняя бычья установка
Бычья компоновка скользящих средних делится на бычью компоновку и медвежью компоновку. K-линия расположена вверх с поддержкой под 5-10-20-30-60 скользящими средними, что является бычьей компоновкой. Бычья компоновка означает, что рыночный тренд является сильным восходящим трендом. В коде это можно записать так:

Рисунок 3-16. Скользящая средняя языка Mai. Бычья конфигурация.
Предыдущие максимумы и их местоположение
Чтобы получить предыдущую наивысшую точку и местоположение этой наивысшей точки, вы можете напрямую получить ее через API инструмента Inventor Quantitative. Это можно записать в коде:

Рисунок 3-17 Предыдущий пик развития языка маи
Зазор
Разрыв — это ситуация, когда максимальная и минимальная цены двух линий K не связаны. Он состоит из двух линий K. Разрыв — это справочная цена для будущих точек поддержки и давления. При возникновении разрыва можно предположить, что началось ускорение тренда в направлении первоначального разрыва. Это можно записать в коде:

Рисунок 3-18 Май Языковой разрыв
Общие технические индикаторы
Скользящая средняя

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

Рисунок 3-20 Расчет различных показателей языка маи
Канал БОЛЛ

Рисунок 3-21 Диаграмма канала BOLL
BOLL, также известный как индикатор полос Боллинджера, также использует статистические принципы для того, чтобы сначала рассчитать среднюю дорожку на основе N-дневной скользящей средней, а затем рассчитать верхнюю и нижнюю дорожки на основе стандартного отклонения. Когда канал BOLL становится уже, это означает, что цена постепенно возвращается к среднему значению. Когда канал BOLL меняется с узкого на широкий, это означает, что рынок начинает меняться. Если цена пересекает верхнюю дорожку, это указывает на то, что покупательная способность увеличивается. Если цена пересекает нижнюю дорожку, это указывает на то, что продающая способность увеличивается.
Среди всех технических индикаторов метод расчета BOLL является одним из самых сложных, который вводит в статистику понятие стандартного отклонения и предполагает расчет средней линии (MB), верхней линии (UP) и нижней линии (DN). Метод расчета следующий:

Рисунок 3-22 Расчет полосы Боллинджера на языке Mai
Индекс MACD
Индикатор MACD использует быстрые (краткосрочные) и медленные (долгосрочные) скользящие средние и их признаки схождения и разделения, а также выполняет операцию двойного сглаживания. MACD, разработанный на основе принципа скользящей средней, устранил дефект скользящей средней, которая часто посылает ложные сигналы, и сохранил эффект скользящей средней. Поэтому индикатор MACD обладает характеристиками тренда скользящей средней, стабильности и устойчивости. Это индикатор технического анализа, используемый для оценки времени покупки и продажи акций и прогнозирования роста и падения цен на акции. Метод расчета следующий:

Рисунок 3-24 Индикатор MACD языка Mai
Выше приведены наиболее часто используемые модули стратегий при разработке количественных торговых стратегий. Конечно, их гораздо больше. С помощью приведенных выше примеров модулей вы также можете реализовать несколько наиболее часто используемых торговых модулей в своей субъективной торговле. Все методы универсальны. Далее мы приступим к написанию реальной внутридневной количественной торговой стратегии.
Написание стратегии
На валютном спотовом рынке когда-то была широко распространена стратегия торговли прорывом, которая называется стратегией HANS123. Она использует свои простые прорывы верхних и нижних точек N K-линий после открытия в качестве критерия для срабатывания торговых сигналов. Это также режим торговли с ранним входом.
Стратегическая логика
Будьте готовы выйти на рынок через 30 минут после открытия рынка;
Верхняя дорожка = высшая точка через 30 минут после открытия;
Нижняя дорожка = минимум 30 минут после открытия;
Когда цена пробивает верхнюю линию, покупайте и открывайте позицию;
Когда цена опустится ниже нижней дорожки, открывайте позицию на продажу.
Стратегия внутридневной торговли, закрытие позиций до закрытия рынка;
Стратегический код

Рисунок 3-25 Код стратегии языка Mai
Подвести итог
Выше мы изучили концепцию стратегических модулей, и через несколько часто используемых случаев стратегических модулей мы познакомились с методами программирования количественных инструментов изобретателя. Можно сказать, что обучение написанию стратегических модулей и улучшение логического мышления программирования являются ключевыми шагами в продвинутой количественной торговле. Наконец, мы использовали количественные инструменты изобретателя для реализации торговых стратегий, обычно используемых в спотовой торговле иностранной валютой.
Предварительный просмотр следующего раздела
Некоторые друзья могут почувствовать себя растерянными и неспособными понять тесно переплетенные коды. Не волнуйтесь, мы уже обо всем этом подумали за вас. В Inventor Quantitative Tool также есть язык программирования, который больше подойдет для начинающих пользователей. Это визуальное программирование. Как следует из названия, что видите, то и получаете. Давайте с нетерпением ждать этого вместе!
Домашнее задание
- Попробуйте реализовать несколько торговых модулей, которые вы чаще всего используете в субъективной торговле.
- Попробуйте реализовать алгоритм индикатора KDJ с использованием языка Mai в количественном инструменте изобретателя.
3.4 Быстрый старт с визуальным программированием
краткое содержание
Многие субъективные трейдеры интересуются количественной торговлей. Они полны уверенности в начале. Однако, после изучения базового синтаксиса, операций с данными, структур данных, логического управления и т. д. традиционных языков программирования, они часто разочаровываются или сдаются, глядя на длинные и сложные коды. В это время визуальные языки программирования могут быть более подходящими для вас, чтобы начать.
Полная стратегия
Чтобы помочь всем быстро усвоить ключевые знания этого раздела, прежде чем приступить к краткому введению в язык визуального количественного программирования Inventor, давайте сначала посмотрим, как выглядит стратегия, написанная на визуальном языке? И иметь предварительное представление о понятиях существительных в этом разделе. Давайте рассмотрим простейший пример открытия длинной позиции, когда цена закрытия больше 50-периодной скользящей средней, и открытия короткой позиции, когда цена закрытия меньше 50-периодной скользящей средней:
Открытие длинной позиции: Если текущей позиции нет и цена закрытия больше 50-периодной скользящей средней.
Открыть короткую позицию: Если текущей позиции нет и цена закрытия меньше 50-периодной скользящей средней.
Закрытие длинной позиции:Если в данный момент вы занимаете длинную позицию и цена закрытия ниже 50-периодной скользящей средней.
Закрытие короткой позиции:Если в данный момент у вас открыт короткий ордер, а цена закрытия превышает 50-периодную скользящую среднюю.
Если изложенную выше стратегию записать на визуальном языке, она будет выглядеть следующим образом (как показано ниже):

Рисунок 3-26 Визуальный языковой интерфейс
Как показано на рисунке выше, весь процесс разработки стратегии выглядит следующим образом: установить тип рынка, получить массив K-линий, получить 50-периодную среднюю предыдущей K-линии, получить цену закрытия предыдущей K-линии, получить массив позиций, определить статус позиции, определить, больше или меньше цена закрытия скользящей средней, и выполнить открытие или закрытие.
Здесь нам нужно обратить внимание на понятие «массив». Массив — одна из важных структур данных для каждого языка программирования. Массивы подобны контейнерам, которые могут хранить ряд значений. Например, вызов API для получения массива K-строк возвращает следующий результат:

Рисунок 3-27 Массив K-линий
Код на рисунке выше представляет собой массив K-линий. Массив содержит всего три типа данных, а именно данные предыдущей K-линии, данные предыдущей K-линии и данные текущей K-линии. Если мы присвоим этот массив переменной «arr», то, если мы хотим получить последние данные в этом массиве (данные корневой строки K), мы можем записать это следующим образом (как показано в 4-й и 5-й строках на рисунке ниже):

Рисунок 3-28 Ссылка на массив
Мы можем просто использовать второй способ записи (строка 5), поскольку на самом деле существуют сотни или тысячи данных K-линий, и новые K-линии постоянно увеличиваются. Итак, сначала можно получить длину массива. «arr.length» означает получить длину массива, а затем вычесть «1», что является данными последней K-строки. Если вы хотите получить данные предыдущей К-линии, вычтите «2».
Внимательные люди могут обнаружить, что эти данные заключены в «{}». Из английских названий можно примерно понять, что они соответствуют: времени, цене открытия, максимальной цене, минимальной цене, цене закрытия и объему торгов. Если вы хотите получить цену закрытия предыдущей K-линии, просто добавьте «.» и требуемое значение в конце, см. строки 8–10 на рисунке ниже.

Рисунок 3-29 Ссылка на массив
Зачем использовать визуальный язык программирования?
Используя вышеизложенные концепции, давайте сначала воспользуемся Java для написания программы, которая выводит «hello, world», чтобы ощутить традиционное программирование, как показано ниже:

Рисунок 3-30
Программа, которая просто выводит строку «Привет, мир!», требует всего 5 строк кода. Я полагаю, что большинство новичков знают только английские слова «hello, world» в скобках и понятия не имеют, с чего начать изучение остальных. Поэтому лучше начать с визуального программирования, чем потом теряться.
Что такое визуальное программирование?
Визуальное программирование имеет долгую историю и не является чем-то новым. Эта концепция программирования "что видишь, то и получаешь", оснащенная различными модулями управления, может строить логику кода и завершать разработку торговой стратегии простым перетаскиванием. Процесс очень похож на строительные блоки.

Рисунок 3-31
Как показано выше, ту же программу можно завершить всего одной строкой кода в визуальном программировании Blockly. Это значительно снижает порог программирования, что является отличным опытом работы, особенно для трейдеров, не имеющих никаких знаний в области программирования.
Каковы характеристики визуального языка программирования?
Blockly — это не игрушка для программирования, это настоящий редактор, а не операционная система, замаскированная под редактор. Он поддерживает множество базовых элементов программирования, таких как переменные, функции, массивы и легко расширяемые и настраиваемые блоки. Вы можете использовать его для выполнения сложных задач программирования. Дизайн полностью соответствует философии Unix: делай что-то одно.
Изобретатель количественного визуального программирования также реализовал себя с помощью инструмента блочной визуализации, выпущенного Google. Конструкция похожа на Scratch, запущенный Массачусетским технологическим институтом, с действительно нулевым порогом (как показано ниже).

Рисунок 3-32
В визуальном программном интерфейсе Inventor Quant встроены сотни часто используемых торговых модулей. В будущем будет добавлено больше торговых модулей для поддержки новых идей и новых приложений трейдеров. Они будут совместно разрабатываться и поддерживаться разработчиками.
Несмотря на простоту синтаксиса, он не снижает производительности. Он практически может удовлетворить потребности разработки большинства простых количественных торговых стратегий. По функциональности и скорости он не уступает традиционным языкам программирования, таким как Python и JavaScript. В будущем он будет поддерживать логически сложные финансовые приложения.
Как использовать
Напишите программу «Привет, мир»
Запустите и напечатайте "привет, мир"
Подвести итог
Выше мы начали с полной стратегии визуализации, затем познакомились с введением и характеристиками языка визуализации и, наконец, рассказали, как использовать язык визуализации в инструменте Inventor Quant, а также написали пример «Hello World». Однако нам нужно напомнить всем, что в качестве введения в количественную торговлю визуальное программирование является хорошим трамплином, но в настоящее время в Inventor Quantitative Tool открыты только ограниченные интерфейсы API. Для количественной торговли лучше всего использовать его как вспомогательный инструмент, чтобы помочь вам разобраться в логике стратегии.
Предварительный просмотр следующего раздела
Нет никакой разницы между основами визуального программирования и языками программирования высокого уровня, а некоторые аспекты даже универсальны. Как только вы изучите визуальное программирование, вы станете на шаг ближе к изучению программирования высокого уровня. В следующем разделе мы углубимся в углубленное изучение визуального программирования, в том числе в то, как использовать визуальный язык для написания часто используемых модулей количественной торговли в Inventor Quantitative Tool, а также как разработать полноценную стратегию внутридневной торговли.
Домашнее задание
- В визуальном программном интерфейсе Inventor Quant используйте API и поймите, что они означают.
- Используйте визуальный язык для получения последней цены открытия и вывода ее в журнал.
3.5 Как реализовать стратегии с использованием визуального языка
краткое содержание
В предыдущей статье мы познакомились с введением и особенностями визуального языка программирования, примером «Hello World» и написанием стратегии в инструменте количественной торговли изобретателя, а также объяснили предпосылки для внедрения торговых стратегий. В этой статье мы продолжим начатое в предыдущей статье, начав с часто используемых модулей стратегии и технических индикаторов, а затем перейдем к логике стратегии, чтобы помочь каждому шаг за шагом реализовать полноценную стратегию внутридневной торговли.
Модуль политики
Увеличение фазы
Увеличение этапа рассчитывается путем вычисления процента разницы между ценой закрытия текущей K-линии и ценой закрытия предыдущих N периодов. Например, чтобы рассчитать прирост последних 10 периодов K-линии, код можно записать так:

Рисунок 3-36
Из приведенного выше кода мы видим, что способ выполнения компьютером требует полного логического цикла. Например, чтобы вычислить темп роста последних 10 периодов K-line, его нужно разделить на следующие шаги:
Во-первых, компьютер должен четко знать, каким продуктом вы хотите торговать. Например, в примере выше — метанол, поэтому установите код контракта: «MA888». После установки кода контракта вы можете получить данные K-линии контракта.
Используя данные K-line, вы можете получить подробные данные по любой K-line из этих данных K-line.
Для расчета периодического прироста необходимо сначала получить цены закрытия двух К-линий, например: цену закрытия предыдущей К-линии и цену закрытия 11-й К-линии перед ней.
Наконец, на основе цен закрытия этих двух K-линий рассчитайте коэффициент увеличения этапа. Каждая из следующих стратегий имеет характеристики таких логических циклов и условных атрибутов. Как только вы поймете эту логику, визуальное программирование станет намного проще.
Большой объем роста
Крупнообъемную восходящую атаку можно понимать как рост цен и резкое увеличение объема торгов. Например: если цена закрытия K-линии в 1,5 раза превышает цену закрытия предыдущих 10 K-линий, это означает, что она выросла на 50% за 10 дней; объем торгов в 5 раз превышает среднее значение последних 10 K-линий. В коде это можно записать так:

Рисунок 3-37
Зазор
Разрыв — это ситуация, когда максимальная и минимальная цены двух линий K не связаны. Он состоит из двух линий K. Разрыв — это справочная цена для будущих точек поддержки и давления. При возникновении разрыва можно предположить, что началось ускорение тренда в направлении первоначального разрыва. Это можно записать в коде:

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

Рисунок 3-39
Индекс MACD
Индикатор MACD использует быстрые (краткосрочные) и медленные (долгосрочные) скользящие средние и их признаки схождения и разделения, а также выполняет операцию двойного сглаживания. MACD, разработанный на основе принципа скользящей средней, устранил дефект скользящей средней, которая часто посылает ложные сигналы, и сохранил эффект скользящей средней. Поэтому индикатор MACD обладает характеристиками тренда скользящей средней, стабильности и устойчивости. Это индикатор технического анализа, используемый для оценки времени покупки и продажи акций и прогнозирования роста и падения цен на акции. Метод расчета следующий:

Рисунок 3-40
Индикатор KDJ
Индикатор KDJ сочетает в себе преимущества концепции импульса, индикаторов силы и слабости и скользящей средней и используется для измерения степени отклонения цен акций от нормального ценового диапазона. Принимается во внимание не только цена закрытия, но и недавние самые высокие и самые низкие цены, что позволяет избежать недостатка, связанного с учетом только цены закрытия и игнорированием истинной волатильности. Метод расчета следующий:

Рисунок 3-41
Написание стратегии
Наставник Уоррена Баффета Бенджамин Грэм однажды упомянул в своей книге «Разумный инвестор» торговую модель динамического баланса между акциями и облигациями.
Эта торговая модель очень проста:
Инвестируйте 50% своих денег в фонды акций, а оставшиеся 50% — в фонды облигаций. То есть, на акции и облигации приходится по половине каждой.
Проводите ребалансировку активов один раз через фиксированные промежутки времени или на основе изменений на рынке, чтобы восстановить соотношение активов в виде акций и активов в виде облигаций до первоначального значения 1:1. Вот и вся логика стратегии, включая то, когда покупать и продавать, сколько покупать и продавать. Достаточно просто!
В этом методе волатильность фондов облигаций на самом деле очень мала, намного ниже волатильности акций, поэтому облигации используются здесь в качестве «якоря», то есть облигации используются для измерения того, выросли ли акции слишком сильно. Это все еще слишком мало прироста.
Если цена акций растет, рыночная стоимость акций будет больше рыночной стоимости облигаций. Когда соотношение рыночной стоимости двух превышает установленный порог, общая позиция будет скорректирована, акции будут проданы, и облигация будет куплена, чтобы восстановить соотношение рыночной стоимости акций и облигаций до исходного значения 1:1.
Напротив, если цена акций падает, рыночная стоимость акций будет меньше рыночной стоимости облигаций. Когда соотношение рыночной стоимости двух превышает установленный порог, общая позиция будет скорректирована для покупки акций и продать облигации, чтобы восстановить соотношение рыночной стоимости акций и облигаций до исходного 1:1.
Таким образом, в динамически сбалансированном соотношении между акциями и облигациями достаточно наслаждаться плодами роста акций и уменьшать волатильность активов.
Стратегическая логика
Согласно текущей стоимости BTC, остаток на счете составит 5000 иен наличными и 0,1 BTC, то есть начальное соотношение наличных денег к рыночной стоимости BTC составит 1:1.
Если цена BTC вырастет до 6000 иен, то есть рыночная стоимость BTC станет больше остатка на счете, а разница между ними превысит установленный порог, то будет продано (6000-5000)/6000/2 монеты. Это означает, что BTC вырос и деньги можно обменять обратно.
Если цена BTC упадет до 4000 иен, то есть рыночная стоимость BTC меньше остатка на счете, а разница между ними превысит установленный порог, то купите (5000-4000)/4000/2 монеты. Это означает, что BTC обесценился, поэтому выкупайте BTC обратно.
Таким образом, независимо от того, растет или падает курс BTC, баланс счета и рыночная стоимость BTC всегда остаются равными. Если BTC падает, купите часть, а когда он снова вырастет, продайте часть, просто как баланс.
Условия покупки: Если текущая рыночная стоимость позиции за вычетом текущего доступного остатка составляет менее 5% от отрицательного текущего доступного остатка, открывайте позицию на покупку.
Условия продажи:Если текущая рыночная стоимость позиции за вычетом текущего доступного остатка превышает 5% от текущего доступного остатка, закройте позицию и продайте.
Предпосылки
- Текущий рынок
- Текущие активы
- Общая рыночная стоимость монет
- Разница в активах
Строительство стратегии
Стратегия визуального создания. Шаг 1
Мы вычисляем четыре предпосылки для торговой стратегии и присваиваем им соответствующие переменные. При визуальном программировании блоки кода выглядят следующим образом. Как показано ниже

Рисунок 3-42
Следует отметить, что общая рыночная стоимость валюты представляет собой общую рыночную стоимость текущего количества имеющихся монет, а метод ее расчета заключается в умножении текущего общего количества имеющихся монет на текущую последнюю цену. Разница в активах представляет собой общую рыночную стоимость валюты за вычетом текущего доступного остатка.
Стратегия визуального создания, шаг 2
После того, как предварительные условия и необходимые условия заданы, необходимо написать логику транзакции. Это не так сложно, как вы могли подумать. Это не что иное, как выражение вышеприведенной логики стратегии в виде блоков кода.
То есть, если разница в активах составляет менее 5% от отрицательного доступного остатка, покупайте; если разница в активах составляет более 5% от доступного остатка, продавайте. Как показано ниже:

Рисунок 3-43
Вся стратегия, кажется, написана, но вы должны знать, что программа выполняется сверху вниз и останавливается после выполнения. Однако наша торговая стратегия заключается не в однократном выполнении торговых условий, а в их многократном выполнении.
Другими словами, программа должна постоянно проверять, выполнены ли условия стратегии. Если да, то выполнить покупку или продажу; в противном случае продолжать проверку. На этом этапе вам необходимо использовать другой оператор цикла, как показано ниже:

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

Рисунок 3-45
На этом этапе полная торговая стратегия завершена. Чтобы позаботиться о тех, кто хочет воспользоваться нами, эта стратегия была опубликована на Стратегическом квадрате и может быть напрямую скопирована и изучена.
Заключение
Правило 10 000 часов всегда существует, но для трейдеров, не имеющих базовых знаний, невозможно потратить 10 000 часов, чтобы вернуться в отрасль. Поэтому вам нужна лестница, а для трейдеров с нулевыми знаниями программирования визуальное программирование Inventor Quant — это лестница для быстрого входа.
При визуальном программировании вам не нужно запоминать синтаксис и названия методов, вы можете просто просматривать функциональные модули и находить то, что вам нужно. Это также является изначальным намерением изобретателя количественного анализа — помочь большему количеству новичков в количественном анализе снизить порог входа и повысить их интерес к количественной торговле, чтобы каждый мог стать количественным трейдером!
Однако, несмотря на это, визуальное программирование не представляет никаких проблем в качестве трамплина к количественному обучению, но у него есть свои ограничения, такие как невозможность разрабатывать слишком сложные и изощренные торговые стратегии. Но это не повлияет на ваш первый шаг в количественной торговле!
Предварительный просмотр следующего раздела
С точки зрения профессионализма количественной торговли и язык май, и визуальный язык являются всего лишь переходными языками для входа в мир количественной торговли. Их языковые особенности определяют их ограничения в разработке количественных торговых стратегий, а некоторые сложные стратегии вряд ли будут реализованы. Поэтому в следующем разделе мы научим вас JavaScript, который является формальным языком программирования высокого уровня и единственным способом для вас продвинуться к продвинутой количественной торговле.
Домашнее задание
- Попробуйте реализовать индикатор полос Боллинджера, используя визуальный язык.
- Попробуйте использовать торговый модуль в этом разделе для завершения торговой стратегии.
Глава 4. Реализация торговых стратегий на основных языках программирования
4.1 Краткое введение в язык JavaScript
краткое содержание
Как будущая звезда количественного трейдинга, вы не сможете просто выучить простой язык. Хотя язык Mai и язык визуализации количественных инструментов изобретателя могут помочь вам начать работу, они имеют много ограничений при разработке стратегии из-за особенностей своего языка. Поэтому, если вы хотите закрепиться в количественной торговле, вам необходимо изучить формальный язык программирования.
Зачем изучать JavaScript
По сравнению с визуальными языками JavaScript имеет более высокую производительность и эффективность выполнения. А с точки зрения разработки стратегии JavaScript гораздо более гибок, чем визуальные языки. Например, если вы хотите разработать арбитражную стратегию, вы не можете использовать визуальный язык, потому что он имеет ограниченные модули и не поддерживает стратегии, подобные арбитражным, в то время как JavaScript может легко справиться с этой работой.
Кроме того, JavaScript более лаконичен и элегантен, чем визуальные языки. Например, 10 строк кода на визуальном языке можно записать в 5 строках JavaScript. В некотором смысле визуальный язык — это просто текстовая версия JavaScript, а выполнение и логика его кода почти такие же, как у JavaScript. Если вы изучите визуальный язык, изучение JavaScript будет очень простым.
Введение в JavaScript
JavaScript — формальный язык программирования высокого уровня. Подходит в качестве вводного языка для изучения программирования, а также в качестве рабочего языка для ежедневного развития. Это один из самых перспективных и многообещающих языков программирования на сегодняшний день, и он по-прежнему занимает непоколебимое доминирующее положение на стороне браузеров. Хотя он и известен разработкой веб-страниц, он также используется во многих небраузерных средах, таких как серверы, ПК, мобильные устройства и т. д. Конечно, он также может заниматься количественной торговлей!
Полная стратегия
Чтобы помочь вам быстро усвоить ключевые знания этого раздела, перед тем как приступить к краткому введению в квантованный язык JavaScript, вам следует сначала получить предварительное представление о концепциях этого раздела. Давайте в качестве примера возьмем простейшую стратегию двойной скользящей средней:
Открытие длинной позиции: Если текущая позиция отсутствует и 5-периодная скользящая средняя больше 20-периодной скользящей средней.
Открыть короткую позицию: Если текущая позиция отсутствует и 5-периодная скользящая средняя меньше 20-периодной скользящей средней.
Закрытие длинной позиции:Если в данный момент вы занимаете длинную позицию, а 5-периодная скользящая средняя меньше 20-периодной скользящей средней.
Закрытие короткой позиции: Если в данный момент вы занимаете короткую позицию, а 5-периодная скользящая средняя больше 20-периодной скользящей средней.
Если бы это было написано на JavaScript, это выглядело бы так:

Рисунок 4-1
Код на рисунке выше представляет собой полную количественную торговую стратегию, написанную на JavaScript. Он может работать в режиме реального времени и автоматически размещать заказы. По объему кода этот язык проще визуального языка. Процесс разработки всей стратегии включает в себя: установку типов рынка, получение данных K-линии, получение информации о позиции, расчет логики транзакции и размещение ордеров на покупку и продажу.
Идентификатор
Все в JavaScript (переменные, имена функций и операторы) чувствительны к регистру, что означает, что имя переменной test и имя переменной Test — это две разные переменные. Первым символом идентификатора (имени переменной, функции, свойства, параметра функции) должна быть буква, подчеркивание (_), знак доллара ($) и следующие символы также могут быть цифрами, как показано на следующем рисунке:

Рисунок 4-2
Примечание
Комментарии включают однострочные комментарии и комментарии на уровне блоков. Однострочные комментарии начинаются с двух косых черт, а блочные комментарии начинаются с косой черты и звездочки (/) и заканчивается звездочкой и косой чертой (/), как показано ниже:

Рисунок 4-3
Заявления
Каждое утверждение заканчивается точкой с запятой; хотя это не обязательно, мы рекомендуем никогда ее не опускать. Добавление точек с запятой в некоторых случаях может повысить производительность кода, как показано на следующем рисунке:

Рисунок 4-4
Переменные
Переменные могут хранить любые типы данных. Чтобы создать переменную, используйте оператор var, за которым следует имя переменной. При определении переменной вы также можете задать ее значение. После создания переменной вам не нужно использовать оператор var для повторной установки ее значения, как показано ниже:

Рисунок 4-5
данные
JavaScript имеет всего 5 типов данных, а именно: Undefined, Null, Boolean, Number и String, как показано на следующем рисунке:

Рисунок 4-6
Неопределенное имеет только одно значение — специальное «undefined», которое представляет собой значение, которое еще не установлено. Например, если мы только определим переменную и не зададим для нее значение, то значение переменной будет «неопределено».
У Null есть только одно значение — специальное «null», которое представляет собой пустое значение. Например, если мы сначала создадим переменную, а затем установим значение переменной на «null», то возвращаемое переменной значение будет «null».
Логическое значение имеет два значения: «истина» и «ложь». «истина» представляет истину, а «ложь» представляет ложь. Обратите внимание, что и «true», и «false» пишутся строчными буквами.
Число — тип числа, включая: положительные числа, отрицательные числа, целые числа, десятичные дроби и т. д. Кроме того, «NaN» — это также специальное число, которое специально указывает на ситуацию, когда значение не возвращается, например: 1, деленное на 0, возвращает «NaN».
Вы можете понимать строку как текст, включая китайский и английский, и можете построить строку, используя одинарные или двойные кавычки. Например: «fmz» или «inventor quantization».
Объекты
Объект можно представить как контейнер для хранения различных данных, в котором атрибуты и значения соответствуют друг другу. Сначала вы можете создать этот контейнер с помощью оператора new. Вы также можете добавлять свойства и методы к созданному объекту, как показано на следующем рисунке:

Рисунок 4-7
Группы
Массив также является контейнером для хранения различных данных, но элементы в контейнере располагаются в порядке слева направо. Первый элемент — 0, второй элемент — 1 и т. д. Кроме того, массивы JavaScript могут хранить любые типы данных, как показано ниже:

Рисунок 4-8
функция
Функции в JavaScript по сути такие же, как функции, которые мы изучали в средней школе. Вы можете думать об этом как о том, что передается и что выводится через вычисление функции, как показано на следующем рисунке:

Рисунок 4-9
Оператор
В JavaScript есть различные операторы, а именно арифметические операторы, операторы сравнения и логические операторы. Среди них арифметические операторы — это математические операции сложения, вычитания, умножения и деления. Операторы сравнения могут сравнивать, являются ли два значения меньше или меньше. Основными логическими операторами являются: логическое И, логическое ИЛИ и логическое НЕ. Как показано на следующем рисунке:

Рисунок 4-10
Следует отметить, что: «&&» — это логическое И, что означает «и». «||» — логическое ИЛИ, что означает «или». «!» — логическое отрицание, означающее «нет»:
«&&» означает, что когда все условия «истинны», конечное условие будет «истинным»;
«||» означает, что среди всех условий, пока хотя бы одно из них «истинно», конечное условие будет «истинным».
Приоритеты
Если есть 100*Какой шаг программа вычисляет первым для выражения (10-1)/(10+5)? Математика средней школы учит нас: ① Если это операция одного уровня, то она обычно вычисляется слева направо. ② Если есть и сложение, и вычитание, и умножение, и деление, сначала вычислите умножение и деление, а затем сложение и вычитание. ③Если есть скобки, сначала вычислите содержимое скобок. ④ Если это соответствует законам эксплуатации, то законы эксплуатации можно использовать для упрощения расчетов. То же самое справедливо и для приоритета языка JavaScript, как показано ниже:

Рисунок 4-11
Условные операторы
Часто при написании кода вам придется выполнять разные действия для разных решений. Для выполнения этой задачи вы можете использовать условные операторы в своем коде. В JavaScript мы можем использовать следующие условные операторы:
Оператор if — используйте этот оператор для выполнения кода только в том случае, если указанное условие истинно.
оператор if...else — выполняет код, если условие истинно, и выполняет другой код, если условие ложно
Оператор if...else if....else — используйте этот оператор, чтобы выбрать один из нескольких блоков кода для выполнения.
Оператор switch — используйте этот оператор, чтобы выбрать один из нескольких блоков кода для выполнения.
Если утверждение
Этот оператор выполняет код только в том случае, если указанное условие истинно. Пожалуйста, используйте строчные буквы. Использование заглавных букв (IF) приведет к ошибке JavaScript! Как показано на следующем рисунке:

Рисунок 4-12#
если...иначе утверждение
Когда условие истинно, выполняется код, а когда условие ложно, выполняется другой код, как показано на следующем рисунке:

Рисунок 4-13
для цикла
Иногда нам нужно получить данные K-line за последние несколько дней, и нам нужно получить их из массива K-line последовательно в соответствии с положением данных K-line. Тогда очень удобно использовать цикл for, как показано на следующем рисунке:

Рисунок 4-14
Цикл While
Мы все знаем, что рынок постоянно меняется. Если вы хотите получить последний массив K-line, вам придется снова и снова запускать один и тот же код. Затем используйте цикл whilex. Пока указанное условие истинно, цикл всегда может получить последний массив K-line.

Рисунок 4-15
оператор break и оператор continue
Цикл имеет предусловие. Только когда предусловие «истинно», цикл начнет делать что-то повторно, и цикл не закончится, пока предусловие не станет «ложным». Однако оператор break может немедленно выйти из цикла во время его выполнения; оператор continue может прервать определенный цикл, а затем продолжить следующий цикл. Как показано на следующем рисунке:

Рисунок 4-16
заявление о возврате
Оператор return завершает выполнение функции и возвращает значение функции. Оператор return может появляться только в теле функции. Если он появится где-либо еще в коде, это вызовет синтаксическую ошибку!

Рисунок 4-17
Структура стратегии CTA
В Inventor Quantitative Tool очень удобно писать стратегии на JavaScript. Официально встроен набор стандартных фреймворков стратегий, как показано на следующем рисунке:

Рисунок 4-18
Как показано в коде выше, это стандартный фреймворк стратегии. За исключением «кода продукта товарных фьючерсов», который можно изменить, все остальное находится в фиксированном формате. Самое большое преимущество использования фреймворка для написания стратегий заключается в том, что вам нужно написать только логику стратегии. Другие вопросы, такие как приобретение рынка, обработка заказов и т. д., обрабатываются фреймворком. Это позволяет вам сосредоточиться на разработке стратегии.
Подвести итог
Выше приведено краткое введение в язык JavaScript. После его изучения вы сможете программировать количественные торговые стратегии. Если вам необходимо написать более сложные стратегии, вы можете обратиться к документации по API языка JavaScript инструмента Inventor Quantitative.
Предварительный просмотр следующего раздела
Дневная торговля также является торговой моделью. Этот метод не оставляет позиции на ночь, поэтому риск волатильности рынка ниже. При возникновении неблагоприятных рыночных условий можно вовремя внести коррективы. После изучения языка JavaScript в этом разделе, в следующем разделе мы покажем вам, как написать реализуемую внутридневную количественную торговую стратегию.
Домашнее задание
- Попробуйте использовать язык JavaScript в Inventor Quantitative Tool для получения исторических данных K-line.
- Попробуйте записать код стратегии в начале этого раздела и добавить комментарии.
4.2 Как реализовать стратегическую торговлю с использованием языка JavaScript
краткое содержание
В предыдущей статье мы объяснили предпосылки для внедрения торговых стратегий с точки зрения введения в язык JavaScript, базового синтаксиса, структуры стратегии CTA и т. д. В этой статье мы продолжим содержание предыдущей статьи и поможем вам шаг за шагом внедрить осуществимую внутридневную количественную торговую стратегию с помощью обычно используемых модулей стратегии и технических индикаторов.
Введение в стратегию
Полосы Боллинджера также называются каналами Боллинджера, сокращенно BOLL на английском языке. Это один из наиболее часто используемых технических индикаторов, изобретенный Джоном Боллинджером в 1980-х годах. Теоретически цены всегда колеблются в определенном диапазоне вокруг значения. Основываясь на этой теоретической основе, Bollinger Bands ввел понятие «ценового канала».
Метод расчета заключается в использовании статистических принципов для того, чтобы сначала вычислить «стандартное отклонение» цены за определенный период времени, а затем добавить/вычесть 2-кратное стандартное отклонение от скользящей средней, чтобы найти «доверительный интервал» цены. Его основная форма представляет собой полосовой канал, состоящий из трех путей (средний путь, верхний путь и нижний путь). Средняя дорожка — это средняя стоимость цены, а верхняя и нижняя дорожки представляют собой линию давления и линию поддержки цены соответственно.
Благодаря принятию концепции стандартного отклонения ширина полосы Боллинджера будет динамически корректироваться в соответствии с последними колебаниями цен. Когда волатильность низкая, полосы Боллинджера становятся уже; когда волатильность высокая, полосы Боллинджера становятся шире. Когда канал BOLL становится уже, это означает, что цена постепенно возвращается к среднему значению. Когда канал BOLL меняется с узкого на широкий, это означает, что рынок начинает меняться. Если цена пересекает верхнюю дорожку, это указывает на то, что покупательная способность увеличивается. Если цена пересекает нижнюю дорожку, это указывает на то, что продающая способность увеличивается.
Метод расчета индикатора Bollinger Bands
Среди всех технических индикаторов метод расчета полос Боллинджера является одним из самых сложных, который вводит понятие стандартного отклонения в статистику и включает в себя расчет средней линии (MB), верхней линии (UP) и нижней линии (DN). Метод расчета следующий:
Средний путь = Простая скользящая средняя за N периодов времени
Верхняя дорожка = Средний трек + K × стандартное отклонение N периодов времени
Нижний рельс = Средний трек − Стандартное отклонение K × N периодов времени

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

Рисунок 4-20
Если после открытия позиции на покупку цена возвращается к средней дорожке полос Боллинджера, мы считаем, что бычья сила ослабевает или медвежья сила усиливается, и генерируется сигнал на продажу и закрытие; если после открытия позиции на продажу цена возвращается к средней дорожке полос Боллинджера, мы считаем, что медвежья сила ослабевает или бычья сила усиливается, и генерируется сигнал на покупку и закрытие.
Условия торговли
Открытие длинной позиции: Если позиции нет, а цена закрытия больше верхней дорожки, а время не 14:45
Открыть короткую позицию:Если позиции нет, а цена закрытия ниже нижней дорожки, а время не 14:45
Закрытие длинной позиции:Если вы держите длинный ордер, а цена закрытия ниже средней дорожки или время 14:45
Закрытие короткой позиции:Если вы держите короткий ордер, а цена закрытия выше средней дорожки или время 14:45
Реализация кода стратегии
Чтобы реализовать стратегию, нам сначала нужно подумать, какие данные нам нужны? Через какой API его получить? Как же тогда рассчитать логику транзакции? Наконец, какие методы используются для размещения заказов и торговли? Далее давайте реализуем это шаг за шагом:
Шаг 1: Используйте структуру стратегии CTA
Так называемый фреймворк стратегии CTA — это стандартный фреймворк, официально запущенный Inventor Quantitative. Используя этот фреймворк, вам не придется беспокоиться о тривиальных вопросах разработки количественных торговых стратегий, и вы сможете сосредоточиться непосредственно на программировании торговой логики. Например, если вы не используете эту структуру, то при размещении заказа вам необходимо учитывать помесячный перевод, цены покупки и продажи заказа, отмену заказа или последующие действия в случае неисполнения заказа и т. д.

Рисунок 4-21
На рисунке выше представлена структура стратегии CTA с использованием количественных инструментов изобретателя. Это фиксированный формат кода, и все коды логики транзакций записываются, начиная с строки 3. В процессе использования, за исключением кода сорта (светло-желтый), никаких других изменений не требуется.
Следует отметить, что код продукта на рисунке выше — «rb000/rb888», что означает, что данные сигнала используют «rb000», данные транзакции используют «rb888», а смещение месяца происходит автоматически. Конечно, вы также можете указать конкретный код продукта, например, код продукта «rb1910», что означает, что и данные сигнала, и данные транзакции будут использовать «rb1910».
FMZ имеет встроенную библиотеку JavaScript для торговли товарными фьючерсами. Вы можете использовать ее в своем коде, просто нажав на ссылку в интерфейсе редактирования стратегии:

Шаг 2: Получите различные данные
Подумайте хорошенько: какие данные вам нужны? Исходя из нашей торговой логики стратегии, мы пришли к следующему выводу: сначала нам необходимо получить текущее состояние позиции, затем сравнить соотношение между ценой закрытия и верхней, средней и нижней дорожками индикатора полос Боллинджера и, наконец, определить, приближается ли закрытие рынка. Итак, давайте получим эти данные.
Получение данных K-линии
Первым шагом является получение массива K-линий и цены закрытия предыдущей K-линии, поскольку только с помощью массива K-линий можно рассчитать индикатор полос Боллинджера. Вот как это выглядит в коде:

Рисунок 4-22
Как показано на рисунке выше:
Строка 4: Получить массив K-строк, который имеет фиксированный формат.
Строка 5: Фильтрация длины K-линии, поскольку параметр, который мы используем для расчета индикатора Bollinger Band, равен 20. Если K-линия меньше 20, индикатор Bollinger Band не может быть рассчитан. Поэтому нам нужно отфильтровать здесь длину K-линии. Если K-линий меньше 20, мы вернемся напрямую и продолжим ждать следующую K-линию.
Строка 6: Из полученного массива K-линий сначала получаем объект предыдущей K-линии, а затем из объекта получаем цену закрытия. Получить предпоследний элемент массива, который равен длине массива минус 2 (r[r.length - 2]); Элементы массива K-line — это все объекты, которые содержат цену открытия, максимальную цену, минимальную цену, цену закрытия, объем торгов и время. Чтобы получить цену закрытия, просто добавьте "." и имя атрибута в конце (r[r.length - 2].Close)。
Получить данные времени K-линии
Поскольку мы используем внутридневную стратегию, нам нужно закрыть позицию до закрытия рынка, поэтому нам нужно определить, близка ли текущая K-линия к закрытию рынка. Если это так, мы закрываем позицию. Если нет, мы можем открыть позицию. Код выглядит следующим образом:

Рисунок 4-23
Как показано на рисунке выше:
Строка 8: Получить атрибут временной метки текущей K-строки, а затем создать объект времени (new Date(timestamp)).
Строка 9: Рассчитайте часы и минуты на основе объекта времени и определите, равно ли время К-линии 14:45.
Получить данные о местоположении
Информация о позиции является очень важным условием в количественных торговых стратегиях. Когда торговые условия выполнены, также необходимо определить, следует ли размещать ордер на основе статуса позиции и количества позиций. Например: при выполнении условий открытия позиции на покупку, если у вас есть позиция, вам не нужно повторно размещать ордер; если у вас нет позиции, вы можете разместить ордер. Вот как это выглядит в коде:

Рисунок 4-24
Как показано на рисунке выше:
Строка 11: Получить текущий статус позиции. Если имеется несколько ордеров, значение равно 1; если имеются короткие ордера, значение равно -1; если позиций нет, значение равно 0.
Получить данные полос Боллинджера
Далее необходимо рассчитать значения верхней, средней и нижней дорожек индикатора Bollinger Bands. Затем вам нужно сначала получить массив полос Боллинджера, а затем получить значения верхней, средней и нижней полос из массива. В Inventor Quantitative Tool очень просто получить массив Bollinger Band. Вы можете напрямую вызвать Bollinger Band API. Сложность заключается в получении значений верхней, средней и нижней направляющих, поскольку массив Bollinger Band является двумерным массивом.
Двумерный массив на самом деле очень прост для понимания. Это массив в массиве. Поэтому порядок получения следующий: сначала получить указанный массив в массиве, а затем получить указанный элемент из указанного массива, как показано на следующем рисунке:

Рисунок 4-25
Как показано на рисунке ниже, строки 13–19 используют код для получения значений верхней, средней и нижней границ полос Боллинджера. Среди них строка 13 напрямую использует API количественного инструмента изобретателя для непосредственного получения массива полос Боллинджера; строки 14–16 сначала получают массив верхней направляющей, массив средней направляющей и массив нижней направляющей в двумерном массиве соответственно; строки 17–19 получают значения верхней направляющей, средней направляющей и нижней направляющей полосы Боллинджера предыдущей K-линии из массива верхней направляющей, массива средней направляющей и массива нижней направляющей соответственно.

Рисунок 4-26
Шаг 3: Оформите заказ
Используя приведенные выше данные, вы можете написать торговую логику и код для размещения ордеров. Формат также очень прост. Наиболее часто используемый — это «оператор if», который можно описать словами как: если выполнены условия 1 и 2, оформить заказ; если выполнены условия 3 или 4, оформить заказ. Как показано на следующем рисунке:

Рисунок 4-27
На рисунке выше строки 21–24 представляют собой торговую логику и коды размещения ордеров. Сверху вниз они следующие: закрытые длинные, закрытые короткие, открытые длинные, открытые короткие.
Если взять в качестве примера открытие длинной позиции (строка 23), то это "оператор if". Если в этом операторе выполняется только одна строка кода, фигурные скобки "{}" можно опустить. Это утверждение переводится в текст следующим образом: Если текущая позиция равна 0, а цена закрытия больше верхней дорожки, а время K-линии не равно 14:45, то «возврат 1»
Внимательные люди могут обнаружить, что в этих строках есть "return 1" и "return -1". Это фиксированный формат, который означает: если это покупка, напишите "return 1"; если это продажа, напишите "return -1". Открытие длинной позиции и закрытие короткой позиции являются покупкой, поэтому напишите «возврат 1»; открытие короткой позиции и закрытие длинной позиции являются продажей, поэтому напишите «возврат -1».
Полный код стратегии
На этом этапе написан полный код стратегии. Если бы торговая структура, торговые данные, торговая логика, размещение ордеров и т. д. были написаны отдельно, разве это не было бы очень просто? Ниже приведен полный код этой стратегии:

Рисунок 4-28
Следует отметить два момента: постарайтесь (но не обязательно) написать логику стратегии так, чтобы при выполнении условия корневой K-линии размещался следующий ордер K-линии, или при выполнении предыдущего условия K-линии размещался корневой ордер K-линии. Таким образом, результаты бэктеста не будут сильно отличаться от фактических результатов. Вам не обязательно писать это именно так, но вы должны обратить внимание на то, верна ли логика стратегии. В общем случае, логику закрытия позиции следует писать до логики открытия позиции. Цель этого — сделать логику стратегии максимально соответствующей вашим ожиданиям. Например: если логика стратегии совпадает с обратной позицией, правило обратной позиции заключается в том, чтобы сначала закрыть позицию, а затем открыть новую позицию. Вместо того, чтобы сначала открыть новую позицию, а затем закрыть ее. Если мы напишем закрывающую логику непосредственно перед открывающей логикой, эта проблема не возникнет.
Подвести итог
Выше мы изучили каждый шаг разработки полноценной внутридневной количественной торговой стратегии, включая: введение в стратегию, метод расчета индикатора полос Боллинджера, логику стратегии, условия покупки и продажи, реализацию кода стратегии и т. д. С помощью этого стратегического кейса вы сможете не только ознакомиться с методом программирования количественного инструмента изобретателя, но и адаптировать его к различным стратегиям на основе этого шаблона.
Количественные торговые стратегии — это не более чем резюме субъективного торгового опыта или систем. Если мы запишем опыт или системы, используемые в субъективной торговле, прежде чем писать стратегии, а затем переведем их в коды один за другим, вы обнаружите, что писать стратегии будет намного проще. Попробуйте!
Предварительный просмотр следующего раздела
При разработке количественных торговых стратегий, если вы можете выбрать только один язык программирования, то без колебаний вы должны выбрать Python. От сбора данных до бэктестинга стратегии и торговли, Python охватил всю бизнес-цепочку. Он занимает важное положение в области финансовых количественных инвестиций. В следующем курсе мы изучим базовые знания языка Python.
Домашнее задание
- Попробуйте использовать знания из этого раздела для реализации стратегии двойной скользящей средней.
- Попробуйте реализовать алгоритм индикатора KDJ с использованием языка JavaScript в Inventor Quantitative Tool.
4.3 Краткое введение в язык Python
краткое содержание
При разработке количественных торговых стратегий, если вы можете выбрать только один язык программирования, то без колебаний вы должны выбрать Python. От сбора данных до бэктестинга стратегии и торговли, Python охватил всю цепочку бизнеса. Он занимает важное положение в области финансовых количественных инвестиций. В этом курсе мы изучим базовые знания языка Python.
Зачем изучать так много языков программирования?
Оглядываясь на предыдущие курсы, мы изучили в общей сложности: язык Mai, визуальный язык, язык JavaScript, включая язык Python, который будет изучаться в этом разделе. У некоторых друзей могут возникнуть вопросы. Я здесь, чтобы изучить количественную торговлю, зачем мне изучать так много языков программирования?
На самом деле, каждый язык программирования имеет свои языковые характеристики, и нет различия между хорошими и плохими языками. Это больше зависит от того, для какого языка программирования больше подходит ваша стратегия и подходит ли вам этот язык программирования. Поэтому есть поговорка: узнать можно, только попробовав самому. Вот почему мы так много места уделили обсуждению языков программирования. Если вы хотите хорошо выполнять свою работу, вы должны сначала отточить свои инструменты.
В то же время мы также стремимся открыть дверь к количественным исследованиям для всех и популяризировать знания о различных языках программирования. Количественные исследования не так таинственны и недоступны, как мы себе представляем. Я верю, что количественные исследования станут популярными и доступными для широкой публики в будущем.
Почему стоит выбрать Python для количественной торговли
Процесс количественной торговли — это не что иное, как сбор данных, анализ и расчет данных, обработка данных и т. д. С точки зрения анализа данных ни один другой язык не может быть столь же хорош в вычислениях и поддерживать такую производительность, как Python. Особенно при обработке данных анализа временных рядов (K-line — это данные временных рядов) преимущество Python в том, что он проще и удобнее. Кроме того, по сравнению с другими языками программирования, Python более лаконичен и прост в изучении. Чтение хорошей программы на Python похоже на чтение английского языка.
Пять причин выбрать Python
1. Количественное применение обширно:
И Quantopian в США, и Inventor Quant в Китае могут использовать язык Python.
2. Легко освоить:
Философия дизайна Python ориентирована на пользователя, и это интерпретируемый язык, который легко отлаживать.
3. Бесплатно и с открытым исходным кодом:
Отсутствие затрат на использование, открытый исходный код, повышенная эффективность обучения и использования.
4. Богатая библиотека:
Обработка данных, вычисление данных, визуализация, статистический анализ, технический анализ, машинное обучение...
5. Интерфейс приложения:
Интерфейсы для получения, хранения, вызова и размещения ордеров на основе рыночной информации в режиме реального времени с основных платформ.
Полная стратегия
Чтобы помочь вам быстро усвоить ключевые знания этого раздела, перед тем как приступить к краткому введению в квантованный язык JavaScript, вам следует сначала получить предварительное представление о концепциях этого раздела. Давайте в качестве примера возьмем простейшую стратегию двойной скользящей средней:
Открытие длинной позиции: Если текущая позиция отсутствует и 5-периодная скользящая средняя больше 20-периодной скользящей средней.
Открыть короткую позицию: Если текущая позиция отсутствует и 5-периодная скользящая средняя меньше 20-периодной скользящей средней.
Закрытие длинной позиции:Если в данный момент вы занимаете длинную позицию, а 5-периодная скользящая средняя меньше 20-периодной скользящей средней.
Закрытие короткой позиции: Если в данный момент вы занимаете короткую позицию, а 5-периодная скользящая средняя больше 20-периодной скользящей средней.
Если бы это было написано на Python, это выглядело бы так:

Рисунок 4-29
Код на рисунке выше представляет собой полную количественную торговую стратегию, написанную на Python. Он может работать в режиме реального времени и автоматически размещать заказы. С точки зрения объема кода Python превосходит JavaScript, поскольку мы не используем фреймворк CTA-трейдинга.
Однако процесс разработки всей стратегии практически одинаков: установка типов рынка, получение данных K-линии, получение информации о позиции, расчет торговой логики и размещение ордеров на покупку и продажу. Другими словами, хотя синтаксис программирования отличается, написанная логика стратегии та же самая, поэтому теперь давайте изучим базовый синтаксис Python!
Выбор версии
Существует две версии Python, а именно: Python2 и Python3. Когда-то была шутка, что Python похож на двуствольное ружье, но вы можете использовать только один ствол для стрельбы за раз, но вы никогда не узнаете, какой из них точнее. Поэтому, если вы новичок в Python, рекомендуется изучить непосредственно Python 3, поскольку это последняя версия, которая поддерживается сообществом Python. Наши курсы также преподаются на Python 3.
Идентификатор
Идентификатор — это имя переменной, например, test, Test, test10,демо и т.д. Все в Python (переменные, имена функций и операторы) чувствительны к регистру, что означает, что имя переменной test и имя переменной Test — это две разные переменные. Первым символом идентификатора (имени переменной, функции, свойства, параметра функции) должна быть буква, подчеркивание (), следующие за ним символы также могут быть цифрами, как показано на следующем рисунке:

Рисунок 4-30
Примечание
Комментарий — это перевод или объяснение строки кода. Правила очень просты и включают однострочные комментарии и комментарии на уровне блока. Однострочный комментарий начинается со знака решетки (#), а блочный комментарий начинается с трех одинарных кавычек (''') или трех двойных кавычек (""") и заканчивается тремя одинарными кавычками (''') или тремя двойными кавычками ("""), как показано на следующем рисунке:

Рисунок 4-31
Строки и отступы
Наиболее отличительной особенностью Python является использование отступов для обозначения блоков кода, без необходимости использования фигурных скобок {}. Количество пробелов для отступа может быть разным, но операторы в одном и том же блоке кода должны содержать одинаковое количество пробелов для отступа. Как показано ниже: В этом случае программа сообщит об ошибке. Даже если условие if истинно, "True" не будет выведено, поскольку Python автоматически определит, является ли синтаксис кода правильным, прежде чем код будет запущен. Если формат кода неверен, программа не будет запущена. Причина в том, что 5-я строка кода не имеет единого формата отступов кода. Отступ в четыре пробела — это фиксированный формат для Python, и каждый должен быть с ним знаком.

Рисунок 4-32
Переменные
Переменные могут хранить любые типы данных. Простое написание имени переменной создает переменную. Однако при создании переменной необходимо одновременно задать значение переменной, иначе программа выдаст сообщение об ошибке. Левая часть оператора знака равенства (=) — это имя переменной, а правая часть оператора знака равенства (=) — это значение, хранящееся в переменной. Как показано на рисунке ниже: name2 — имя переменной, а «inventor quantification» — значение переменной. Если вы не установите новое значение для name2, значение name2 всегда будет равно «квантификации изобретателя».

Рисунок 4-33
данные
В Python имеется шесть типов данных, три из которых являются неизменяемыми, а три — изменяемыми. Как следует из названия, после создания неизменяемых данных их значение не может быть изменено, а их адрес в памяти уникален; изменяемые данные — это ссылка на адрес в памяти, и если их значение изменяется, их адрес в памяти остается неизменным.
Неизменяемые данные (3): число, строка, кортеж;
Изменяемые данные (3): Список, Словарь, Набор.

Рисунок 4-34
Цифры
Числовые типы Python поддерживают int (целое число), float (число с плавающей точкой), bool (логическое значение) и complex (комплексное число). Встроенную функцию type() можно использовать для запроса типа объекта, на который ссылается переменная. Как показано ниже:

Рисунок 4-35
Оператор
Как и в большинстве языков, математика в Python проста. Будь то арифметические операторы, операторы сравнения или логические операторы, все они одинаковы и соответствуют тому, что мы изучали в школе. Среди них арифметические операторы — это математические операции сложения, вычитания, умножения и деления. Операторы сравнения могут сравнивать, являются ли два значения меньше или меньше. Основными логическими операторами являются: логическое И, логическое ИЛИ и логическое НЕ. [Можете ли вы кратко рассказать о строках, которые обычно используются в торговых стратегиях?] Например, в наших торговых стратегиях наиболее часто используемой строкой является код продукта, например: «rb1910», «MA1910».

Рисунок 4-36
Следует отметить, что «and» — это логическое И, что означает «и». «или» — логическое ИЛИ, что означает «либо». «!» — логическое отрицание, означающее «нет»:
«и» означает, что когда все условия «истинны», конечное условие «истинно»;
«или» означает, что среди всех условий, если хотя бы одно из них «истинно», конечное условие будет «истинным».
Приоритеты
Если есть 100*Какой шаг программа вычисляет первым для выражения (10-1)/(10+5)? Математика средней школы учит нас: ① Если это операция одного уровня, то она обычно вычисляется слева направо. ② Если есть и сложение, и вычитание, и умножение, и деление, сначала вычислите умножение и деление, а затем сложение и вычитание. ③Если есть скобки, сначала вычислите содержимое внутри скобок. ④ Если это соответствует законам эксплуатации, то законы эксплуатации можно использовать для упрощения расчетов. Приоритет языка май такой же, как показано ниже:

Рисунок 4-37
Булев
Булево значение представляет собой истину или ложь и обычно используется в условных суждениях и операторах цикла. Python определяет две константы «True» и «False» для представления значений true и false. Фактически, любой объект можно преобразовать в логический тип, а также использовать его напрямую для условного суждения, как показано на следующем рисунке:

Рисунок 4-38
Строка
Строки — это текст. Строки часто используются при установке кодов продуктов, например, «if1905». Строки в Python заключаются в одинарные кавычки ' или двойные кавычки ". Знак плюс + — это оператор конкатенации строк. Вы можете получить символ в строке на основе значения индекса, как показано ниже:

Рисунок 4-39
Список
Список — наиболее часто используемый тип данных в Python. Вы можете представить список как контейнер, за исключением того, что элементы в контейнере расположены в порядке слева направо. Первый элемент — 0, второй элемент — 1 и т. д. Кроме того, списки Python могут хранить любой тип данных, как показано ниже:

Рисунок 4-40
функция
Функции в Python по сути такие же, как функции, которые мы изучали в средней школе. Вы можете думать об этом как о том, что передается и что выводится через вычисление функции, как показано на следующем рисунке:

Рисунок 4-41
if-соглашение
Если утверждения часто встречаются в нашей жизни, например: Если сегодня пойдет дождь, я буду держать зонтик. То есть оператор выполнит код только в том случае, если указанное условие истинно. Обратите внимание на формат отступов в коде, в противном случае будет сгенерирована ошибка Python! Как показано на следующем рисунке:

Рисунок 4-42
оператор if...else
Утверждения If...else также являются часто используемыми утверждениями, например: Если сегодня пойдет дождь, я возьму зонтик; в противном случае я не буду брать зонтик. Оператор else является расширением оператора if, то есть код, следующий за else, будет выполнен только в том случае, если указанное условие равно False. Как показано на следующем рисунке:

Рисунок 4-43
Заявление Элиф
Поскольку Python не поддерживает операторы switch, для реализации нескольких условных суждений Python может использовать только операторы elif. Например: если это положительная линия, я буду настроен по-бычьи; в противном случае, если это отрицательная линия, я буду настроен по-медвежьи; в противном случае я подожду и посмотрю. Как показано на следующем рисунке:

Рисунок 4-44
для цикла
Иногда нам нужно получить данные K-line за последние несколько дней, и нам нужно получить их из массива K-line последовательно в соответствии с положением данных K-line. Тогда очень удобно использовать цикл for, как показано на следующем рисунке:

Рисунок 4-45
Цикл While
Мы все знаем, что рынок постоянно меняется. Если вы хотите получить последний массив K-line, вам придется снова и снова запускать один и тот же код. Затем используйте цикл whilex. Пока указанное условие истинно, цикл всегда может получить последний массив K-line.

Рисунок 4-46
оператор break и оператор continue
Цикл имеет предусловие. Только когда предусловие «истинно», цикл начнет делать что-то повторно, и цикл не закончится, пока предусловие не станет «ложным». Однако оператор break может немедленно выйти из цикла во время его выполнения; оператор continue может прервать определенный цикл, а затем продолжить следующий цикл. Как показано на следующем рисунке:

Рисунок 4-47
заявление о возврате
Оператор return завершает выполнение функции и возвращает значение функции. Оператор return может появляться только в теле функции. Если он появится где-либо еще в коде, это вызовет синтаксическую ошибку!

Рисунок 4-48
Структура стратегии
Вы можете понимать архитектуру стратегии как фиксированный формат стратегии. Количественный инструмент изобретателя принимает режим опроса. Ниже представлена классическая архитектура стратегии товарных фьючерсов.
Строки 4–7 — это основные функции входа всей программы, то есть компьютер начинает выполнять код со строки 4; затем он напрямую выполняет строку 5 и входит в бесконечный цикл; затем в бесконечном цикле выполняются функция логики стратегии (onTick) и функция сна (Sleep); функция onTick — это код в строке 1, а логику стратегии можно написать в строке 2; мы знаем, что в цикле скорость выполнения программы очень высокая, поэтому использование функции сна (Sleep) может приостановить программу на некоторое время. Следующий код Sleep(500) означает, что он спит 500 миллисекунд каждый раз, когда цикл завершается.

Рисунок 4-49
Подвести итог
Вышеизложенное — это краткое введение в язык Python. Хотя это всего лишь простые базовые знания, все равно не составит труда использовать их для написания простой количественной торговой стратегии. Если вам необходимо написать более сложные стратегии, вы можете обратиться к документации по API языка Python инструмента Inventor Quantitative.
Предварительный просмотр следующего раздела
Среди трендовых стратегий в области технического анализа, несомненно, двумя основными школами являются скользящая средняя и прорыв канала. Хотя цель состоит в том, чтобы уловить тенденцию движения цен, торговая философия и характеристики риска этих двух стратегий совершенно разные. После изучения введения в язык Python в этом разделе, в следующем разделе мы покажем вам, как написать количественную торговую стратегию для прорыва канала.
Домашнее задание
- Попробуйте использовать язык Python в Inventor Quantitative Tool для получения исторических данных K-line.
- Попробуйте записать код стратегии в начале этого раздела и добавить комментарии.
4.4 Как реализовать стратегическую торговлю с использованием языка Python
краткое содержание
В предыдущей статье мы изучили введение, базовый синтаксис, структуру стратегии и т. д. языка Python. Хотя содержание скучное, это важный навык для реализации вашей торговой стратегии, и вам следует его освоить. В этой статье мы будем ковать железо, пока горячо, и продолжим с базовыми знаниями Python из предыдущей статьи. Мы начнем с простой стратегии, изучим ее в процессе использования и поможем каждому шаг за шагом реализовать осуществимую количественную торговую стратегию.
Введение в стратегию
Среди многих торговых стратегий стратегия канала Дончиана должна быть одной из самых классических прорывных стратегий. Она была хорошо известна еще в 1970 году. В то время иностранная компания проводила имитационные тесты и исследования основных программных торговых стратегий. Результаты показали, что среди всех тестовых стратегий стратегия канала Дончиана оказалась наиболее успешной.
Позже в США состоялось самое известное в истории трейдинга обучение трейдеров-«черепах», которое привело к огромному успеху. В то время методы торговли «Черепашек» держались в секрете, но более десяти лет спустя, когда «Правила торговли Черепах» были обнародованы, люди обнаружили, что «Черепашки» использовали усовершенствованную версию канала Дончиана. стратегия.
Стратегии торговли прорывом подходят для торговли продуктами с относительно плавными трендами. Наиболее распространенный метод торговли прорывом заключается в использовании относительного отношения позиции между ценой и поддержкой и сопротивлением для определения конкретных торговых точек покупки и продажи. Стратегия канала Дончиана, представленная в этом разделе, основана на этом принципе.
Правила стратегии канала Дончиана
Канал Дончиана — это трендовый индикатор, его внешний вид и сигналы чем-то похожи на индикатор полос Боллинджера. Однако ценовой канал Дончиана строится на основе самых высоких и самых низких цен за определенный период времени. Например: вычислить максимальное значение самой высокой цены последних 50 К-линий для формирования верхнего трека; вычислить минимальное значение самой низкой цены последних 50 К-линий для формирования нижнего трека.
Этот индикатор состоит из трех кривых разных цветов. По умолчанию используются самые высокие и самые низкие цены за 20 периодов, чтобы показать волатильность рыночных цен. Когда канал узкий, это означает, что волатильность рынка мала. И наоборот, широкий канал означает, что волатильность рынка относительно велика.
Если цена поднимается выше верхней дорожки, это сигнал к покупке; и наоборот, если цена падает ниже нижней дорожки, это сигнал к продаже. Поскольку верхняя и нижняя дорожки рассчитываются с использованием самой высокой и самой низкой цен, при нормальных обстоятельствах цены редко поднимаются и опускаются ниже верхней и нижней линий канала одновременно. В большинстве случаев цены движутся односторонне по верхней или нижней дорожке или между верхней и нижней дорожками.
Метод расчета канала Дончиана
В Inventor Quantitative Tool метод расчета канала Дончиана очень прост. Вы можете напрямую использовать его для получения самой высокой цены или самой низкой цены в указанный период, как показано на рисунке ниже: 5-я строка — для получения максимального значения самой высокой цены за 50 периодов, а 6-я строка — для получения минимального значения самой низкой цены за 50 периодов.

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

Рисунок 4-51
Если цена возвращается к средней линии канала Дончиана после открытия длинной позиции, мы считаем, что быки слабеют или медведи усиливаются, и генерируется сигнал к распродаже; если цена возвращается к средней линии траектория канала Дончиана после открытия короткой позиции, мы считаем, что быки слабеют или медведи усиливаются, и генерируется сигнал к распродаже; когда она поднимается обратно к средней траектории канала Дончиана, мы считаем, что сила медведей ослабевает или сила быков усиливается, и формируется сигнал к покупке для закрытия.
Условия торговли
Открытие длинной позиции: Если позиции нет и цена закрытия больше верхней дорожки
Открыть короткую позицию: Если позиции нет и цена закрытия ниже нижней дорожки
Закрытие длинной позиции:Если вы держите длинный ордер, а цена закрытия ниже средней дорожки
Закрытие короткой позиции:Если вы держите короткий ордер и цена закрытия выше средней дорожки
Реализация кода стратегии
Первый шаг к реализации стратегии — получение данных, поскольку данные являются предпосылкой для торговой стратегии. Представьте, какие данные нам нужны? И как получить эти данные? Затем мы проектируем торговую логику на основе этих данных; наконец, мы размещаем ордера на покупку и продажу в соответствии с торговой логикой. Конкретные шаги следующие:
Шаг 1: Используйте торговую библиотеку
Вы можете думать о торговой библиотеке как о функциональном модуле. Преимущество использования торговой библиотеки в том, что она позволяет вам сосредоточиться на написании логики стратегии. Например: когда мы используем торговую библиотеку, при открытии и закрытии позиций мы можем напрямую использовать API ордеров в торговой библиотеке; но если мы не используем торговую библиотеку, при открытии и закрытии позиций нам необходимо получить рыночную цену, рассмотреть проблему размещения ордеров, но не их исполнения, рассмотреть проблему отмены ордеров и т. д.

Рисунок 4-52
На рисунке выше представлена структура стратегии CTA с использованием количественных инструментов изобретателя. Это фиксированный формат кода, и все коды логики транзакций записываются, начиная со строки 4. Никаких изменений в других местах не требуется.
Библиотека шаблонов JavaScript встроена, Python необходимо скопировать и сохранить этот шаблон: https://www.fmz.com/strategy/24288. Затем нажмите «Ссылка» на странице редактирования политики. Конечно, вы также можете завершить стратегию, не используя библиотеку шаблонов.
Шаг 2: Получите различные данные
Подумайте хорошенько: какие данные вам нужны? Исходя из нашей торговой логики стратегии, мы пришли к следующему выводу: сначала нам необходимо получить текущее состояние позиции, затем сравнить соотношение между ценой закрытия и верхней, средней и нижней дорожками индикатора полос Боллинджера и, наконец, определить, приближается ли закрытие рынка. Итак, давайте получим эти данные.
Получение данных K-линии
Первый шаг — получить массив K-line и текущую цену закрытия K-line. Только с массивом K-line мы можем вызвать API для получения самой высокой или самой низкой цены за N периодов. Вот как это выглядит в коде:

Рисунок 4-53
Как показано на рисунке выше:
Строка 4: Получить массив K-строк, который имеет фиксированный формат.
Строка 5: Фильтрация длины линии K. Поскольку мы вычисляем самую высокую или самую низкую цену за N периодов, используемый параметр равен 50. Если количество линий K меньше 50, его невозможно рассчитать. Поэтому нам нужно здесь отфильтровать длину K-линии. Если K-линий меньше 50, пропускаем этот цикл и продолжаем ждать следующую K-линию.
Строка 6: Мы используем код «records[len(records) - 1]" сначала получает последние данные массива K-line, то есть последние данные K-line. Эти данные представляют собой объект, который содержит: цену открытия, максимальную цену, минимальную цену, цену закрытия, объем торгов, время и другие данные. Поскольку это объект, мы можем напрямую использовать ".Close", чтобы получить последнюю цену закрытия K-line.
Получить данные о местоположении
Информация о позиции является очень важным условием в количественных торговых стратегиях. Когда торговые условия выполнены, также необходимо определить, следует ли размещать ордер на основе статуса позиции и количества позиций. Например: при выполнении условий открытия позиции на покупку, если у вас есть позиция, вам не нужно повторно размещать ордер; если у вас нет позиции, вы можете разместить ордер. На этот раз мы напрямую инкапсулируем информацию о местоположении в функцию и можем использовать ее, просто вызвав эту функцию:

Рисунок 4-54
Как показано на рисунке выше:
Это функция, которая получает информацию о позиции. Если это короткая позиция, она возвращает 0; если это длинная позиция, она возвращает 1; если это короткая позиция, она возвращает -1. Обратите внимание на код выше:
Строка 2: создайте функцию с именем mp, которая не имеет параметров.
Строка 3: Получить массив позиций, имеющий фиксированный формат.
Строка 4: Определить длину массива позиций. Если его длина равна , это должна быть пустая позиция, поэтому вернуть 0
Строка 6: Используйте цикл for, чтобы начать обход массива. Следующая логика очень проста. Если вы удерживаете длинную позицию, возвращается 1; если вы удерживаете короткую позицию, возвращается -1.
Строка 18: вызов функции mp, которую мы только что написали, для получения информации о положении.
Получите самые высокие и самые низкие цены за последние 50 тыс. строк
В Inventor Quantitative Tool вы можете получить его напрямую, используя функции «TA.Highest» и «TA.Lowest», без необходимости самостоятельно писать логические вычисления. А результаты, возвращаемые функциями «TA.Highest» и «TA.Lowest», представляют собой конкретные значения, а не массивы. Это очень удобно. Мало того, в чиновнике встроены сотни функций индикаторов.

Рисунок 4-55
Как показано на рисунке выше:
Строка 19: Вызов функции «TA.Highest» для получения максимального значения самой высокой цены за 50 периодов.
Строка 20: Вызов функции «TA.Lowest» для получения минимального значения самой низкой цены за 50 периодов.
Строка 21: Рассчитайте среднее значение на основе максимального значения самой высокой цены за 50 периодов и минимального значения самой низкой цены за 50 периодов.
Шаг 3: Оформите заказ
Используя приведенные выше данные, вы можете написать торговую логику и код для размещения ордеров. Формат также очень прост. Наиболее часто используемый — это «оператор if», который можно описать словами как: если выполнены условия 1 и 2, оформить заказ; если выполнены условия 3 или 4, оформить заказ.

Рисунок 4-56
Как показано на рисунке выше:
Строка 22: Использовать библиотеку транзакций, которая имеет фиксированный формат.
Строки 23 и 24: Это оператор для закрытия длинной позиции, который использует "операторы сравнения" и "логические операторы", которые мы изучили ранее. Это означает, что если вы в данный момент держите длинную позицию, а цена закрытия меньше средней дорожки, все позиции будут закрыты.
Строки 25 и 26: Это оператор для закрытия короткого ордера, который использует "операторы сравнения" и "логические операторы", которые мы изучили ранее. Это означает, что если вы в данный момент держите короткий ордер и цена закрытия больше средней дорожки, все позиции будут закрыты.
Строка 27: Определить текущий статус позиции. Если позиция короткая, перейти к следующему шагу.
Строки 28 и 29: Определите, превышает ли цена закрытия верхнюю дорожку. Если цена закрытия поднимается выше верхней дорожки, покупайте, чтобы открыть позицию.
Строки 30 и 31: Определите, является ли цена закрытия ниже нижней дорожки. Если цена закрытия падает ниже нижней дорожки, продайте и откройте позицию.
Подвести итог
Выше мы изучили каждый шаг разработки полноценной количественной торговой стратегии с использованием Python, включая: введение в стратегию, метод расчета канала Дончиана, логику стратегии, условия покупки и продажи, реализацию кода стратегии и т. д. Этот раздел — всего лишь простая стратегия, отправная точка. Существует более одного метода. Вы можете накладывать различные методы торговли в соответствии с вашей собственной торговой системой, чтобы сформировать собственную количественную торговую стратегию.
Предварительный просмотр следующего раздела
При разработке количественных торговых стратегий, с точки зрения скорости выполнения языка программирования, если мы спросим, какой язык самый быстрый, то это может быть только C++. Особенно в области деривативов и высокочастотной торговли C++ имеет уникальную языковую специфику и преимущества в числовых расчетах. Его скорость может быть увеличена на несколько порядков по сравнению с JavaScript и Python. Если вы хотите развиваться в области деривативов и высокочастотной торговли в будущем, это будет курс, который вы не можете пропустить.
Домашнее задание
- Начните с копирования и внедрения стратегий из этого раздела.
- Попробуйте добавить в стратегию в этом разделе индикатор скользящей средней, чтобы уменьшить частоту транзакций.
Глава 5. Стратегическое бэктестирование, отладка и улучшение
5.1 Значение и подводные камни бэктестинга
краткое содержание
Бэктестинг — это самое большое различие между количественной и традиционной торговлей. Основываясь на реальных рыночных данных, которые появились в истории, он быстро имитирует запуск сигнала стратегии и сопоставление транзакций для получения отчетов об эффективности и других данных за определенный период времени. Это один из важнейших компонентов разработки стратегии для отечественных и зарубежных акций, товарных фьючерсов, валютных и других рынков.
Значимость бэктестинга
В предыдущих главах мы изучили основы основных языков программирования и научили вас, как использовать эти основы программирования для написания простых торговых стратегий. Можно сказать, что мы уже прошли больше половины долгого пути. Однако после того, как стратегия написана, ее нельзя напрямую реализовать на практике. Она по-прежнему требует постоянного бэктестинга - отладки - бэктестинга - отладки - и так далее, пока стратегия не сможет полностью реализовать содержание модели и работать гладко.
С точки зрения количественной торговой логики, стратегии фактически основаны на серии познаний и предположений о рынке. Тестирование на исторических данных может эффективно определить, являются ли эти предположения обоснованными и стабильными. Какие потери могут возникнуть в исторически нестабильные периоды и как принять решения по предотвращению этих потерь.
Кроме того, с точки зрения количественной торговой операции бэктестинг может помочь обнаружить ошибки в логике стратегии, такие как будущие функции, кража цен, мультиподгонка и т. д. Предоставьте надежные доказательства того, что стратегия может быть использована в реальной торговле.
- Проверьте точность торговых сигналов.
- Проверьте логику транзакции и осуществимость ваших идей.
- Выявите недостатки в своей торговой системе и улучшите свою изначальную стратегию.
Таким образом, значимость бэктестинга заключается в том, чтобы максимально реалистично восстановить реальный торговый процесс с помощью исторических данных, проверить эффективность стратегии, избежать высокой цены за неправильные стратегии и помочь нам проверять, улучшать и оптимизировать торговые стратегии.
Подводные камни бэктестинга
Мигающий сигнал ловушки обратного тестирования:
Торговые стратегии тестируются на основе статических исторических данных. Реальные данные транзакций являются динамическими. Например: если максимальная цена выше вчерашней цены закрытия, то покупайте, чтобы открыть позицию. В реальной торговле, если линия К еще не сформировалась, самая высокая цена будет динамичной, а торговый сигнал может мигать взад и вперед. Во время бэктестинга механизм бэктестинга может моделировать соответствующие транзакции на основе статических исторических данных.
Ловушка бэктестинга будущей функции:
Функция будущего использует будущие цены, что означает, что текущие условия могут быть изменены в будущем. Функция будущего также может вызывать мигание сигнала. Таким образом, любая функция имеет характеристики будущей функции, например, «зигзагообразную функцию».
Как показано на рисунке ниже: Функция ZigZag указывает точки поворота пиков и впадин. Она может корректировать свое значение в соответствии с последней ценой в реальном времени. Однако, если текущая цена изменится, результат, рассчитанный функцией ZigZag, также изменится. Если используется функция с будущей функцией, то может быть установлен текущий сигнал ордера и ордер может быть размещен, но сигнал может не быть установлен через некоторое время.

Рисунок 5-1
Ловушка бэктестинга: кража цен
Так называемое воровство цен подразумевает использование прошлых цен в торговле. Например: если максимальная цена выше фиксированной цены, покупайте по цене открытия. Это состояние представляет собой кражу цен, поскольку на реальном рынке, когда самая высокая цена превышает определенную цену, цена уже находится на определенное расстояние выше цены открытия, и в это время ее нельзя купить по цене открытия. Но при бэктесте есть сигнал на покупку, и транзакцию можно завершить.
Есть и другая ситуация. Если цена подпрыгивает выше и открывается выше фиксированной цены, установленной стратегией, то транзакция может быть завершена по фиксированной цене во время бэктестинга, но эта фиксированная цена, очевидно, недоступна на реальном рынке.
Ловушка бэктестинга: невозможные цены транзакций
Существует несколько ситуаций, когда цены не подлежат торгу:
Первое: в реальной торговле вы, как правило, не можете покупать, когда цена достигает верхнего предела, и наоборот. Однако можно торговать и на основе бэктеста.
Второй тип: Механизм сопоставления обмена: приоритет цены и приоритет времени. Некоторые разновидности часто имеют огромные заказы по рыночной цене. Если вы размещаете заказ на покупку или продажу во время реальной торговли, вам нужно дождаться, пока рыночная цена сгустится, прежде чем транзакция может быть завершена, или даже не может быть завершена. Однако во время бэктестинга отложенные ордера на покупку и продажу могут быть исполнены.
Третий тип: если это арбитражная стратегия, то прибыль при бэктестинге очень высока, поскольку каждый раз во время бэктестинга предполагается, что эти ценовые разницы были учтены. В реальности многие ценовые спреды не могут быть захвачены, или захвачена только одна нога. Вообще говоря, нога, которая не благоприятствует вашему направлению, будет исполнена первой, поэтому вам нужно немедленно заполнить другую ногу. В это время проскальзывание больше не составляет 1 или 2 пункта, и сама стратегия арбитража зарабатывает разницу в цене этих нескольких пунктов. Эту ситуацию нельзя смоделировать при бэктестинге. Фактическая прибыль не так хороша, как при бэктестинге.
Четвертый тип: событие «черный лебедь». Как показано в красном круге на рисунке ниже, в событии «черный лебедь» на валютном рынке швейцарского франка, хотя на поверхности и есть цены открытия, самые высокие цены, самые низкие цены и цены закрытия, на самом деле, в экстремальных рыночных условиях дня цена посередине представляет собой вакуум, большое количество стоп-ордеров вызвало панику, ликвидность была нулевой, а транзакции были очень сложными, но стоп-лоссы можно было достичь при бэктестинге.

Рисунок 5-2
Ловушка бэктестинга: переобучение
Каждый раз, когда я вижу картинку ниже, я думаю: Ха-ха-ха... Из картинки ниже вы можете видеть, что абсурдная модель, если она достаточно сложна, может прекрасно адаптироваться к данным.

Рисунок 5-3
Для количественной торговли бэктестинг основан на исторических данных, но выборки исторических данных ограничены. Если торговая стратегия имеет слишком много параметров или торговая логика слишком сложна, торговая стратегия будет чрезмерно адаптирована к историческим данным.
Процесс моделирования количественных стратегий по сути является процессом поиска локальных неслучайных данных из большого количества, казалось бы, случайных данных. Без помощи статистических знаний легко попасть в ловушку переобучения.
Так что не обманывайте себя. Если вы обнаружите, что данные за пределами выборки работают неэффективно, и посчитаете, что отказываться от модели жалко, или не захотите признать, что ваша модель плоха, и продолжите оптимизировать модель на данных за пределами выборки до тех пор, пока она не станет работать так же хорошо на данных за пределами выборки, то в конечном итоге пострадают ваши с трудом заработанные деньги.
Ловушка бэктестинга: ошибка выжившего
На Уолл-стрит ходит такая популярная шутка: предположим, что в инвестировании на рынке участвуют 1000 обезьян. В первый год 500 обезьян, которые проиграют рынку, будут устранены. На второй год половина обезьян снова была выведена, и осталось 250 обезьян. К концу третьего года осталось 125 обезьян.

Рисунок 5-4
К девятому году осталась только одна обезьяна. Затем вы смотрите на него слева и справа, и он кажется вам знакомым. Наконец, увидев обложку финансового журнала, я вдруг вспомнил: «О, разве это не Баффет?»
Конечно, это всего лишь шутка, но задумывались ли вы когда-нибудь о том, что если есть 1000 управляющих фондами, то через 10 лет около 10 управляющих фондами будут превосходить рынок в течение 10 лет подряд? Однако это может быть результатом случайности и удачи и не имеет ничего общего с навыками управляющих фондами.
Я считаю, что большинство инвесторов будут поражены результатами бэктестинга в левой части рисунка ниже. Эта инвестиционная стратегия показала очень стабильную эффективность практически без существенных просадок.

Рисунок 5-5
Подождите-ка, как показано на рисунке справа, реальная ситуация внутри. Оказывается, кривая бэктеста слева — это просто самая результативная из многих бэктестов. То есть в бэктесте слева есть много ситуаций с еще худшим результатом.
Ловушка бэктестинга: влияние затрат
В реальной торговой среде цены постоянно колеблются. Когда вы видите торговую возможность и размещаете заказ, цена может измениться. Поэтому проблема проскальзывания неизбежна, как в субъективной торговле, так и в количественной торговле.
Однако бэктестинг основан на статических данных, и с его помощью сложно имитировать реальную торговую среду. Например: цена ордера на покупку составляет 1050, но фактическая цена сделки может быть 1051. Причин этого явления много, например: вакуум ликвидности в экстремальных рыночных условиях, задержки в работе сети, программные и аппаратные системы, скорость отклика сервера и т. д.
Бэктестинг без проскальзывания
Как показано на рисунке выше, это бэктест без проскальзывания. Кривая капитала выглядит лучше, но есть разница между фактической ценой транзакции в реальной торговле и идеальной ценой транзакции бэктеста стратегии. Поэтому, чтобы уменьшить эту ошибку, при бэктестинге стратегии можно установить 2 точки проскальзывания, чтобы увеличить цену покупки или уменьшить цену продажи.
Тестирование на исторических данных с проскальзыванием
Как показано на рисунке выше, для одной и той же стратегии, если результат бэктеста значительно отличается от результата бэктеста без проскальзывания после добавления проскальзывания в 2 скачка, это означает, что данную стратегию необходимо улучшить или заменить на новую. Особенно для стратегий с относительно высокой частотой торговли добавление проскальзывания в 1–2 скачка во время бэктестинга может приблизить бэктест к реальной торговой среде.
Подвести итог
Некоторые друзья могут спросить: поскольку в количественной торговле может быть так много проблем, как мне доказать, что моя стратегия хороша? На самом деле ответ очень прост. Перед тем, как реализовать стратегию на практике, вы должны сначала смоделировать транзакцию в течение определенного периода времени. Если цена смоделированной транзакции почти такая же, как цена транзакции во время бэктеста, то это доказывает, что нет никаких проблем со стратегией, по крайней мере, нет никаких проблем с логикой стратегии.
В любом случае, бэктестинг является обязательным для опытного разработчика торговых систем. Потому что он может сказать вам, можно ли подтвердить эффективность стратегической идеи в исторических транзакциях. Однако зачастую бэктестинг не гарантирует будущей прибыльности. Поскольку в бэктестинге слишком много подводных камней, вы не поймете его, пока не потратите деньги на то, чтобы извлечь некоторые уроки. И эти уроки усваиваются с реальными деньгами. Я думаю, что прочтение этой статьи, по крайней мере, поможет вам избежать многих количественных ошибок и ловушек.
Домашнее задание
- Что такое переобучение и как его избежать?
- Каковы примеры ошибки выжившего в реальной жизни?
5.2 Как проводить количественное торговое бэктестирование
краткое содержание
Значимость и важность бэктестинга не вызывают сомнений. При проведении количественного бэктестинга следует стараться максимально сохранить стратегию в реальной исторической среде. Если игнорировать детали исторической среды, весь количественный бэктест может оказаться недействительным. В этой статье вы узнаете, как проводить количественное трейдинговое бэктестирование.
Тестирование на бэке эквивалентно воспроизведению данных. Оно воспроизводит исторические данные K-line и имитирует реальные правила торговли для покупки и продажи, а затем суммирует коэффициент Шарпа, максимальную скорость просадки, годовую норму прибыли, кривую капитала и другие данные за определенный период времени. В настоящее время существует множество программного обеспечения, позволяющего проводить бэктестинг, например, Wenhua Finance, имеющее полный спектр продуктов, VNPY, который можно гибко настраивать, и т. д.
Inventor Quant — коммерческое программное обеспечение для количественной торговли, которое поставляется с высокопроизводительным механизмом бэктестинга и использует структуру бэктестинга с циклом for (опросом) для векторизованных вычислений, что обеспечивает более высокую скорость. Он также унифицирует коды для бэктестинга и реальной торговли, частично решая дилемму «легко проводить бэктестинг, сложно проводить реальную торговлю».
Введение в интерфейс бэктестинга
Давайте возьмем в качестве примера стратегию языка Mai компании Inventor Quantitative и откроем официальный сайт инструмента торговли Inventor Quantitative (www.fmz.com). Нажмите «Центр управления», «Библиотека стратегий», «Выбрать стратегию», «Симулировать бэктест» и перейдите на следующую страницу:

Рисунок 5-8
В интерфейсе конфигурации бэктеста вы можете настроить его в соответствии со своими реальными потребностями. Например: установите время бэктеста, период K-линии, тип данных (данные уровня моделирования или данные уровня реального времени. Для сравнения, бэктест данных уровня моделирования выполняется быстрее, а бэктест данных уровня реального времени — точнее). Кроме того, вы также можете установить комиссию за бэктестинг, начальный размер средств на счете и т. д.
Нажмите на Mai Language Trading Library, первая вкладка — Trading Settings. Стратегия Mai Language в Inventor Quantitative Trading Tool имеет два метода выполнения бэктеста, а именно: модель цены закрытия и модель цены в реальном времени. Модель цены закрытия означает, что модель выполняется только после завершения текущей K-линии, а транзакция выполняется, когда начинается следующая K-линия. Ценовая модель в реальном времени означает, что модель выполняется один раз при каждом изменении цены, а транзакция выполняется немедленно при установлении торгового сигнала. Как показано ниже:

Рисунок 5-9
Размер лота открытия по умолчанию относится к количеству позиций, открытых и закрытых во время бэктестинга, а максимальный размер ордера одной транзакции — это максимальное количество позиций открытия и закрытия, доверенных механизму бэктестинга в одной транзакции. Существует отклонение между фактической ценой транзакции и заданной ценой транзакции. Это отклонение обычно движется в направлении, невыгодном для трейдера, что приводит к дополнительным потерям в транзакции, поэтому необходимо добавлять проскальзывание. Внутренние товарные фьючерсы обычно добавляют 1-2 скачка или даже больше, чтобы имитировать реальную торговую среду.
Введите тип контракта для бэктестинга в опционе на фьючерс, например rb000 или rb888. Реальный опцион в основном используется для реальной торговли, а настройки по умолчанию можно сохранить при бэктестинге. Если для автоматического процесса восстановления установлено значение «истина», то когда стратегия останавливает робота во время работы в реальном времени, перезапуск робота автоматически восстановит предыдущую позицию сигнала без повторного расчета сигнала. По умолчанию количество повторных попыток заказа равно 20. Если заказ не будет выполнен, система попытается разместить его снова. Интервал опроса сети — это временной интервал, в течение которого робот выполняет код стратегии.

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

Рисунок 5-11
Стратегия бэктестинга
Перед бэктестингом сначала определите свою торговую стратегию. Здесь мы возьмем в качестве примера стратегию термостата. Эта стратегия примет стратегию тренда на трендовом рынке и волатильную стратегию на волатильном рынке на основе рыночных условий. Исходный код выглядит следующим образом (его также можно загрузить непосредственно с Strategy Square официального сайта Inventor Quantitative):

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

Рисунок 5-13
В столбце информации о статусе регистрируется тип транзакции, объем позиции, цена позиции, последняя цена, тип последнего сигнала, максимальная и минимальная цены после удержания позиции, номер и время обновления, а также информация о фонде. Кроме того, плавающая метка прибылей и убытков показывает подробную кривую капитала счета, а также часто используемые показатели эффективности: доходность, годовую доходность, коэффициент Шарпа, годовую волатильность и максимальную скорость просадки, что в принципе может удовлетворить потребности большинства пользователей.
Среди них наиболее важным показателем эффективности является коэффициент Шарпа. Это комплексный показатель, который учитывает как доходность, так и риск. Это также важный справочный показатель для измерения продукта фонда. Проще говоря, это означает, какой риск вы принимаете на себя за каждый заработанный доллар. Поэтому чем выше коэффициент Шарпа, тем лучше.
Как следует из названия, годовая волатильность — это дневная волатильность, умноженная на количество торговых дней в году. Она измеряет риск фонда, но это определенно не общий риск. Например, у Стратегии A волатильность выше, но она колеблется вверх с хорошей нормой доходности, в то время как у Стратегии B волатильность ниже, но она остается на прежнем уровне. Можем ли мы сказать, что Стратегия B лучше, чем Стратегия A? Как показано на следующем рисунке, стратегия А:

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

Рисунок 5-15
После бэктестинга
Зачастую, даже в большинстве случаев, результаты бэктестинга будут далеки от ваших ожиданий. В конце концов, стратегия, которая генерирует долгосрочную, устойчивую и стабильную прибыль, нелегка в получении. Она требует вашей способности понимать рынок.
Если тестирование вашей стратегии на исторических данных принесло убыток, не расстраивайтесь, это на самом деле нормально. Сначала проверьте, правильно ли написана логика стратегии, не используются ли экстремальные параметры, не слишком ли много условий открытия и закрытия и т. д. При необходимости вы также можете пересмотреть свою торговую стратегию и торговую философию под другим углом.
Если результаты бэктестинга вашей стратегии очень хорошие, кривая капитала идеальна, а коэффициент Шарпа превышает 1 или даже больше. Не будьте слишком счастливы прямо сейчас. Когда вы сталкиваетесь с такой ситуацией, чаще всего это происходит из-за использования будущих функций, кражи цен, переобучения или неспособности установить проскальзывание и т. д. Вы можете использовать данные вне выборки и смоделированную реальную торговлю, чтобы устранить эти проблемы.
Подвести итог
Вышеизложенное представляет собой введение в полный процесс бэктестинга всей торговой стратегии, который, можно сказать, конкретен до каждой детали. Следует отметить, что тестирование на исторических данных — это, в конце концов, идеальная среда, в которой известны все риски. Таким образом, лучшим временем для бэк-тестирования стратегии является период бычьего или медвежьего рынка, а количество эффективных транзакций должно быть не менее 100, чтобы избежать частичной ошибки выжившего.
Рынок постоянно меняется и развивается. Стратегия, которая хорошо работает в историческом бэктестинге, не обязательно будет работать хорошо в будущем. Стратегия не может только справляться с известными рисками в среде бэктестинга, но также должна справляться с неизвестными рисками в будущем. Поэтому крайне необходимо повысить рискоустойчивость и универсальность стратегии.
Домашнее задание
- Попробуйте скопировать стратегию из этого раздела и протестируйте отчет об эффективности.
- Основываясь на собственном опыте торговли, попробуйте улучшить и оптимизировать стратегии в этом разделе.
5.3 Как понимать отчет об эффективности бэктестинга стратегии
краткое содержание
После завершения бэктестинга нашей стратегии инструмент количественной торговли Inventor выведет на веб-страницу различные показатели эффективности и графики кривых прибыли. Однако, возможно, из-за того, что мы не знакомы с интерпретацией и содержанием этих индикаторов, мы не можем точно судить, хороша или плоха стратегия. Эта статья начнется с основных концепций индикаторов, чтобы помочь всем понять отчет об эффективности бэктестинга стратегии и выделить плюсы и минусы стратегии. Конечно, большинство количественных торговых инструментов имеют такой отчет о производительности бэктеста, и содержание похоже. Как только вы изучите содержание этого раздела, оно также будет применимо, даже если вы переключитесь на другой торговый инструмент.
Объективная и полная оценка
Независимо от того, идет ли речь о записи реальных торговых данных или отчете по бэк-тестированию с использованием исторических данных, качество модели оценивается с помощью статистики по торговым условиям.
Ключевой вопрос: какие статистические данные необходимы для сравнения? Давайте рассмотрим пример: как показано на рисунке ниже, если предположить, что следующие два набора данных получены в ходе теста в течение одного и того же периода времени, можем ли мы определить, какая модель работает лучше?

Рисунок 5-16
Ответ — нет. Однобокость системы оценки заведет количественную торговую систему в тупик.
Прежде чем приступить к использованию, торговая система должна пройти историческое тестирование. Торговая система, которая не может пройти историческое тестирование, вряд ли принесет прибыль в реальной торговле в долгосрочной перспективе. Историческое тестирование является необходимым условием для внедрения торговой системы в реальную торговлю.
Торговая система, которая может пройти историческое тестирование, не обязательно является хорошей торговой системой, но если она не может пройти историческое тестирование, то она определенно не является хорошей торговой системой. В целом, нам необходимо анализировать отчеты о результатах деятельности с точки зрения стабильности, устойчивости и соответствия ожиданиям.

Рисунок 5-17
Как показано на рисунке выше, любой, кто имел дело с количественной торговлей, мог видеть эти длинные и неясные термины данных о производительности бэктеста. Среди этих данных о производительности многие даже противоречивы. Многие новички в количественном анализе не знают, на каких данных следует сосредоточиться.
Термины индикаторов эффективности на рисунке выше можно в целом разделить на несколько категорий: коэффициенты эффективности, циклический анализ, различные кривые, экстремальный торговый анализ и т. д. Даже с точки зрения продуктов фондов большинство из них представляют собой просто отображение результатов расчетов бэктестинга, которые не имеют большого практического значения, например: требования к капиталу счета, доход от удержания, доверительный лимит и т. д. Возможно, вам даже нужно просто сосредоточиться на важных вещах. Ниже я выберу наиболее важные из показателей эффективности бэктестинга для подробного объяснения.
Важные показатели эффективности
Макс. просадка
Формула расчета максимальной просадки такая же, как и выше. Для модели максимальная просадка является очень важным индикатором риска, который даже важнее волатильности. Максимальная просадка, зафиксированная при бэктесте, в некотором смысле также представляет собой наихудшую возможную ситуацию, которая может возникнуть после открытия позиции.
С математической точки зрения, если капитал теряет 20%, оставшимся фондам необходимо получить прибыль в размере 25%, чтобы восстановить первоначальный масштаб капитала. Если убыток составляет 50%, оставшимся фондам необходимо получить прибыль в размере 100%, чтобы восстановить масштаб капитала до убытка.
Тогда нет сомнений, что чем больше убыток, тем меньше возможность восстановления до первоначального размера капитала и тем больше трудностей. Пространство для увеличения прибыли для фондов не ограничено, но пространство для уменьшения убытков ограничено, а вероятность достижения дна выше.
Независимо от того, как это определяется, по крайней мере, эти два момента являются общепринятым пониманием в настоящее время:
- Чем меньше максимальный откат, тем лучше;
- Просадка прямо пропорциональна риску. Чем больше просадка, тем больше риск, и чем меньше просадка, тем меньше риск.
Скорректированное отношение доходности к риску (RAROC)
Многие люди не знакомы с этой концепцией. Фактически, скорректированное соотношение доходности и риска является водоразделом между профессиональными игроками и игроками-любителями. Это также очень хороший инструмент оценки для инвестиционных банков, крупных фондов и профессиональных трейдеров, а также общепринятый стандарт оценки в мировой финансовой сфере.
При инвестировании следует учитывать не только прибыль, но и то, на какой риск пришлось пойти ради ее получения. В общем случае риск и доходность актива пропорциональны. Это означает, что когда модель лидирует по урожайности и быстро прогрессирует, за ее славой могут скрываться риски, которые еще не проявились.
Например, условия открытия и закрытия или увеличение и уменьшение позиций в модели могут иметь более высокую доходность, когда рынок растет, но как только происходит спад, потери умножаются, что приводит к огромным убыткам. Более того, подъемы и спады имеют существенные асимметричные последствия.
Многие опытные количественные трейдеры готовы пожертвовать некоторыми доходами, чтобы снизить риск. В этом случае доходность с поправкой на риск более ценна для справки. Таким образом, при бэктестинге модель с высоким риском и высокой волатильностью не обязательно является хорошей моделью, даже если она имеет высокую доходность.
Депозиты надежны, но годовая доходность составляет всего 2%. Рынок может заставить вас заработать 50% за несколько дней, а может заставить вас потерять 50% за несколько дней. После стольких лет торговли у меня появилась очень важная концепция: смело встречайте риски. Риски и прибыли никогда не существуют изолированно. Торговля — это как выход в море ловить рыбу. Вы не можете ловить рыбу, но не хотите нести риски моря. Излишний консерватизм и излишний радикализм — это на самом деле две крайности. То же самое относится и к разработке стратегических моделей.
Количество транзакций
Для подтверждения эффективности модели нельзя использовать результаты тестирования на исторических данных за несколько месяцев. Если данных бэктестинга слишком мало, результаты бэктестинга могут быть случайными, случайными могут быть либо параметры, либо рыночные условия и т. д. Кроме того, более длительные исторические данные также могут отфильтровать некоторую ошибку выживших.
Как правило, для отечественных акций и сырьевых товаров данные должны быть протестированы за период более 5 лет, а для недавно выведенных на биржу продуктов требуется не менее 3 лет тестирования. Для ранее котируемых на международном рынке продуктов или товаров, таких как золото и индекс доллара США, необходимо провести как минимум один цикл «бычий-медвежий», который обычно должен длиться более 10–15 лет. Период бэктестинга должен быть достаточно длительным, чтобы результаты бэктестинга были достаточно надежными. Для продуктов, которые не соответствуют этому требованию, значение R следует соответствующим образом взвесить при открытии позиции, чтобы заблаговременно снизить подверженность риску.
Средняя прибыль
Показатель средней прибыли кажется обыденным, но на самом деле он очень важен. Расчет также очень прост: чистая прибыль/количество транзакций. Не будет преувеличением сказать, что это зеркало, способное обнаружить те результаты бэктестинга, которые на первый взгляд кажутся яркими. Как показано на рисунке ниже, если эта стратегия может приносить прибыль, то она ненормальна:

Рисунок 5-18

Рисунок 5-19
Если вы посмотрите на результаты тестирования этой стратегии на исторических данных, у вас может возникнуть вопрос: не жаль ли было бы не использовать такую почти идеальную стратегию? Подождите минуту! Пожалуйста, внимательно посмотрите на среднюю прибыль на втором рисунке, которая составляет всего 17, что означает, что средняя прибыль от каждой транзакции составляет всего 17 юаней.
Возьмем в качестве примера большинство фьючерсных рыночных продуктов с прыжком в 10 юаней. Любой, кто занимался реальной торговлей, поймет, что это значит. В реальной торговле возможны не только один скачок, но даже десять или восемь скачков. Два и три прыжка — обычное дело.
Коэффициент побед
Коэффициент выигрышей никогда не существует сам по себе, иначе было бы нереалистично говорить о проблеме, основываясь только на коэффициенте выигрышей. Если вы используете правильную модель на правильном рынке, неудивительно, что процент побед составляет 80%, но это бессмысленно.
Цена либо растет, либо падает, в противном случае она остается прежней. Если период достаточно долгий, вы обнаружите, что вероятность роста и падения цен составляет 50%. Независимо от того, какую стратегическую модель вы используете, если процент выигрышей превышает 50% во время бэктестинга, вам следует быть осторожным. С математической и физической точки зрения это невозможно.
Подробная кривая капитала
Как говорится, лучше один раз увидеть, чем сто раз услышать. Подробная кривая капитала начинается с момента первой записи и заканчивается моментом последнего бара графика. Это кривая капитала в реальном времени для торговли. Она в реальном времени, потому что учитывает плавающую прибыль и убыток на каждом баре.

Рисунок 5-20
Подробная кривая капитала отражает изменения чистой стоимости счета и является наиболее интуитивным инструментом оценки. Она позволяет получить приблизительное представление о состоянии убытков и прибылей стратегии и волатильности/плавности прибылей и убытков с первого взгляда. Однако эта картина отчета об эффективности стратегии не только стоит тысячи слов, но и сбивает с толку миллионы верующих. Кроме того, никогда не смотрите на кривую закрытия капитала.
Годовая норма прибыли
Годовая доходность — спорный показатель. Некоторые думают, что это для неспециалистов и не имеет справочной ценности. Прежде всего, обязательным условием выбора модели является получение прибыли, или, другими словами, сама доходность модели должна иметь положительное ожидаемое значение.

Рисунок 5-21
У вас может быть бесчисленное множество 100%-ных возвратов, но вы можете позволить себе максимум только один 100%. Разрыв между годовой нормой доходности и фактической нормой доходности (нормой доходности за период владения) может быть очень большим, иногда даже больше, чем мы можем себе представить.
Подвести итог
Наконец, нужно объяснить одну вещь. Идеальной производительности бэктестинга не существует. Помимо проблем с самими тестовыми данными, пользователи модели могут столкнуться с другими подводными камнями. Все, от оптимизации параметров до дизайна транзакций, может отличаться от фактической работы.
Что еще важнее, эмоциональные проблемы на уровне исполнения являются фактором X при запуске модели в производство. Реальная торговля не может вестись в среде «эмоционального вакуума». Феномен «толстого хвоста» — это то, о чем каждый программный трейдер должен всегда помнить.
Домашнее задание
- Перечислите показатели эффективности, которые, по вашему мнению, наиболее важны при бэктестинге.
- Попробуйте рассчитать показатель коэффициента Шарпа.
5.4 Почему необходимо вневыборочное тестирование
краткое содержание
В предыдущем разделе мы сосредоточились на нескольких важных показателях эффективности, чтобы научить вас понимать отчет об эффективности бэктестинга стратегии. На самом деле, написать стратегию, которая может зарабатывать деньги с помощью бэктестинга, не самая сложная задача. Сложнее всего оценить, продолжает ли эта стратегия быть эффективной в реальной торговле. Поэтому сегодня я объясню вам суть вневыборочного тестирования и его важность.
Тестирование на исторических данных — это не то же самое, что реальная торговля
Многие новички в количественном анализе легко убеждаются в эффективности своих торговых стратегий, основываясь на, казалось бы, хорошем отчете о результатах или кривой капитала, полученной в ходе бэктестинга, и готовы продемонстрировать свои таланты на рынке. Конечно, этот результат бэктестинга может идеально соответствовать определенному состоянию рынка, которое они наблюдали, но как только эта торговая стратегия будет применена в реальных условиях в течение более длительного периода времени, они обнаружат, что она на самом деле неэффективна.
Я видел много торговых стратегий, которые при бэктестинге имели показатель успешности более 50%. При таком высоком проценте выигрышей соотношение прибыли и убытков все равно может превышать 1:1. Однако после реализации этих стратегий они, по сути, приводят к убыткам. Существует множество причин потерь, одна из которых заключается в том, что при обратном тестировании используется слишком мало выборок данных, что приводит к смещению данных.
Однако торговля — это такая сложная штука. Оглядываясь назад, все предельно ясно, но если вернуться к началу, то мы все еще в убытке. Это затрагивает коренную проблему количественной оценки — ограниченность исторических данных. Поэтому, если вы используете только ограниченные исторические данные для тестирования своей торговой стратегии, будет сложно избежать проблемы «вождения, глядя в зеркало заднего вида».
Что такое вневыборочное тестирование?
Как можно наилучшим образом использовать ограниченные данные для научного тестирования торговых стратегий в условиях ограниченности данных? Ответ — тестирование за пределами выборки. При бэктестинге исторические данные делятся на два раздела в соответствии с временной последовательностью. Первый раздел данных используется для оптимизации стратегии и называется обучающим набором, а второй раздел данных используется для вневыборочного тестирования и называется тестовым набором.
Если ваша стратегия всегда эффективна, то оптимизируйте лучшие параметры в данных обучающего набора и примените эти параметры к данным тестового набора для бэктестинга. В идеале результаты бэктеста должны быть похожи на результаты обучающего набора или находиться в разумном диапазоне. Это показывает, что данная стратегия относительно эффективна.
Однако если стратегия хорошо работает в тестовом наборе, но плохо работает в тестовом наборе или сильно варьируется, и то же самое справедливо для других параметров, то стратегия может иметь смещение, связанное с размещением данных.
Например, предположим, что вы хотите провести бэктест фьючерсов на арматуру, и есть данные по арматуре за 10 лет (2009-2019). Тогда вы можете использовать данные с 2009 по 2015 год в качестве обучающего набора, а данные с 2015 по 2019 год в качестве тестового набора. Например, для стратегии двойной скользящей средней лучшими группами параметров в обучающем наборе являются (скользящая средняя за 15 периодов и скользящая средняя за 90 периодов), (скользящая средняя за 5 периодов и скользящая средняя за 50 периодов), (скользящая средняя за 10 периодов и скользящая средняя за 100 периодов)... Затем мы помещаем эти группы параметров в тестовый набор для бэктестинга и сравниваем отчеты об эффективности бэктестинга и кривые капитала обучающего и тестового наборов, чтобы определить, находится ли их разница в разумных пределах.
Если вы не используете тестирование вне выборки и напрямую используете данные с 2009 по 2019 год для бэктестинга стратегии, результаты могут быть хорошим отчетом о производительности бэктеста и кривой капитала из-за подгонки исторических данных. Однако такие результаты бэктеста не имеют большого значения для фактической торговли и не играют никакой руководящей роли, особенно для стратегий с большим количеством параметров.
Расширенное вневыборочное тестирование
Помимо разделения исторических данных на две части и проведения бэктестинга внутри выборки и вне ее, на самом деле существует лучший вариант — методы рекурсивного бэктестинга и кросс-бэктестинга. Эти два метода можно использовать для комплексного тестирования модели с использованием ограниченных данных, особенно когда имеется мало исторических данных, например, по фьючерсам на сырую нефть и фьючерсам на яблоки, которые были выставлены на биржу в последние годы.
Основные принципы рекурсивного тестирования: обучение модели с использованием более длинных исторических данных, а затем с использованием относительно коротких данных для проверки модели, а затем непрерывное перемещение окна сбора данных назад, повторяя шаги обучения и проверки.
Данные обучения: 2000–2001 гг., данные тестирования: 2002 г.;
Данные обучения: 2001–2002 гг., данные тестирования: 2003 г.;
Данные обучения: 2002–2003 гг., данные тестирования: 2004 г.;
Данные обучения: 2003–2004 гг., данные тестирования: 2005 г.;
Данные обучения: 2004–2005 гг., данные тестирования: 2006 г.;
...и так далее...
Наконец, результаты тестирования (в 2002, 2003, 2004, 2005, 2006 гг.) были подсчитаны для комплексной оценки эффективности стратегии.
Принцип рекурсивного тестирования можно проиллюстрировать следующим образом:

Рисунок 5-22
На рисунке выше показаны два способа подакцизной проверки.
Первый тип: при каждом тестировании данные тестирования были более короткими, а количество тестирований - более большим.
Второй тип: при каждом тестировании данные тестирования длиннее, а количество тестирований меньше.
В практических приложениях длину тестовых данных можно изменять и проводить множественные тесты для определения устойчивости модели при работе с нестационарными данными. Основной принцип перекрестной проверки заключается в разделении всех данных на N равных частей, использовании N-1 части каждый раз для обучения и использовании оставшихся частей для тестирования.
Если разделить 2000-2003 гг. на четыре части, то процесс перекрестной проверки будет выглядеть следующим образом:
1, данные о тренировках: 2001-2003, данные о тестировании: 2000;
2) Данные о тренировках: 2000-2002, данные о испытаниях: 2003
3. Данные о тренировках: 2000, 2001, 2003, данные о испытаниях: 2002;
4. Данные о подготовке: 2000, 2002, 2003, данные о тестировании: 2001;

Рисунок 5-23
Как показано на рисунке выше: наибольшим преимуществом кросс-тестирования является полное использование ограниченных данных, каждый тренировочный данный также является тестовым данным. Однако при применении кросс-тестирования к проверке стратегических моделей существуют и явные недостатки:
- Когда данные о ценах неустойчивы, результаты тестирования моделей часто ненадёжны. Например, используйте данные 2008 года для тренировки и тестируйте данные 2005 года. Вполне вероятно, что рыночная ситуация в 2008 году сильно изменилась по сравнению с 2005 годом, поэтому результаты тестирования моделей ненадёжны.
- Как и в первом случае, в перекрестной проверке, если использовать новейшую модель обучения данным, а старую модель тестирования данными, это само по себе не очень логично.
Кроме того, при проверке параметрической модели стратегии, как в рецессивной проверке, так и в перекрестной проверке, возникают проблемы с перекрытием данных.
При разработке моделей стратегии торговли большинство технических показателей основаны на исторических данных определенной длины. Например, используя трендовые показатели, вычислить исторические данные за последние 50 дней, а на следующий торговый день, показатель, который вычислил данные за 50 дней до этого дня торговли, тогда вычислить данные этих двух показателей на 49 дней одинаковы, что приведет к незначительному изменению показателя каждые два соседних дня.

Рисунок 5-24
Переплетение данных может привести к следующим последствиям:
- Медленное изменение результатов, предсказанных моделью, приводит к медленному изменению позиций, что мы называем задержкой показателя.
- Некоторые статистические значения не используются для проверки результатов модели, что делает результаты некоторых статистических проверок ненадежными из-за последовательности, вызванной дублированием данных.
Хорошая торговая стратегия должна приносить прибыль в будущем. Помимо объективного тестирования торговых стратегий, тестирование за пределами выборки также может эффективно экономить время количественных трейдеров. В большинстве случаев очень опасно напрямую заимствовать оптимальные параметры всех образцов и применять их в реальных боевых действиях.
Если разделить все исторические данные до момента проведения параметрической оптимизации на данные внутри выборки и данные вне выборки, сначала использовать данные внутри выборки для параметрической оптимизации, а затем использовать данные вне выборки для вне выборки, можно выявить эту ошибку, а также проверить, применимы ли стратегии после оптимизации к будущим рынкам.
Подвести итог
Как и в случае с торговлей, мы никогда не сможем пересечь время и принять правильное решение, не совершив ни малейшей ошибки. Если бы существовала Божья рука или способность пересечь будущее, то можно было бы без испытаний, прямо в сети, торговать на реальных биржах, и получить кувшин с бонусами. А я, как и все простые люди, должен проверить наши стратегии в исторических данных.
Однако даже при наличии огромного количества исторических данных они кажутся крайне скудными, когда сталкиваешься с огромным, бесконечным и непредсказуемым будущим. Таким образом, торговая система, разработанная снизу вверх на основе истории, со временем в конечном итоге потерпит неудачу. Потому что история не может исчерпать будущее. Поэтому полноценная система торговли с положительным ожиданием должна подкрепляться внутренними принципами и логикой.
«Доверяй, но проверяй» — президент Рейган
Домашнее задание
- Какие явления в реальной жизни представляют собой ошибку выжившего?
- Используйте количественные инструменты изобретателя для бэктестинга как внутри выборки, так и за ее пределами и сравните их различия.
5.5 Оптимизация торговой стратегии и оптимизация
краткое содержание
Суть торговой стратегии — обобщение и вывод правил рынка. Чем глубже ваше понимание рынка и чем выше ваша способность выражать идеи с помощью кода, тем ближе ваша стратегия будет к рынку. В этом разделе мы продолжим объяснять, как оптимизировать ваши торговые стратегии и сделать последние приготовления к реальной торговле.
Оптимизация входа и выхода
Большинство стратегий отслеживания тренда используют прорывы или технические индикаторы для захвата рыночных тенденций. Обычно методы входа и выхода этих сигналов менее своевременны. Если стратегия использует модель цены закрытия, точка входа будет на цене открытия следующей K-линии. Следовательно, лучшее время входа для прорыва этой K-линии будет упущено, и большая часть прибыли будет упущена.
Поэтому эффективным способом является использование более выгодных цен в режиме реального времени при реализации стратегии и размещение ордеров сразу при появлении сигналов. Таким образом, как только сигнал будет получен, вы сможете немедленно войти в рынок и не упустите прибыль. Но не все цены в реальном времени лучше цен закрытия. Это зависит от торговой стратегии. Для некоторых стратегий с простой торговой логикой разница между ценой в реальном времени и ценой закрытия относительно невелика. Однако модель цены закрытия не может обрабатывать более подробную торговую логику, поэтому необходимо использовать цену в реальном времени.
Параметры оптимизации
Оптимизация параметров может приблизить количественные торговые стратегии к историческим данным и обеспечить лучшую эффективность бэктестинга. Например: мы используем стратегию двойной скользящей средней в контрактах на арматуру, но какие две скользящие средние являются лучшими? Затем вы можете использовать функцию настройки параметров в количественном инструменте изобретателя, чтобы автоматически найти два лучших параметра скользящего среднего.
Как показано на рисунке ниже, если взять стратегию двойной скользящей средней в качестве примера, то она сама по себе является многомерным экземпляром. Если мы изобразим результаты бэктеста каждого параметра в виде точки (обратите внимание на рисунок ниже), то каждый параметр будет измерением этой стратегии, и в конечном итоге все комбинации параметров образуют эту сложную многомерную форму поверхности (подобно горе).

Рисунок 5-25
Как показано выше, это график эффективности двухпараметрической стратегии. При изменении параметров конечная норма доходности также существенно меняется, а поверхность сильно искажается, образуя «пики» и «впадины» разной высоты. Обычно на первом месте по выходу результата оптимизации находится самая высокая точка всей поверхности. Однако с точки зрения чувствительности параметров, объективности и т. д. иногда этот результат может быть не «оптимальным». Потому что рынок постоянно меняется.
Поэтому важным принципом оптимизации параметров является выбор плато параметров, а не островов параметров. Так называемое плато параметров относится к существованию более широкого диапазона параметров, в пределах которого стратегия может достичь хороших результатов. Как правило, он образует нормальное распределение с центром в виде плато. Так называемый параметрический остров означает, что стратегия будет работать хорошо только тогда, когда значение параметра находится в очень небольшом диапазоне. Когда параметр отклоняется от этого значения, производительность стратегии значительно ухудшается.

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

Рисунок 5-27
Параметр острова
Принимая в качестве примера приведенный выше рисунок, если результаты бэктеста показывают островки параметров, когда параметры немного меняются, прибыльность стратегии будет значительно снижена. Такие параметры часто трудно справляться с постоянно меняющимися рыночными условиями в реальных транзакциях из-за их плохой универсальности.
Таким образом, если эффективность соседних параметров намного хуже, чем у оптимального параметра, то этот оптимальный параметр может быть результатом переобучения, которое математически можно рассматривать как решение в особой точке, а не как искомое максимальное решение. С математической точки зрения сингулярности нестабильны. В будущих неопределенных рыночных условиях, как только характеристики рынка изменятся, оптимальные параметры могут стать худшими параметрами.
Добавить фильтр
Многие стратегии тренда могут хорошо уловить тренд и достичь богатой прибыли, когда рынок находится в тренде. Однако в долгосрочной перспективе конечный результат — это либо небольшая прибыль, либо убыток. В чем проблема?
Причина в том, что стратегия продолжает торговать повторно на волатильном рынке, и большинство волатильных сделок являются убытками или небольшой прибылью. Рынок находится на волатильном рынке около 70% времени. Долгосрочные непрерывные небольшие убытки приводят к потере всей предыдущей прибыли.

Рисунок 5-28
Решение — добавить фильтры. На рынке существует множество видов фильтров, включая фильтры прибыли и убытков, фильтры значения риска, фильтры трендовых моделей, фильтры технических индикаторов и т. д. Например, добавление фильтра скользящей средней с большим периодом может сократить количество транзакций на нестабильном рынке и отфильтровать половину ошибочных транзакций.
Сглаживание кривой финансирования
Количественная оценка преследует стабильный и устойчивый метод получения прибыли, который хотят видеть большинство трейдеров. Никто не хочет заработать 50% в этом году, потерять 30% в следующем году и заработать 40% через год. Они скорее примут 20% годовой прибыли, но это может длиться более десяти лет. Вот что может сделать количественное инвестирование. Потому что количественные инвестиции — это торговая модель с устойчивой эффективностью.
Чтобы добиться плавной кривой капитала, необходимо сформировать инвестиционный портфель с несколькими стратегиями, несколькими разновидностями, несколькими циклами и несколькими параметрами. Но больше не обязательно лучше. Здесь есть эффект убывающей маржинальной прибыли. Чем больше вы добавляете в портфель в начале, тем лучше диверсификация. Однако, когда стратегия достигает определенного порядка величины, начинает проявляться эффект убывающей доходности диверсификации. Преимущество комбинации — диверсификация. Хотя общая норма прибыли не самая высокая, она самая стабильная.
Откажитесь от поиска Святого Грааля
Многие трейдеры задаются вопросом, может ли количественная торговля найти Святой Грааль. Некоторые трейдеры даже бросаются на рынок со своими так называемыми идеальными стратегиями после простого бэктестинга. Я надеюсь победить в каждой битве и стать профессиональным квант-специалистом, способным преодолеть все препятствия.
Но существует ли Святой Грааль? На самом деле все очень просто: ответ — нет. На самом деле, это несложно понять. Если этот рынок действительно имеет правила, то люди с более высоким IQ, более высоким образованием и более упорным трудом смогут открыть правила. Используют ли они математический анализ, информационную монополию или другие методы анализа, они в конечном итоге заработают большую часть денег на рынке. В долгосрочной перспективе эти люди монополизируют торговый рынок до тех пор, пока рынок не сможет больше нормально функционировать.
Подвести итог
Если время торговли достаточно велико, в процессе торговли можно столкнуться с различными рыночными тенденциями, и маловероятно, что эти тенденции будут повторяться в точности. Как количественному трейдеру, помимо правильного изучения и оптимизации собственных торговых стратегий, вам также необходимо постоянно отслеживать рыночные условия и постоянно совершенствовать свои стратегии в ответ на изменения на рынке.
В то же время вы должны понимать, что прибыль и убытки происходят из одного источника. Убытки являются частью всей торговой стратегии. Даже лучшая торговая стратегия может пережить серию просадок. Когда в каждой сделке есть убыток, ваши торговые правила и стратегии не должны подвергаться сомнению. По крайней мере, не меняйте свою стратегическую логическую структуру легкомысленно, если только она не была неверной с самого начала.
Домашнее задание
- Создайте инвестиционный портфель на основе характеристик вашей собственной стратегии и проведите бэктестирование, используя количественные инструменты изобретателя.
- Попробуйте оптимизировать свою количественную торговую стратегию на основе содержания этого раздела.
5.6 Развивайте вероятностное мышление и улучшайте свою торговую модель
краткое содержание
Трейдинг — это одновременно наука и искусство. В торговле существует множество методов, будь то стоимостное инвестирование, технический анализ, анализ горячих точек событий, арбитражное хеджирование и т. д. На первый взгляд они кажутся логически строгими и имеют смысл в теории. Но на самом деле они часто противоречивы. Иногда строгость науки не может объяснить дикую фантазию искусства.
Хотя различные методы торговли имеют разные отправные точки, все дороги ведут в Рим. Преимущество стоимостного инвестирования заключается в том, что на основе стоимости можно установить маржу безопасности для колебаний цен; преимущество технического анализа заключается в том, что три основных предположения делают транзакцию научной.
Однако у всех них есть одна общая черта: они могут делать только приблизительные прогнозы относительно будущего анализа цен, но не точные прогнозы. Даже если фундаментальный анализ сочетать с техническим анализом, это не может решить проблему повышения «точности», поэтому торговля — это вероятностная игра от начала до конца.
Азартные игры
На самом деле торговля — это не просто игра вероятностей. В жизни человека все, от таких мелочей, как переход дороги (горит зеленый свет, безопасно ли теперь переходить дорогу?) и с какими друзьями знакомиться (надежен ли этот друг?); до таких крупных вещей, как какую карьеру выбрать (действительно ли профессиональный трейдинг — хорошая карьера?) и на ком жениться (будем ли мы счастливы вместе?), — все это вероятностные игры по оценке рисков и доходности. Поскольку у нас нет возможности предсказывать будущее, каждый раз, когда мы что-то делаем, независимо от того, насколько мы уверены в себе, всегда есть риск, и мы не можем быть уверены на 100%.
Важной причиной, по которой многие люди совершают ошибки в торговле, является отсутствие вероятностного мышления и излишняя эмоциональность, а не рациональность в торговле. Эмоциональность на самом деле наш примитивный инстинкт. На рынке эти примитивные инстинкты могут стимулировать многие человеческие слабости и усиливать их в геометрической прогрессии. Вот почему большинство людей приходят на рынок и в конечном итоге терпят неудачу.
Причины сбоя транзакции
Причина 1: Из-за человеческой природы
У подавляющего большинства людей есть слабость: они любят пользоваться небольшими преимуществами и боятся понести небольшие потери. Как только на рынке появляется небольшая прибыль, они немедленно ее обналичивают и выходят с рынка с прибылью; как только появляется убыток, они держатся за убыточную позицию, пытаясь вернуть свои деньги случайно. В результате небольшие убытки медленно накапливаются в большие убытки.
Цены либо растут, либо падают, либо остаются прежними. В долгосрочной перспективе, без учета комиссий за транзакции и проскальзывания, вероятность заработать или потерять деньги составляет примерно 50%. Поэтому метод торговли большинства людей становится стратегией отрицательного ожидания с ограниченной прибылью и неограниченными рисками. Их отчет о расчетах по сделке должен выглядеть следующим образом: небольшая прибыль >>......>>небольшая прибыль>>большой убыток.
В реальной жизни это очень похоже на мышление бедных и мышление богатых людей. Бедные люди не склонны к риску и боятся потерять деньги. Мне нравится работа, которая гарантирует стабильный доход и стремится к стабильности. Даже если вы не совсем уверены в необходимости чего-либо делать, никогда не делайте этого. На первый взгляд, в этом нет ничего плохого, но за этим скрываются огромные возможности и риски.
Богатые более склонны рисковать, зная, что риск и доходность всегда пропорциональны. Только риск порождает возможности. Они рационально оценивают риски и делают смелые ставки, когда риски поддаются контролю.
Причина 2: Мне нравится быстро зарабатывать деньги
Однажды одно иностранное учреждение провело статистические исследования, которые показали, что в долгосрочной перспективе годовая доходность чистых активов большинства отраслей вряд ли превысит 15%. Напротив, многие розничные инвесторы стесняются здороваться с другими, если получают 15% прибыли на рынке. Людям нравится быстро зарабатывать деньги, и их действия включают активную торговлю и краткосрочную торговлю.
Тяжелая позиция
Крупные позиции, высокое кредитное плечо и распределение капитала — все это очень заманчиво, но также и очень опасно. Если вы преуспеете, вы будете успешны; если потерпите неудачу, вы обречены. Если у вас есть торговая стратегия с процентом выигрышей 50%, и вы работаете с полной позицией и маржинальной торговлей, то, если вам повезет, вы можете выиграть более десяти раз подряд, и также возможно, что ваше благосостояние изменится от количественного изменения к качественному.
Но если вы ошибетесь хотя бы один раз, все будет сброшено на ноль. Даже если вы просто работаете с большой позицией без какого-либо распределения капитала, существует риск того, что ваш счет обнулится, поскольку вы не можете гарантировать, что не понесете убытки более десятка раз подряд в следующей рыночной ситуации. Даже интенсивная торговля может превратить изначально ожидаемую торговую стратегию в стратегию с неравными выигрышами и проигрышами.
Короткий срок
Единственное боевое искусство в мире, которое невозможно победить, — это скорость. В кругу трейдеров ручная дневная торговля, внутридневная краткосрочная торговля и количественная высокочастотная торговля всегда были очень загадочными. Я не сомневаюсь в этих людях, которые торгуют, глядя на секундомер, но я пытаюсь убедить вас отказаться от краткосрочной торговли с другой точки зрения.
Когда мы оцениваем, осуществим ли метод, мы должны смотреть не только на тех, кто добился успеха, используя эти методы, но и на тех, кто потерпел неудачу, используя эти методы. Другими словами, нельзя предполагать, что покупка лотерейных билетов — это стратегия с положительными ожиданиями только потому, что некоторые люди выигрывают джекпот.
Кроме того, если взглянуть на рейтинг продуктов прямых инвестиций за последние три года, сколько из 100 крупнейших компаний занимаются повседневной спекуляцией или краткосрочной торговлей? Нет сомнений, что процент успеха краткосрочных инвестиций очень низок. Даже если он успешен, этот метод быстрого зарабатывания денег трудно поддерживать в долгосрочной перспективе. Если вы не одаренны, будьте осторожны, используя подобные трюки, в конце концов, есть только один Симмонс.
Причина 3: Предвзятость
Если возможно, советую вам потратить 100 минут на просмотр фильма «12 разгневанных мужчин». Фильм, ремейк которого был сделан четырьмя странами: первая американская версия 1957 года, японская версия 1991 года, российская версия 1997 года и китайская версия 2014 года. Хотя этот фильм не научит вас торговать, он научит вас смотреть на вещи правильно и учиться познавать себя, что очень важно.
Поскольку человеческий опыт ограничен, человеческое познание также ограничено. У каждого человека есть предубеждения, в большей или меньшей степени основанные на собственном опыте. Зачастую предубеждения становятся привычкой большинства людей, и они считают само собой разумеющимся судить о многих вещах, основываясь на собственных эмоциях.
Возвращаясь к рынку, на чем основано ваше суждение о рынке — на фундаментальном анализе или на техническом анализе — на самом деле не имеет значения. Если ваши взгляды отличаются от взглядов большинства участников рынка, цены будут иметь тенденцию благоприятствовать большинству участников рынка, и рынок не будет функционировать в соответствии с вашими взглядами.
Поэтому в сделках мы должны помнить: «судите, но не полагайтесь на суждение». В конечном счете, оно должно основываться на фактах и ценах. Единственная сила, которая движет ценами вверх и вниз, — это ожидания большинства людей относительно будущего. Ваши суждения не имеют веса на рынке, поэтому никогда не позволяйте своим суждениям формировать вашу собственную предвзятость.
Причина 4: Стремление к совершенству.
Участниками рынка являются специалисты из всех слоев общества, включая физику, статистику, математику, астрономию и т. д. Многие пытаются использовать свои профессиональные знания, чтобы объяснить этот рынок.
Но основными участниками рынка являются люди, а у людей есть когнитивные ограничения, а это значит, что сам рынок неправильный и несовершенный. Так как же мы можем использовать эти «идеальные» методы для объяснения рынка? Разве это не противоречит природе рынка?
Выше перечислены причины, по которым подавляющее большинство людей, приходящих на рынок, в конечном итоге терпят неудачу. Помимо основных причин, перечисленных выше, существует множество других факторов, которые здесь не перечислены. Короче говоря, за исключением вашей уверенности в победе, все остальное является камнем преткновения, мешающим вам добиться успеха.
Те, кто зарабатывает деньги на рынке благодаря удаче, со временем вернут их на рынок. Таким образом, фьючерсный рынок представляет собой игру с отрицательной суммой. Только изменив свой образ мышления и разработав собственную торговую стратегию, вы сможете добиться успеха.
Что такое вероятностное мышление?
Вероятностное мышление — это красивое название, проще говоря, это азартное мышление. Вы не ослышались, торговля — это азартная игра. Когда вы слышите об азартных играх, вы можете подумать о «ком-то, кто проиграл все в азартные игры, сбежал из-за долгов или у кого не осталось семьи», и держаться от этого подальше.
В обществе действительно есть игроки, одержимые азартными играми. Но азартная игра ≠ игрок. «Азартные игры» — это, пожалуй, одно из самых неправильно понимаемых слов. Если ваша стратегия — отрицательное ожидание, вы — игрок; если ваша стратегия — положительное ожидание, вы — игрок.
Если убрать негативное значение слова «азартная игра» и понимать его как деятельность, которая подразумевает принятие определенных рисков в обмен на определенную прибыль, то жизнь на самом деле является «азартной игрой» повсюду. Какую специальность выбрать в школе, покупать ли дом, начинать ли проект, работать или открыть бизнес и т. д.
Даже помещение денег в банк — это азартная игра, поскольку вы не знаете, будет ли в будущем инфляция или обанкротится ли банк (см. греческий долговой кризис). Короче говоря, от колыбели до могилы каждый жизненный процесс — это азартная игра.
Как победить в долгосрочной перспективе
Необходимо более подробно рассмотреть концепцию азартных игр: как можно выиграть в долгосрочной перспективе? Прежде чем изучать долгосрочные выигрышные стратегии, давайте сначала изучим принципы этих долгосрочных выигрышных стратегий. Что еще, помимо печатного станка, может гарантировать долгосрочную победу?
Именно это и происходит в казино: баккара, рулетка, игровые автоматы, блэкджек и т. д. Как бы ни менялись методы игры, в конечном итоге казино останется в выигрыше. На самом деле здесь скрыт секрет, о котором казино никогда не рассказывают: закон больших чисел.
Как работает Сик Бо
Три игральных кости, ставка на размер: 4-10 — маленький, 11-17 — большой. Если вы сделаете ставку правильно, вы выиграете деньги. В Сик Бо есть своего рода окружающие кости, то есть, когда очки на трех костях одинаковы, то выигрывает дилер казино. Вероятность появления окружающих костей составляет 2,8%. Тогда вероятность появления большого и маленького числа составляет 48,6% каждое. Казино полагается на эту вероятность в 2,8%. Если каждый игрок поставит 100 юаней в каждой игре, казино выиграет 280 юаней после 100 игр.
(0.486+0.028)100100-0.486100100=280
Однако в этой стратегии казино есть лазейки. Если крупный игрок вдруг сделает ставку в десятки миллиардов и выиграет, казино внезапно обанкротится. Таким образом, казино устанавливает лимит ставок, и если лимит превышен, в этом раунде больше нельзя делать ставки. Таким образом, даже если игроку повезет выиграть деньги на некоторое время, в долгосрочной перспективе он все равно проиграет вероятности. В бесконечном количестве игр в Сик Бо игрок потеряет 2,8% своих денег.
Закон больших чисел
Преимущество владельца казино всего на 2% больше, чем у игрока. В одной игре владелец может понести убытки или даже испытывать непрерывные убытки. Однако владелец казино не будет напуган потерями, потому что он знает, что причина, по которой он может зарабатывать деньги, заключается в том, что действует «закон больших чисел». Пока люди продолжают играть, ему нужно лишь небольшое преимущество в 2%, чтобы поддерживать стабильную прибыль в долгосрочной перспективе.
Таким образом, казино не боится, что вы выиграете деньги, а боится, что вы не придете. Вы даже слышали о банкротстве банков на протяжении многих лет, но слышали ли вы когда-нибудь о банкротстве казино? В долгосрочной перспективе казино всегда в выигрыше. Вот почему азартные игры в долгосрочной перспективе всегда выигрывают.
Похожие примеры выигрыша в долгосрочной перспективе: различные лотереи. С момента запуска лотереи призовой фонд лотереи постоянно увеличивается, и эти деньги, безусловно, поступают от большинства игроков в лотерею. Знаете ли вы, какова вероятность выиграть 5 миллионов в Double Color Ball? Ответ — один из 17,7 миллионов.
Изменения вероятности
Предположим, что есть монета с одинаковым весом с обеих сторон, вероятность выпадения слова (обратная сторона) или цветка (лицевая сторона) составляет 50%, и каждое подбрасывание монеты не зависит от предыдущего результата. Если подбросить монету 10 000 раз подряд, вероятность выпадения орла составит примерно 50%.
Но если вы подбросите его только 10 раз, вероятность получения положительного результата изменится и может не составить 50%. Поэтому дилер казино должен обеспечить срабатывание этой стратегии положительного ожидания достаточное количество раз, чтобы она была эффективной. Это также является причиной того, почему частные инвестиционные институты не могут остановить стратегию, когда они начинают применять количественную торговую стратегию, если только не возникнут особые условия.
О том, как использовать «закон больших чисел» для создания долгосрочной выигрышной стратегии на финансовом рынке, пойдет речь в нашей следующей серии курсов, так что следите за обновлениями!
Подвести итог
Выше мы объяснили вам, как рассматривать торговлю с научной точки зрения, с точки зрения вероятности, причин неудач в торговле, правильного торгового мышления, принципа выигрыша в долгосрочной перспективе в азартных играх и т. д. Я верю, что если вы хорошо учитесь, то изменение мышления приведет к изменению вашего поведения, а изменение поведения приведет к изменению вашего успеха.
Домашнее задание
- Почему трейдинг — это игра вероятности?
- Каковы еще причины сбоя транзакции?
- 1










