В основном речь здесь идет о реализации запрограммированного кода реального времени для средне- и низкочастотных торговых стратегий.
Стратегия
Рождение количественной торговой стратегии обычно основано на наблюдении и понимании рынка, генерировании идеи стратегии, затем разработке конкретных деталей стратегии, а затем на обратном тестировании нескольких разновидностей данных для получения и проверки влияния конкретных значений параметров. . Если эффект хороший и имеет универсальную применимость, то следующим шагом будет тестирование реального рынка с небольшими средствами. Если реальное предложение, выходящее за пределы выборки, осуществимо, вы можете в конечном итоге увеличить средства и запустить его в течение длительного времени.
Чтобы предотвратить использование рычагов, позвольте мне объяснить, что, конечно, существуют и другие методы создания стратегий, такие как интеллектуальный анализ данных, копание, копание, копание факторов. Существуют также факторы автоматической генерации, такие как машинное обучение и обучение с подкреплением. Однако этот метод черного ящика трудно продолжать использовать в период восстановления стратегии, потому что вы не знаете, когда и почему эти обнаруженные факторы потерпят неудачу. При количественной торговле самое важное — настаивать на твердой торговле. Если рынок не в порядке, вы можете сократить свою позицию, но не можете закрыться. Никто не может знать, когда возникнет большой рынок. Если вы пропустите его, ваш предыдущий откат будет напрасным.
Аналогия заключается в том, что разработка и тестирование стратегий эквивалентны «храмовому расчету», упомянутому в «Искусстве войны» Сунь Цзы: «Тот, у кого нет битвы, кроме храма, является победителем, должен рассчитывать больше; тот. кто не сражался, но храм - проигравший должен рассчитывать. "Меньше значит больше. Больше означает победу, меньше означает меньше, и ничто не имеет значения!"
Поэтому торговая стратегия должна быть хорошо спланирована и тщательно рассчитана на основе первоначального проекта, иначе вы фактически проиграете еще до того, как будет сделано фактическое предложение. Этот шаг является самым сложным. Хотя последующий код непрост, большая часть его просто утомительна. Если вы потратите больше времени и усилий, вы всегда сможете сделать это хорошо. Ключом к твердому предложению является контроль рисков.
Торговые стратегии или торговые правила позволяют нам «поступать правильно», а конкретная реализация фактического предложения заключается в том, чтобы «поступать правильно». Во многих случаях узнать правильное направление гораздо сложнее, чем пройти это расстояние. Как и в анекдоте о ремонте оборудования, за проведение линии берут тысячу юаней. Проведение линии стоит всего 1 доллар, но знание того, где ее провести, стоит 999.
Стратегия + реальное предложение вместе образуют торговую систему. Что касается проектирования торговой системы, вы можете обратиться к предыдущей статье: Семь элементов полной торговой системы. Настоящее предложение здесь на самом деле представляет собой конкретные операции следующих 4 шагов торговой системы: «Вход и выход из прибыли и убытка». Первые три шага в основном определяются после завершения разработки стратегии.
Однако даже если стратегия хороша, если фактическая реализация не будет реализована, эффект будет значительно снижен, и даже потенциальная стратегия, которая изначально была хорошей, будет остановлена. Разработать хорошую стратегию непросто, поэтому постарайтесь ее реализовать. Хорошая идея в конечном итоге должна быть твердо реализована.
вопрос
1. Внезапная рыночная тенденция
Такая стратегия встречается только в том случае, если внутри бара есть сигнал. Внутри бара цена закрытия или цена открытия определенной K-линии не используется, а для запуска сигнала используется внутридневная цена.
Вот пример проблемы, возникшей в реальном предложении несколько дней назад. Микроскопический пример торгового рынка. Это довольно распространено в валютном кругу.
На картинке ниже — 10-секундная К-линия бессрочного контракта BNB несколько дней назад (2023.7.10 17:21) (столбик — значение OHLCV, агрегированное из данных о транзакциях за 10 секунд).

Как видите, амплитуда большой положительной линии составляет 3,53%, а сумма сделки составила около 30 миллионов долларов. Выполнено за 10 секунд. До появления этого рынка тенденция была почти беспрецедентной.
Посмотрите на изображение ниже, на котором изображена 1-секундная k-линия в то время, вы можете получить более подробную информацию.

Обычно для полного подъема требуется около 4 секунд. За первую секунду он поднялся более чем на 2 пункта. По сути, это результаты высокочастотных стратегий (ориентированных на события, высокочастотные тенденции, маркет-мейкинг и т. д.) и алгоритмических приказов, которые могут быть организованы заранее.
Давайте посмотрим на 4-часовую K-линию BNB. Самая большая положительная линия – это период времени, когда вышла новость. Амплитуда 4,05%.

Сравнивая K-линии этих периодов, мы видим, что такого рода колебания, вызванные новостями (на этот раз новостью является новое IEO Binance, ARKM), обычно завершаются мгновенно. Прибавка в 4 часа на самом деле мало чем отличается от 10 секунд, а реальный запуск составляет всего около 4 секунд. Этот вид поля боя относится к тем высокочастотным стратегиям, которые вооружены до зубов. Однако это также может повлиять на средне- и низкочастотные стратегии, вызывая большее проскальзывание.
Мы не будем здесь изучать высокочастотные стратегии. Что это значит для средне- и низкочастотных стратегий? На ум приходят две основные вещи:
1. Некоторые тенденции возникают очень внезапно и завершаются в течение короткого периода времени, поэтому стратегию нельзя случайно приостановить. Реальное предложение в валютном кругу должно быть гарантированно онлайн 24 часа в сутки, особенно если позиция есть, и ее нельзя отключить.
2. Фактическое проскальзывание может достигать 2 процентных пунктов. Посмотрите на 1-секундную К-линию выше. Если ваш сигнал на покупку основан на определенной цене, и эта цена выходит в нижней части большой К-линии, то, несмотря ни на что, цена после входа. рынок может упасть на 2-3 процентных пункта. Худшее может составлять всего 4 процентных пункта, и эти заказы на покупку находятся на кончике иглы. Однако, если вы продаете, вы получите прибыль, превышающую ваши ожидания. Однако, согласно закону Мерфи, падающий хлеб всегда приземляется намазанной маслом стороной. В долгосрочной перспективе существует высокая вероятность того, что проскальзывание будет еще больше.
Однако хорошо то, что это происходит лишь ограниченное количество раз. Пока стратегия хороша и проскальзывание больше, это всего лишь фиксация прибыли, которая не повлияет на долгосрочную положительную доходность. Это все равно, что пережить еще один шок и износ.
Один из способов смягчить это — использовать веб-сокет для получения последней цены. В документе говорится, что он обновляется каждые 250 миллисекунд, но иногда он обновляется быстрее, поэтому можно ответить немедленно. Еще одним преимуществом веб-сокета является то, что он не занимает лимит частоты Restful API биржи. Подробно об этом говорится позже.
2. Почасовая котировка
С этим сталкиваются многие трендовые стратегии, поскольку большинство из них используют цену позиции переключения для расчета сигналов входа и выхода. Потом, как проходит час, все запускаются один за другим.
В час, особенно кратный 8, потому что независимо от того, какой цикл у вас есть, все эти три точки должны соответствовать общему делителю времени. Возможно, автоматические стратегии каждого сработают, и высокие, средние и низкие частоты будут сжаты вместе. генерируют свои собственные сигналы, соперники друг друга.
Кроме того, в это время обмен также нуждается в расчете и доставке. Хотя бессрочный контракт не доставлен, могут быть и другие операции для расчета платы за поставку капитала. В течение примерно 6 секунд после трех часов 08.08.16 веб-сокет Binance не отправлял информацию K-линии, он остановился! Просто спрашиваю, что делать? На самом деле решения часто нет.
Что еще более серьезно, так это то, что рынок будет резонировать, особенно когда рынок падает, и паника будет более заразной. Серверы биржи еще более загружены, и многие мелкие монеты из-за жестких рыночных условий сразу же не могут быть размещены, и все это - 1001 ошибка. Когда вы размещаете ордер в спешке и добиваетесь успеха, ордера, исполненные на кончике булавки, могут стать вашими.
Поэтому проскальзывание действительно неизбежно. Это судьба. Просто смиритесь с этим. Чрезмерная оптимизация кода не принесет особой пользы. Как упоминалось ранее, рассматривайте это как еще один стоп-лосс.
Однако есть и несколько советов, которыми можно поделиться.
Биение сигнала можно рассчитать заранее за n секунд до часа. В это время перегрузка еще не началась, поскольку большинство автоматических стратегий могут ждать, пока не выйдет цена закрытия К-линии в час, прежде чем начинать расчет сигнала. Однако проблема, вызванная этой операцией, заключается в том, что она может генерировать ложные сигналы. Например, цена немедленно возвращается назад. Сигнала быть не должно, и происходит ложное срабатывание. На этом этапе от вашего выбора зависит, хотите вы это сделать или нет. Однако вы можете добавить определенный порог и активировать его при его превышении, чтобы предотвратить ложные сигналы, вызванные краткосрочным возвратом цен. Проскальзывание можно немного уменьшить.
Существует также метод использования сигналов смещения, таких как сдвиг времени или сдвиг k-линии, который не генерирует сигналы по часам, не взаимодействует с другими и лучше избегает скопления. Существуют также такие методы, как TWAP.
Однако это требует некоторых навыков и усложняет сам код.
твердое предложение
Базовая средне- и низкочастотная стратегия CTA. Вообще говоря, реальный код очень прост. Для разнообразия существует только одна стратегия, не происходит сложения или вычитания позиций, а также перекрестная информация не смешивается. Тогда локальному коду не нужно будет поддерживать какое-либо состояние, поскольку биржа записывает все за вас. Есть ли позиция, какая маржа требуется, выполнен ли ордер и т.д. Поскольку это средняя и низкая частота, вы можете проверить информацию об учетной записи биржи в любое время, когда это необходимо, и это наиболее быстрый и точный способ. Это устраняет необходимость использования локальной базы данных для записи статуса транзакции.
Эта простая стратегия на самом деле осуществима, но проблема в том, что ретрейсмент может быть больше, недостаточно диверсифицирован, а риск высок. Один продукт может не иметь рынка, колебаться и возвращаться, не оборачиваясь, или столкнуться с экстремальными рыночными условиями, и на кривой капитала появится еще одна большая дыра. Если вы отнесетесь к этому серьезно, вы испугаетесь и прекратите свою стратегию, если не сможете ее вынести. Если вы отнесетесь к этому легкомысленно, опыт торговли будет намного хуже. Обратите внимание, что все это происходит в условиях разумных позиций. В противном случае, если позиция слишком легкая, ретрейсмент будет небольшим, но и доход сократится, а прибыль и убыток будут исходить из одного и того же источника, и будет жаль упускать возможность, если позиция окажется такой же; слишком тяжело, это будет ошибкой, и рано или поздно с этим будет покончено.
Однако новичкам рекомендуется начать с реализации этой стратегии в реальном времени. Только благодаря практике вы сможете быстро повысить свой торговый уровень. Но следите за тем, чтобы ваша позиция была легкой, а кредитное плечо должно быть ниже. Лучше не использовать кредитное плечо, чтобы вы могли сохранять свою позицию в течение более длительного периода времени.
Если вы хотите быть более профессиональным, уменьшите риски отдельных пунктов, кривая капитала будет более плавной, и вам будет меньше беспокоиться о том, когда предложение будет сделано (как упоминалось ранее, при разумных позициях это на самом деле очень важно, потому что проще придерживаться стратегии и ждать, пока появится риск) это вообще многовариантная, многостратегическая, многопараметрическая модель, а дальше идут сложения и вычитания позиций. Это не обязательно означает добавление или вычитание позиций по одной стратегии, но также может быть достигнуто с помощью нескольких подстратегий для достижения эффекта добавления или вычитания позиций. Однако в этом случае стратегия будет более насыщенной. Если вы также хотите минимизировать проскальзывание открытия и закрытия позиций, сложность кода резко возрастет.
Давайте поговорим о трудностях, вызванных этой многовариантной, многостратегической и многопараметрической моделью.
трудность
1. Ограничение частоты API
Первая трудность при использовании нескольких стратегий — ограничение частоты использования API. Существует множество разновидностей и стратегий. Чтобы получать в режиме реального времени цены, позиции, ордера и другую информацию, вам придется постоянно посещать биржу. Как упоминалось ранее, если частота низкая и медленная, полученная цена может быть не самой последней, и проскальзывание может быть намного больше.
Ресурсы сервера биржи ограничены, поэтому существует ограничение на частоту доступа к API. Ограничение Binance составляет 2400 в минуту, а также есть ограничение в 10 секунд и другие так называемые режимы машинного обучения для обнаружения вредоносного поведения. В любом случае, это определенно не сработает, если это происходит слишком часто. Не получится, последнее слово остается за биржей. В этом случае, сами понимаете, формулы нет.
Хотя говорят, что это 2400, я проверил это случайно, используя параллелизм. Если я запрашиваю K строк, даже если это самые короткие 99 строк за раз (вес API равен 1), то если я запрашиваю около 75 монет одновременно. , меня забанят на несколько минут. Поэтому нельзя легко бросить вызов ограничениям.
При его нарушении вы получите ошибки 429, 418 и ваш IP забанят на срок от нескольких минут до нескольких дней. В это время, если у вас есть позиция, то она будет мизерной (ограничений на выставление ордеров нет). , особенно ликвидация существующих позиций, но у вас нет информации о ценах, если только нет вебсокета)
Решение этой проблемы — использовать веб-сокет для получения данных, чтобы биржа могла активно и своевременно передавать их, не занимая API. Может уменьшить некоторое проскальзывание. Проблема в том, что вам нужно поддерживать еще один рыночный центр на базе веб-сокетов. Сложность живого кода возросла и стала более сложной. Его нельзя отключать в течение 24 часов, а если он отключен, то он должен автоматически вовремя подключаться и т. д.
2. Статус стратегии
Как упоминалось ранее, если стратегии становятся более сложными, вам придется фиксировать статус каждой стратегии. В противном случае позиции биржи не будут знать, какая стратегия открыта, на какую сумму открыта каждая и т. д. А если вы захотите просмотреть его позже, вам придется записать больше данных.
На этот раз вам нужно ввести базу данных (конечно, вы также можете использовать записи файлов, та же идея).
Внедрение базы данных приводит к проблемам с базой данных. Однако это похоже на разработку программного обеспечения в других отраслях и не содержит ничего нового. Особенно в индустрии электронной коммерции, поскольку речь идет об остатках средств, управлении заказами и других подобных вещах, такие книги и статьи могут читать те, у кого нет опыта.
Следует отметить, что многие шаги должны выполнять атомарные операции, аналогичные транзакциям базы данных, то есть набор операций или все из них завершаются успешно. Если определенный шаг завершается неудачей, вам нужно ничего не делать и вернуться к исходному состоянию.
Затем, поскольку в конце концов это транзакция с реальными деньгами, для операций с базой данных с информацией о заказе лучше всего использовать самый высокий уровень из четырех уровней изоляции, Serializable, чтобы исключить возможность всех грязных чтений, неповторяющихся чтений и фантом читает. То есть для чтения и записи ключевой информации базы данных не используется параллелизм, многопоточность или даже асинхронное использование. Все операции выполняются в одном потоке. Осуществление операций.
Не относитесь к проблеме параллельного программирования легкомысленно. Если в такой системе есть проблема, ее, вероятно, невозможно исправить. Это самая трудная ошибка в разработке программного обеспечения. Те, кто может аккуратно выполнить такую работу, — это программисты с ежемесячной зарплатой от 50 000 долларов.
Я могу вспомнить не так много тех, кто использует многопоточность или асинхронность (многопоточность и асинхронность, рекомендуется использовать многопоточность, потому что асинхронность похожа на инфекционную болезнь в Python. После использования ее необходимо использовать в цепочка вызовов) Что действительно полезно, так это отправка предупреждающих сигналов DingTalk и тому подобное. Поскольку сервис DingTalk находится в Китае, а серверы обмена валют находятся за границей, ваш кодовый сервер должен быть развернут за рубежом, поближе к бирже, поэтому при отправке DingTalk иногда требуется несколько секунд для возврата, а иногда он даже блокируется. длится более десяти секунд.
наконец
На самом деле, не имеет значения, можете ли вы многое сделать. Пока вы готовы принять большее проскальзывание, вы можете потерять почти 1/5 или даже больше прибыли. Самое главное – это стратегия. Ключом к успеху является ожидание положительной отдачи и возможность работать без простоев.
Короче говоря, первоочередной задачей твердого предложения является продолжение и стабильное выполнение установленной логики стратегии. Проскальзывание – это часть торговли, просто постарайтесь уменьшить его, пока оно не сломает ваши мышцы.
Первоклассная стратегия, реализованы 2 и 3 потока, большой проблемы нет. Но если стратегия не на должном уровне, верхний реальный торговый код не поможет, и проигрыш все равно останется проигрышем. Следовательно, простое написание хорошего кода не может обеспечить успешную количественную торговлю. Стратегия хороша, а живой код надежен. Конечно, он лучший. Однако, когда время ограничено, сосредоточьтесь на стратегии.
Продолжение следует
