В процессе загрузки ресурсов... загрузка...

Количественная торговля криптовалютами для новичков - приближение к количественной криптовалюте (2)

Автор:FMZ~Lydia, Создано: 2022-07-27 16:34:41, Обновлено: 2024-12-04 21:33:10

img

Количественная торговля криптовалютами для новичков - приближение к количественной криптовалюте (2)

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

Программный торговый сценарий

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

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

    С точки зрения разработки стратегии на платформе FMZ Quant Trading, стратегии также можно разделить на:

    • Стратегия односорта То есть эта стратегия работает только на одном виде, например, на торговле BTC или ETH.
    • Многовидная стратегия Проще говоря, это управление несколькими видами в соответствии со стратегической логикой.
    • Стратегия для нескольких счетов Проще говоря, несколько обменных объектов конфигурируются на реальном боте (концепция обмена была представлена в предыдущей статье, а обменный объект с конфигурированным Ключем API представляет собой обменную учетную запись).
    • Стратегия множественной логики Например, стратегия MACD, стратегия скользящей средней, стратегия сетки и т. д. разрабатываются одновременно в реальном боте (конечно, это для работы с различными объектами биржи, а работа одного и того же объекта биржи зависит от того, противоречит ли конкретная стратегия логически)
  • Интерфейс API Exchange Как программируемый торговый скрипт управляет обменным счетом? Итак, какие интерфейсы открыты для обмена? В предыдущей статье мы говорили об обмене имеют интерфейсы REST и Websocket в целом в разделе Exchange. Здесь мы добавляем некоторые концепции с уровня процедур стратегии. Интерфейсы обмена разделены на проверенные или нет (как REST, так и Websocket), есть проверка и непроверка.

    • Интерфейсы, не требующие проверки Этот тип интерфейса, обычно известный как public interface, не требует проверкиAPI KEY(если вы забыли, что такое API KEY, вы можете обратиться к предыдущей статье). Этот тип интерфейса - это рыночный интерфейс в целом, например, запрос углубленных рыночных цен, запрос данных K-линии, запрос ставок финансирования, запрос информации о сортах торговли, запрос временных меток биржевых серверов и т. Д. Проще говоря, интерфейс, который не связан с вашей учетной записью, может быть примерно определен как общедоступный интерфейс (не требуется проверка)
      На платформе FMZ Quant Trading при вызове непроверенной функции API (включающей непроверенный интерфейс биржи, публичный интерфейс), даже если конфигурация API KEY неверна, данные, возвращенные интерфейсом, могут быть получены нормально (из-за непроверки).

    • Интерфейсы, требующие проверки Проще говоря, это интерфейс, который должен быть проверен (через API KEY), этот тип интерфейса называется частным интерфейсом. Он обычно связан с некоторыми операциями или информацией вашего счета, такими как запрос активов счета, запрос позиций счета, запрос ожидающих заказов, запрос переводов, перевод валюты, регулирование рычага, настройка режима позиций и т. Д. Все эти операции должны быть проверены. На платформе FMZ Quant Trading при вызове проверяемой функции API (интерфейс, который должен быть проверен для инкапсулированного обмена, частный интерфейс) при неправильной настройке ключа API при вызове интерфейса будет сообщаться о ошибке и возвращается нулевое значение.

    Итак, как эти интерфейсы используются на платформе FMZ Quant Trading?

    FMZ Quant Trading Platform включает в себя поведение биржи и интерфейсы с последовательными определениями (например, интерфейс K-линии, углубленный интерфейс рынка, интерфейс запроса текущего актива, интерфейс ордера, интерфейс отмены ордера и т. Д.), Эти интерфейсы называются функциями API FMZ Quant Trading Platform на FMZ Quant Trading Platform, и к ним можно получить доступ из документации API (https://www.fmz.com/api).

    Итак, как некоторые из интерфейсов обмена с различным поведением и определениями используются на FMZ Quant Trading Platform?

    Эти обменные интерфейсы включают в себя: передачу активов, условный заказ, размещение партийных заказов, аннулирование партийных заказов, изменение заказов и т. Д. Некоторые биржи имеют эти интерфейсы, другие нет, и их функции и детали использования могут быть совершенно разными, поэтому к этим интерфейсам можно получить доступ черезexchange.IOфункция на платформе FMZ Quant Trading (для подробной информации см. документацию API платформы FMZ Quant Trading:https://www.fmz.com/api#exchange.io..Есть также несколько практических примеров стратегий IO на площадке стратегии FMZ Quant Trading Platform.

    Создают ли все функции API в документе API FMZ Quant Trading Platform сетевые запросы?

    В первую очередь, интерфейс API биржи имеет ограничения частоты доступа (например, 5 раз в секунду), и доступ не может быть слишком частым, в противном случае он будет сообщать об ошибке http 429, и доступ будет отклонен (большинство бирж сообщают 429). Не все функции API платформы FMZ Quant Trading Platform будут генерировать сетевые запросы. Некоторые из них изменяют только некоторые локальные настройки, такие как установка текущей торговой пары, установка кода контракта, функция расчета индикатора и получение имени объекта обмена и т. Д. Как правило, можно судить о том, происходит ли сетевой запрос с целью функции.

    • Давайте поговорим о некоторых распространенных проблемах и опыте при использовании функций API на платформе FMZ Quant Trading

      • Допустимость ошибок Это наиболее распространенная ошибка, которая беспокоит бесчисленное множество новичков.

        img

        При написании стратегии, нам всем необходимо судить и проверять данные, возвращаемые интерфейсом. Например, строка кода рыночной цены, чтобы получить на FMZ Quant Trading Platform (то же, что и написание программы для доступа к интерфейсу обмена непосредственно самим):var ticker = exchange. GetTicker(), если нам нужно использоватьLast(последняя цена)tickerпеременная (ссылка на структуру, возвращенную функцией GetTicker), мы должны использоватьvar newPrice = ticker.LastДля получения таких данных (что такое newPrice? new: latest, Price: price, yes! все вместе!)GetTicker()Функция возвращается к нормальным данным, это ОК, но если есть запрос тайм-аут, сетевая ошибка, обменник тянет сетевой кабель, кабель перерезан, ребенок тянет электрический переключатель, и т.д.GetTicker()функция возвращаться кnullНа данный момент, стоимостьtickerэтоnull, и если я пойду к доступу к егоLast, произойдет исключение программы и программа стратегии остановится. Похоже, что неудача вызова интерфейса (призыв GetTicker не удается и возвращает null) не является прямой причиной остановки реального бота стратегии (прямая причина заключается в том, что атрибутnullОшибки в сообщении об ошибке вызова интерфейса не вызовут остановку бота (подчеркнуть). Итак, что мы можем сделать, чтобы избежать ненормальной остановки настоящего робота? Ответ заключается в выполнении отказоустойчивой обработки данных, возвращенных интерфейсом.null(пример языка JavaScript, другие языки обычно такие же) Напишите короткий сегмент кода для описания (это просто описание, вы не можете запустить его напрямую!)

        var ticker = exchange.GetTicker()
        if (ticker) {
            var newPrice = ticker.Last
            Log("Print the latest price:", newPrice)
        } else {
            // The data is null, there will be no problem if no operation is performed
        }
        

        Не толькоGetTickerинтерфейс должен быть отказоустойчивым, но интерфейс с сетевыми запросами должен быть отказоустойчивым для значения возврата (если вы используете значение возврата функции) Существует множество методов отказоустойчивости, можно использовать_C()Функция (см. документацию FMZ API) для написания отказоустойчивой функции и самостоятельного проектирования отказоустойчивого механизма и логики. Что касается использования_C()Учтите, что параметр_C()function - это ссылка на функцию, а не вызов функции._C(funcName, param1, param2), вызов правильный, funcName без скоб, а param1 и param2 - параметры, которые должны быть переданы функции funcName._C(funcName(param1, param2)), вызов неправильный, обычно написанный новичками, которые не читают документацию FMZ API всерьез.

      • Количество ордера ордера покупки на спотовом рынке Количество ордера ордера покупки на спотовом рынке также легко допустить ошибки для новичков, как упоминалось в предыдущей статье, количество ордера ордера покупки ордера на спотовом рынке обычно составляет сумму (очень немногие биржи могут иметь другие настройки, как правило, эти специальные настройки обмена на FMZ будут объяснены в документе FMZ API), например, я использую OKEX V5 демо для тестирования: Торговая пара устанавливается как:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // Switch to the demo of OKEX exchange
            exchange.Buy(-1, 1)             // The price is -1, indicating that the order placed is a market order, and the quantity is 1, indicating that the order amount is 1USDT
        }
        

        Поскольку биржи, как правило, имеют лимит на сумму заказа, заказы меньше лимита не будут размещены (например, Binance Spot требует, чтобы каждый заказ превышал 5USDT, прежде чем он может быть успешно размещен).Поэтому он будет сообщать об ошибке, если вы разместите такой заказ:

        Error	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
        
      • Руководство при размещении будущих заказов При составлении фьючерсных стратегий направление размещения ордеров часто совершается новичками, что приводит к проблемам. Давайте сначала посмотрим на описание в документации API:https://www.fmz.com/api#exchange.setdirection...

        img

        Поскольку функция порядка является толькоBuy, SellОднако фьючерсы (конечно, нет проблем со спотом, спот только покупается и продается) имеют направления открытия длинного, закрытия длинного, открытия короткого и закрытия короткого, поэтому очевидно, что Buy/Sell не может выражать операции в стольких направлениях.exchange.SetDirection(), который определяет направление торговли фьючерсами. На FMZ,exchange.SetDirection("buy")(установить направление сначала) используется в сочетании сexchange.Buy, это означает, что размещенный ордер - это ордер на открытие длинной позиции. И так далее:exchange.SetDirection("sell")используется в сочетании сexchange.Sell, это означает, что размещенный ордер - это ордер на открытие короткой позиции.exchange.SetDirection("closebuy")используется в сочетании сexchange.Sell, это означает, что размещенный ордер - это ордер на закрытие длинной позиции.exchange.SetDirection("closesell")используется в сочетании сexchange.Buy, это означает, что размещенный ордер - это ордер на закрытие короткой позиции. Новички обычно используютexchange.SetDirection("sell")в сочетании сexchange.BuyЗатем сообщается об ошибке (обратное тестирование может не сообщать об ошибке, но это, очевидно, логическая ошибка, обсессивно-компульсивное расстройство не может терпеть...). Еще одна ошибка начинающих

        function main() {
            exchange.SetContractType("quarter")   // Set the current contract as a quarterly contract
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("See my market order is placed and the transaction is completed, there is a position", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy is used in conjunction with Sell, yes~
            exchange.Sell(-1, 1)
        }
        

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

      • Выход журнала, отображение информации о транзакции Проектирование запрограммированных и количественных торговых стратегий неотделимо от проектирования взаимодействия между человеком и компьютером, таких как отображение данных и выход журнала операций . Мы обычно используем родной язык программирования для написания реальных ботовых сценариев и программ стратегии. Например: использование pythonprint- Да. Использование JavaScriptconsole.log- Да, конечно. Использование голангаfmt.Println()- Да. Использование C++cout

        Давайте поговорим об информационном дисплее на платформе FMZ, на платформе FMZ Quant Trading, есть два основных места, где информация отображается.

        • Колонка состояния После того, как реальный бот запускается, реальная страница бота выглядит так, как показано на рисунке:

          img

          Часть отображения представляет собой информацию о столбце состояния. Колонка состояния в основном используется для отображения некоторых изменяющихся данных в режиме реального времени (поскольку изменения в режиме реального времени необходимо наблюдать в режиме реального времени, и ее нельзя печатать в виде журнала каждый раз, этот тип данных может отображаться в столбце состояния. Журнал повторит много дублируемых и бессмысленных данных, что повлияет на запрос, если каждый журнал будет печататься). Данные, отображаемые в столбце состояния, используютLogStatusПодробности см. в документации FMZ API.

        • Колонка журнала Также распечатан на реальной странице бота, как показано на рисунке:

          img

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

          1. Общий журнал, стратегии на FMZ принимают функцию Log для вывода и печати в журнале стратегии.

            img

          2. Журнал заказов, использованиеexchange.Sell/exchange.Buyв стратегии FMZ будет записываться в выходном журнале автоматически.

            img

          3. Журнал отмены,exchange.CancelOrderиспользуется в стратегии FMZ, которая автоматически выводит журнал отмены в журнал.

            img

          4. Журнал ошибок, когда стратегия на FMZ запускается, ошибка вызова происходит на интерфейсе, который делает сетевой запрос, исключение бросается (например, заявление броса), журнал ошибок выводится в журнале автоматически.

            img

        Функции API на FMZ, функции, которые могут генерировать выход журналов, такие как Log ((...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id), и т. д., все они могут быть сопровождаться некоторыми дополнительными параметрами вывода после необходимых параметров, таких как: exchange. CancelOrder ((orders[j].Id, orders[j]), это для вывода информации о заказе при отмене порядка заказов[j].

        function main() {
            Log("data1", "data2", "data3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "Attached data1", data2, "...")
            exchange.CancelOrder(id, "Attached data1", data2, "...")
            LogProfit(100, "Attached data1", data2, "...")
        }
        
      • Использование функций показателей Прежде чем говорить о функции индикатора, давайте сначала поймем, что такое индикатор. Проще говоря, это линия, такая как скользящая средняя, MACD и ATR. Вопрос: Откуда взялись эти показатели? О: Конечно, это рассчитано. Вопрос: На чем основывается расчет? О: Расчет на основе данных K-линии. Вопрос: Приведите пример? Ответ: Принимая в пример простейший индикатор скользящего среднего показателя, если мы используем данные ежедневной K-линии (т.е. положительная или отрицательная линия представляет день) в качестве источника данных для расчета показателя. Вопрос: Можно ли рассчитать показатель скользящей средней, если количество К-линейных BAR меньше 10? A: Не только индикатор скользящей средней не может быть рассчитан, но любой индикатор не может рассчитать эффективное значение индекса, когда количество данных K-линии BAR не соответствует параметру периода индикатора, и соответствующее положение рассчитанного массива будет заполнено пустыми значениями, например,JavaScriptЯзыковая стратегия будет отображатьсяnullпри печати вычисленных данных показателей.

        Случается, что есть пример обучения в квадрат стратегии:https://www.fmz.com/strategy/125770На примере стратегии обратного теста мы можем увидеть график, созданный системой обратного теста, и 10-периодную скользящую среднюю величину:

        img

        Стратегия пользовательского рисунка, нарисованная K-линия, а также графики скользящих средних.

        img

        Вопрос: Что, если мне нужна 10-часовая скользящая средняя? Ответ: Использование данных K-линии с данными K-линии часового периода будет в порядке.

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

        На платформе FMZ Quant Trading мы можем использовать библиотеку TA (библиотека, реализованная платформой FMZ, интегрированная в докер, и различные языки могут использоваться непосредственно) или библиотеку talib (старая библиотека индикаторов talib, JS, интеграция C ++, Python необходимо установить самостоятельно). Например, для расчета скользящей средней в приведенном выше примере: Используйте библиотеку TA:

        function main() {
            var records = exchange.GetRecords()
            var ma = TA.MA(records, 10)
            Log(ma)       // print moving average
        }
        

        Используйте библиотеку талибов:

        function main() {
            var records = exchange.GetRecords()
            var ma = talib.MA(records, 10)
            Log(ma)       // print moving average
        }      
        

        Вычисленные данные индикатора ma представляет собой массив, и каждый элемент соответствует K-линейному массиву (записи) один к одному, то естьma[ma.length -1]соответствуетrecords[records.length - 1], и так далее.

        То же самое касается и других сложных индикаторов, и мы должны обратить внимание на такие индикаторы, как MACD.

        var macd = TA.MACD(records)   // In this way, only the K-line data is passed in, not the indicator parameters. The indicator parameters use the default values, and the same goes for other indicator functions.
        

        В настоящее время переменная macd является двумерным массивом (вы можете спросить Baidu, если вы не понимаете концепцию). Вопрос: Почему данные MACD-индикатора являются двумерным массивом? Ответ: Поскольку индикатор macd состоит из двух линий (линия диф, линия dea) и множества строк объема (Macd volume bar, на самом деле данные этого объема также могут рассматриваться как линия).

        var dif = macd[0]
        var dea = macd[1]
        var macdColumn = macd[2]
        

        Здесь также есть пример готового урока, если вы заинтересованы, вы можете изучать на:https://www.fmz.com/strategy/151972

        img


Связанные

Больше