Изобретатели количественно документируют API

Автор:Маленькие мечты, Создано: 2017-11-27 09:05:08, Обновлено: 2023-07-12 16:47:31

[TOC]

Основная информация

Вход

Что может сделать квантовая платформа FMZ?

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

Полная серия уроков

Например:

Видеоуроки:

В случае возникновения каких-либо проблем, вы можете отправить на форум свои вопросы, обсудить, подать заявку на работу на платформе, написать в телеграмме.Телеграмма@Groups@Administrators, вопросы обычно быстро отвечают.

Поддержка поддержки ChatGPT

FMZ Quantitative Trading Platform имеет доступ к ChatGPT в качестве вспомогательного инструмента для разработки.Страница Chat GPT

Какие языки программирования я могу использовать для реализации своей стратегии?

ФМЗ поддерживает использование квантовой платформыJavaScriptTypeScriptPythonC++PINE麦语言Blockly可视化Создание стратегии дизайна.

ПоддержкаTypeScriptЯзык, который остается настройкой при создании стратегииJavaScriptСначала вы пишете стратегию, а затем начинаете программу.// @ts-checkИли нажмите кнопку "TypeScript" в правом верхнем углу в области редактирования политики, чтобы переключиться наTypeScript‒ Платформа автоматически распознает код какTypeScriptМы также предоставляем вам соответствующую поддержку в области компиляции и проверки типа:

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

Одной из этих стратегий достаточно владеть языком проектирования. В дополнение к поддержке способа написания кода, можно использовать стратегию создания визуализированных модулей ("Blockly").

BlocklyВизуализация урока:

НастройкаPythonИспользование стратегииPythonИнтерпретатор

ИспользованиеPythonНаписать политику, просмотр или на диске, если системная среда, в которой находится хост, установлена одновременноPython2иPython3, который можно запустить, когда политика начинает работать в первой строкеPythonНапример:#!python3#!python2, так что система будет автоматически искать интерпретатор.#!/usr/bin/python3

Что такое хранитель?

ХранительПонимается, что исполнитель вашей стратегии торговли, ответственный за сложные запросы данных, получение данных, сетевые ссылки, ретрансляцию журналов и т. д. Хранитель работает на вашем сервере, и даже если на сайте FMZ возникает сбой в сети, это не влияет на работу вашего Хранителя. Хранитель может работать на вашем сервере.ЛинуксОкнаMac OSандроидARM Linux, созданный в 2007 годуИ так далее.Страница администратораШаги установки и обновления хостера Linux В каталоге, в котором находится программа, хранятся журналы дисков, управляемые администратором../logs/storageДокументыdb3О чем вы?SqliteВ файлах базы данных.SqliteВ этом разделе вы найдете более подробную информацию о том, как использовать эти расширения для управления программным обеспечением.db3Файл на диске называется файлом на диске.ID

Поддерживаемые соглашения

  • Блокчейн-активы: более 50 основных блокчейн-активов (цифровых валют) поддерживаются.
  • Общий протокол:Общий протокол

Стратегия безопасности

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

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

PythonПолитический код шифрования: По умолчанию,PythonПолитика: автор кода не шифрует, когда использует его сам, шифрует, когда сдает его в аренду.PythonПолитику начать редактировать следующий код, который можно указать для самостоятельного использования или аренды.PythonЗашифровывается ли код политики при запуске. Поддерживается шифрование кода политики.PythonОн был издан на:Python 2.7В этом случае,Python 3.5В этом случае,Python 3.6Версия.

  • Авторы стратегии работают сами, и они используют код для шифрования стратегии, используя регистрационный код:#!pythonДля указания версии интерпретатора Python используется запятая,Интервал, ввод криптографических командencrypt◦ Если не указаноPythonВерсия добавлена напрямую#!encrypt

    #!python,encrypt
    

    Или

    #!encrypt
    
  • Авторы стратегии работают самостоятельно и не шифруют свои стратегии для использования другими с помощью регистрационного кода:

    #!python,not encrypted
    

    Или

    #!not encrypted
    

СуждениеPythonИспользование кода в стратегическом шифрованииos.getenv('__FMZ_ENV__')Возвращение строки"encrypt"Описание вступило в силу. Действует только на реальном диске, повторное тестирование не зашифровано.PythonПосмотрите на это видео.

#!encrypt
def main():
    ret = os.getenv('__FMZ_ENV__')
    # 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
    Log(ret, ret == "encrypt")

Безопасность ключей

Конфигурируемая на КТП FMZ информация об аккаунте, такие конфиденциальные данные, как шифровальные строки в параметрах политики, зашифрованы в браузере. Информация, хранящаяся на КТП FMZ, является шифрованной ("негласная информация"). Дешифровать ее можно только на частном устройстве пользователя, что значительно повышает безопасность конфиденциальных данных.

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

    На странице "Конфигурация информации об биржах" платформы все скрытые контролеры криптовалютных текстовых ящиков поддерживаются в виде профилированных путей, которые используются для загрузки местных файлов хранителей.RSA KEYПримеры методов проверки дают подробную информацию о том, как конфигурировать конфиденциальную информацию на устройствах, на которых расположены программы хостера.

    1, создание RSA-публичных ключей, частных ключей.PKCS#8Например, вы можете создать несколько инструментов для создания открытых ключей и закрытых ключей.opensslЯ не знаю. 2. Создание на биржеRSA KEYСоздание и загрузкаПервый шагВ этом случае вы можете использовать свой собственный ключ. 3, будетПервый шагЧастный ключ, созданныйtxtФормат файла сохраняет каталог на уровне хостера, а также может сохранять другие пути в каталоге, в котором находится программа хостера. 4, настройка биржи на FMZAccess KeyВ редакционном ящике заполнить "Создано на бирже"RSA KEYЯ не знаю. 5. Конфигурация биржи на FMZSecret KeyВ редакторском ящикеТретий шагДополнительная информация размещена в каталогеtxtПуть к файлу, например, файл, на котором он размещен:rsaKey.txtВ каталоге, в котором находится документ и хранитель, заполняется:file:///rsaKey.txt; если документ находится в каталоге следующего уровня в программе хранителяrsa_keyВ ней написано:file:///rsa_key//rsaKey.txt‒ Если это так.rsaKey.txtДокумент в других путях, конкретно настроенный таким образом, необходимо отметить, что документ поддерживает только размещение в каталогах или подкаталогах на уровне хостера.

    Это делает локализацию частных ключей более безопасной, и подробные процедуры могут быть рассмотрены.Видеоролики

Система обратной связи

Что такое система обратной проверки и для чего она нужна?

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

Как точны данные, полученные с помощью системы, и насколько точны результаты?

FMZ объемная торговая платформа разделит модели обратного измерения на:Проверка на уровне дискаиАналогичные повторные испытания❖ Реальная регенерация полностью на основе полных исторических данных; аналоговая регенерация на основе реальных данных K-линийtickДанные для проведения ретротестирования. Оба ретротестирования основаны на реальных исторических данных, но ретротестирование на диске более точные данные и результаты более надежные.Укажите механизм FMZОднако ретроспекция - это лишь стратегическое представление о том, что происходит с историческими данными, которые не могут полностью представлять будущие тенденции. Исторические тенденции могут повторяться или могут вылететь из чёрного цыпленка. Поэтому следует относиться к результатам ретроспекции рационально и объективно.

Вопросы, на которые следует обратить внимание при рецензировании на различные языковые стратегии:

JavaScriptиC++Политический отзыв выполняется в браузере, на диске или на компьютере.WexAppВ частности, в этом году в стране появилась новая платформа, которая позволяет продавать товары на реальных биржах.WexAppВ этом случае вы не можете использовать другие программы, библиотеки или модули.ПитонПовторное тестирование осуществляется на хостере, может быть выполнено на общедоступном сервере FMZ, а также на хостере пользователя.ПитонЕсли вам нужно использовать несколько библиотек, вам нужно будет установить их самостоятельно (на общедоступном сервере поддерживаются только обычные библиотеки).

Данные в системе отбора

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

Политика DEBUG в системе отслеживания

Рекомендации JavaScript в браузере Chrome

Поддерживаемые биржи в системе рецензирования

  • Криптовалюты (цифровые валюты)

    Наименование Тип Объяснение
    Bitfinex Объекты обмена Ограниченные транзакции поддерживаются, например:BTC_USD,ETH_USD,LTC_USDИ, конечно, мы должны быть готовы.USDВ долларах
    Биньань Объекты обмена Ограниченные транзакции поддерживаются, например:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCИ так далее.
    ОКX Объекты обмена Ограниченные транзакции поддерживаются, например:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCИ так далее.
    Монета Объекты обмена Ограниченные транзакции поддерживаются, например:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCИ так далее.
    Фьючерсы OKX Объекты фьючерсных бирж Ограниченные транзакции поддерживаются, например:BTC_USD,ETH_USDТак, сделки по цене.USD, настройка конкретного кода контракта ((см.exchange.SetContractTypeПосле этого контракт называется контрактом на месте монеты.this_weeknext_weekquarterswap
    HuobiDM Объекты фьючерсных бирж HuobiDM, то есть токен-фьючерс (токен-контракт), поддерживает ограниченные торговые пары, такие как:BTC_USD,ETH_USDТак, сделки по цене.USD, настройка конкретного кода контракта ((см.exchange.SetContractTypeПосле этого контракт называется контрактом на месте монеты.this_weeknext_weekquarterswap
    BitMEX Объекты фьючерсных бирж Торговые пары:XBT_USD, настройка конкретного кода контракта ((см.exchange.SetContractTypeПосле этого контракт называется контрактом на месте монеты.XBTUSD
    Фьючерсы на биань Объекты фьючерсных бирж Ограниченные транзакции поддерживаются, например:BTC_USDT,ETH_USDTТак, сделки по цене.USDT, настройка конкретного кода контракта ((см.exchange.SetContractTypeВ данном случае, мы можем использоватьUSDTВ этом контексте мы должны быть готовы к тому, что в будущем мы сможем выиграть.swap
    Опционы Deribit Объекты опционов Торговые пары:BTC_USD,ETH_USD, настройка конкретного кода контракта ((см.exchange.SetContractTypeПосле этого контракт называется валютным контрактом. Требуется установить конкретный код опционов.

    Объекты фьючерсных бирж в системе рецензирования временно не поддерживают переключение пары сделок в стратегическом коде.

Моделирование

Аналоговый уровень рекурсионного анализа выполняется на основе данных базовой линии K рекурсионной системы в соответствии с определённым алгоритмом в рамках цифровой структуры наивысшей цены, минимальной цены, открытой цены, закрытой цены на данной базовой линии K Bar.tickДанные в реальном времениtickДанные возвращаются при запросе интерфейса.Указанные изобретателями механизмы количественного аналогового уровня регенерации

Уровень диска

Реальная ретроспекция на уровне дискаtickУровень данных представлен в временной последовательности Bar.tickСтратегия уровня данных заключается в том, чтобы использовать повторное измерение на уровне реального диска.tickПоддерживает глубинные данные, ретрансляцию данных, поддерживает пользовательскую глубину, поддерживает расчетные данные. Поддерживает до 50 МБ данных расчета на уровне реального диска, не ограничивая диапазона времени расчета в пределах пределов данных. Если необходимо увеличить диапазон времени расчета как можно больше, можно уменьшить настройки значения диапазона глубины, не используя расчетные данные для увеличения диапазона времени расчета.GetDepthGetTradesФункция получает данные о транзакциях. Вызывает данные о транзакциях в определенный момент времени.GetTickerGetTradesGetDepthGetRecords, не будет многократно продвигать время на обратной оси времени ((не будет запускать переход к следующему моменту данных рынка)); повторный вызов одной из вышеперечисленных функций будет продвигать время обратной связи на обратной оси времени ((переход к следующему моменту данных рынка)); использование обратной связи на уровне реального диска при обратной связи не рекомендуется, так как может быть слишком рано, когда нет данных на уровне реального диска;

Поддержка на уровне диска

  • Биньань
  • OKX ((ОКХ на месте))
  • HuobiDM (токенный фьючерс)

Настройка параметров системы рецензирования

Функция настроек параметров в системе FMZ Quantified Trading Platform Retesting позволяет настроить настройки в зависимости от параметров, на которые они настроены:

  • Минимальное значение: начальное значение ограничивающего параметра.
  • Максимальное значение: Максимальное значение после увеличения параметров ограничения.
  • Длина шага: параметры увеличиваются.

Создается комбинация параметров, по которой повторяются параметры (т. е. повторяется каждая комбинация параметров). Параметры политики могут быть настроены в системе рецензирования только для параметров типа ** цифровой ((number) **.

Например, на странице рецензирования можно установить опцию настройки параметров:

img

Параметровые настройки:

img

Сохранить настройки повторного измерения

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

img

С помощьюJavaScriptНапример, кликните "Сохранить настройки для просмотра в исходном файле":

img

JavaScript/Python/C++/麦语言Сохранить и отредактировать настройки в формате исходного файла немного отличается:

/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

Язык:

(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)

Настройка источников данных

Система использованияGETМетод запрашивает пользовательский URL ("публично доступный URL") для получения внешнего источника данных для повторного просмотра с дополнительными параметрами запроса:

Параметры Значение Объяснение
символ Название Например: BTC_USD_OKCoin_EN
Еда Биржа Например: OKCoin_EN
круглый Точность цены Если 3, то цена, которую мы вернем, должна быть умножена на 1000.
Воронда Количественная точность Если это 2, то количество возвращенных данных должно быть умножено на 100.
Период барный цикл ((миллисекунды) Например, 60000 бар в минуту для запроса.
глубина Глубокие диапазоны 1-20
торговля Необходимо ли делить данные? истинно/ложно
от Начало времени Unix временной шкалы
до Время окончания Unix временной шкалы

Обратите внимание:

round与vround是为了避免网络传输过程中浮点数的精度丢失设计的两个参数,价格数据和成交量、订单量数据都采用整型传输。

Пример сложенных данных:

http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200

Формат, возвращаемый, должен быть одним из двух следующих (система автоматически распознает):

Обычный уровень Bar

{
    "schema":["time","open","high","low","close","vol"],
    "data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}

Данные, проанализированные на уровне Tick (содержит информацию о глубине диска, диапазон глубины в формате [цены, объемы], может иметь много уровней глубины, asks - ценовой подъем, bids - ценовой регресс)

{
    "schema":["time","asks", "bids","trades","close","vol"],
    "data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}

Объяснение

Поле Объяснение
схема Указывает свойства строк в матрице data, отличаются большим и маленьким шрифтом, ограничиваются только time, open, high, low, close, vol, asks, bids
данные Массив, в котором сохраняются данные по схеме

Формат данных

Поле Объяснение
просьбы/предложения [Цена, количество,...]
торговля [[Время, направление ((0: купить, 1: продать), цена, количество],...]

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

{
	"detail": {},
	"symbol": "futures_binance.eth_usdt.funding",
	"schema": ["time", "open", "high", "low", "close", "vol"],
	"data": [
		[1582876800000, 25289, 25289, 25289, 25289, 0],
		[1582905600000, 30522, 30522, 30522, 30522, 0],
		[1582934400000, 40998, 40998, 40998, 40998, 0],
        ...
		[1626652800000, 198, 198, 198, 198, 0],
		[1626681600000, 691, 691, 691, 691, 0],                  // 相邻的周期间隔8小时
		[1626710400000, 310, 310, 310, 310, 0],                  // 币安资金费率8小时更新一次,资金费率数据为什么为310?
		[1626739200000, 310, 310, 310, 310, 0],                  // 因为和K线数据一样,为了避免网络传输过程中浮点数的精度丢,数据采用整型,所以需要根据round参数处理数据,处理后用于返回给回测系统的数据就为310
		[1626768000000, -41610, -41610, -41610, -41610, 0],      // 资金费率数据也可能为负值
		[1626796800000, -5125, -5125, -5125, -5125, 0],
        ...		
		[1627977600000, 10000, 10000, 10000, 10000, 0]
	]
}

Примеры запросов данных, отправленных системой обратной связи, включают:

http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400

Примеры пользовательских источников данных:

Укажите источник данных, адрес:http://xxx.xx.x.xx:9090/dataНастройка сервера данных с использованием языка golang:

package main 
import (
    "fmt"
    "net/http"
    "encoding/json"
)

func Handle (w http.ResponseWriter, r *http.Request) {
    // e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
    // r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "schema":["time","open","high","low","close","vol"],
            "data":[
                [1564315200000,9531300,9531300,9497060,9497060,787],
                [1564316100000,9495160,9495160,9474260,9489460,338]
            ]
        }
        */
        ret := map[string]interface{}{
            "schema" : []string{"time","open","high","low","close","vol"},
            "data" : []interface{}{
                []int64{1564315200000,9531300,9531300,9497060,9497060,787},
                []int64{1564316100000,9495160,9495160,9474260,9489460,338},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

В этом случае, мы должны быть готовы.JavaScriptПример:

/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/

function main() {
    var ticker = exchange.GetTicker()
    var records = exchange.GetRecords()
    Log(ticker)
    Log(records)
}

Графики, изображающие персонализированные данные в системе рецензирования:

Смотрите также:

Местный регенерирующий двигатель

ФМЗ открыта для количественных операцийJavaScriptязык иPythonМестный языковой ретро-инженер, поддерживающий настройки при ретро-ретроПериод нижней линии K

Кнопка быстрого ответа

  • Кнопки быстрого переключения страниц для редактирования политики и пересмотра страниц политики

    ИспользованиеCtrl + ,Нажмите и нажмите на кнопку, переключающую страницу рецензирования и страницу редактирования политики.CtrlПосле нажатия клавиши,Нажмите на кнопку.

  • Ключи к сохранению политики

    ИспользованиеCtrl + sКлючи, сохранение политики.

  • Кнопка быстрого просмотра

    ИспользованиеCtrl + bНажмите кнопку, чтобы начать повторное тестирование.

Кодовые указания

Функции ввода

Функция Объяснение
main() Для ввода функций.
onexit() Максимальное время выполнения для функции вывода при нормальном выходе - 5 минут, может быть не заявлено, если время вышло, то будет возвращена ошибкапрерыватьОшибка.
onerror() Функция, которая запускает выполнение для исключения, имеет максимальное время выполнения 5 минут и может не быть заявлена.PythonЯзыкC++Политика, написанная на языке, не поддерживает эту функцию.
init() Для инициализируемой функции, политика будет сначала автоматически вызвана при запуске, но не может быть объявлена.
  • Объясните:
    • Не поддерживается система обратной связиonerror()Функция.
    • Он был задействован в реальном режиме.onerror()Функция не будет запускаться.onexit()Функция.

Однократный отзыв (((

onexit(), обрабатывающий работу по сбору хвоста, выполненную пользователем в течение 5 минут.

function main(){
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)
}

// 扫尾函数实现
function onexit(){
    var beginTime = new Date().getTime()
    while(true){
        var nowTime = new Date().getTime()
        Log("程序停止倒计时..扫尾开始,已经过去:", (nowTime - beginTime) / 1000, "秒!")
        Sleep(1000)
    }
}
import time 
def main():
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)

def onexit():
    beginTime = time.time() * 1000
    while True:
        ts = time.time() * 1000
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!")
        Sleep(1000)
void main() {
    Log("开始运行, 5秒后停止,并执行扫尾函数!");
    Sleep(1000 * 5);
}

void onexit() {
    auto beginTime = Unix() * 1000;
    while(true) {
        auto ts = Unix() * 1000;
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!");
        Sleep(1000);
    }
}

init()

init(), пользователь реализует функцию инициализацииinit()Политики автоматически выполняются в первую очередь при запуске.init()Функция, выполняющая инициализационные задачи, разработанные в политике.

function main(){
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")
}

// 初始化函数
function init(){     
    Log("初始化!")
}
def main():
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")

def init():
    Log("初始化!")
void main() {
    Log("程序第一行代码执行!", "#FF0000");
    Log("退出!");
}

void init() {
    Log("初始化!");
}

Ошибка.

onerror()В результате, они стали более активными.onerror()Исполнение функции, которая не поддерживаетсяPythonC++Язык - это стратегия.

function main() {
    var arr = []
    Log(arr[6].Close)
}

function onerror() {
    Log("错误")
}
# python不支持
// C++不支持

Классические стратегические рамки

ВJavaScriptPythonC++В языке, в котором написаны стратегии, они должны быть вызваны в ключевом цикле стратегииSleep()Функция ─ используется для управления скоростью обратного отсчета при обратном измерении, а для управления временным интервалом стратегических раундов при реальном измерении, что позволяет контролировать частоту запросов на API-интерфейс биржи.

  • Основные рамки стратегии цифровой валюты:

    function onTick(){
        //在这里写策略逻辑,将会不断调用,例如打印行情信息
        Log(exchange.GetTicker())
    }
    
    function main(){
        while(true){
            onTick()
            // Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
            Sleep(60000)
        }
    }
    
    def onTick():
        Log(exchange.GetTicker())
    
    def main():
        while True:
            onTick()
            Sleep(60000)
    
    void onTick() {
        Log(exchange.GetTicker());
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(60000);
        }
    }
    

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

    function onTick(){
        // 这个仅仅是例子,回测或者实盘会很快把资金全部用于下单,实盘请勿使用
        exchange.Buy(100, 1)
    }
    
    function main(){
        while(true){
            onTick()
            // 暂停多久可自定义,单位为毫秒,1秒等于1000毫秒
            Sleep(1000)
        }
    }
    
    def onTick():
        exchange.Buy(100, 1)
    
    def main():
        while True:
            onTick()
            Sleep(1000)
    
    void onTick() {
        exchange.Buy(100, 1);
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(1000);
        }
    }
    

Лаборатория шаблонов

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

JavaScriptЯзык шаблонов:

img

PythonЯзык шаблонов:

img

C++Язык шаблонов:

img

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

    /*
    -- 策略引用该模板以后直接用 $.Test() 调用此方法
    -- main 函数在策略中不会触发, 只做为模板调试的入口
    */
    $.Test = function() {
        Log('Test')
    }
    
    function main() {
        $.Test()
    }
    
    def Test():
        Log("template call")
    
    # 导出Test函数, 主策略可以通过ext.Test()调用
    ext.Test = Test 
    
    // 策略引用该模板以后直接用 ext::Test() 调用此方法
    void Test() {
        Log("template call");
    }
    
  • Параметры класса шаблона В библиотеке шаблонов также могут быть установлены свои собственные параметры интерфейса. Параметры библиотеки шаблонов используются в коде библиотеки шаблонов в виде глобальных переменных.

    Параметры для класса шаблона:

    img

    Код класса шаблона:

    $.SetParam1 = function(p1) {
        param1 = p1
    }
    
    $.GetParam1 = function() {
        Log("param1:", param1)
        return param1
    }
    
    def SetParam1(p1):
        global param1
        param1 = p1
    
    def GetParam1():
        Log("param1:", param1)
        return param1
    
    ext.SetParam1 = SetParam1
    ext.GetParam1 = GetParam1
    
    void SetParam1(float p1) {
        param1 = p1;
    }
    
    float GetParam1() {
        Log("param1:", param1);
        return param1;
    }
    

    СсылкиЛаборатория шаблоновПример стратегического кода:

    function main () {
        Log("调用$.GetParam1:", $.GetParam1())
        Log("调用$.SetParam1:", "#FF0000")
        $.SetParam1(20)
        Log("调用$.GetParam1:", $.GetParam1())
    }
    
    def main():
        Log("调用ext.GetParam1:", ext.GetParam1())
        Log("调用ext.SetParam1:", "#FF0000")
        ext.SetParam1(20)
        Log("调用ext.GetParam1:", ext.GetParam1())
    
    void main() {
        Log("调用ext::GetParam1:", ext::GetParam1());
        Log("调用ext::SetParam1:", "#FF0000");
        ext::SetParam1(20);
        Log("调用ext::GetParam1:", ext::GetParam1());
    }
    

    img

  • Ссылки на библиотеки шаблонов

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

    img

Встроенная структура

Глобальные переменные

обмен

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

  • Добавить объекты обмена

  • Добавить объекты биржи на реальную страницу

Объекты, добавленные в обмен, соответствуют тем, что в коде.exchangeОбъект:

function main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
обмены

Это может быть воспринято как хранениеexchangeМассив всех обменных объектов обмена может содержать несколько обменных объектов.exchanges[0]То естьexchange

Добавленный объект обмена соответствует коду стратегииexchanges[0]exchanges[1]exchanges[2]Я не могу сказать, что я не знаю, что это такое.

function main() {
    for(var i = 0; i < exchanges.length; i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
    }
}
def main():
    for i in range(len(exchanges)):
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
void main() {
    for(int i = 0; i < exchanges.size(); i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel());
    }
}
Состояние заказов

OrderВ структуреStatusАтрибуты.

Название константы Определение Значение
ORDER_STATE_PENDING (Поддерживается) Не завершено 0
ORDER_STATE_CLOSED (Объединенное управление) Сделано. 1
ORDER_STATE_CANCELED (Отмененный заказ) Отменено 2
ORDER_STATE_UNKNOWN Неизвестно Статус неизвестен ((другие статусы)) 3

ORDER_STATE_UNKNOWN НеизвестноСостояние, которое можно вызватьexchange.GetRawJSON()Для получения информации о статусе оригинальных заказов, ознакомьтесь с документацией биржи, чтобы увидеть конкретные описания. Названия постоянных в таблицах могут использоваться непосредственно в коде стратегии иOrderСтруктураStatusСравнение свойств, определение равновесия и определение состояния заказа.Название константыСоответствующееЗначение, другие постоянные инологи больше не упоминаются.

Типы заказов

OrderВ структуреTypeАтрибуты.

Название константы Определение Значение
ORDER_TYPE_BUY Оплата 0
ORDER_TYPE_SELL Продажа 1
Тип позиции

PositionВ структуреTypeАтрибуты.

Название константы Определение Объяснение Применимо Значение
PD_LONG Отображает многоглавные позиции Фьючерсы на цифровые валютыexchange.SetDirection("closebuy")Установите направление позиции и выровните позиции этого типа Фьючерсы на цифровые валюты 0
PD_SHORT Отображение позиции пустоты Фьючерсы на цифровые валютыexchange.SetDirection("closesell")Установите направление позиции и выровните позиции этого типа Фьючерсы на цифровые валюты 1
Фьючерсы открывают позиции

OrderВ структуреOffsetАтрибуты.

Название константы Определение Значение
ORDER_OFFSET_OPEN Заказы на открытие 0
ORDER_OFFSET_CLOSE Заказы на склады 1
Параметры стратегии

Параметры стратегии, установленные на интерфейсе стратегии в стратегическом коде, выражаются в виде глобальных переменных.JavaScriptВ языке можно напрямую получить доступ к параметрам, установленным в интерфейсе политики, или изменить их, чтобы получить доступ к ним.PythonИспользуется при изменении глобальных переменных в функциях стратегииglobalКлючевые слова:

Тип параметров:

img

Переменные Описание Примечания Тип По умолчанию Объяснение
Номер Типы цифр Примечания Цифровая форма ((number)) 1 Политика C++ является плавающей точкой.
строка Структура Примечания Структура (string) Здравствуйте FMZ При вводе по умолчанию значения нет необходимости добавлять запятые, ввод обрабатывается как строка.
коробка Снижение Примечания Ключ к выводу ((selected)) 1|2|3 combox-переменные сами по себе являются числовыми значениями, представляющими собой целевой индекс выбора контроллера спускаемой панели, первый из которых содержит 1, а его индекс - 0, соответственно.
Буль Выберите Примечания Бул ((true/false)) Истинно При выборе, переменная bool - true, при отсутствии выборов, переменная bool - false.
secretСтраница Зашифрованные строки Примечания Шифровальная строка пароль Используется то же, что и строка, шифрование строки будет отправляться зашифрованно, не передавая ясного текста.
  • Параметры интерфейса, установленные в разделе параметров политики в разделе редактирования кода страницы.
  • Параметры интерфейса существуют в стратегическом коде в виде глобальных переменных, т. е. параметры интерфейса могут быть изменены в коде.
  • Параметры интерфейса - это имена переменных в стратегии:numberstringcomboxboolsecretString
  • Описание опций: Название параметра интерфейса в интерфейсе стратегии.
  • Опция примечаний: детальное описание параметров интерфейса, которое будет отображаться соответственно, когда мыш остается на параметрах интерфейса.
  • Тип опций: тип параметров интерфейса.
  • Варианты по умолчанию: По умолчанию параметры интерфейса.

Параметры зависят от настроек: Можно настроить один параметр, чтобы другой параметр, основанный на выборе этого параметра, осуществлял отображение и сокрытие.numberA, это числовой тип.numberAВ результате, мы получим более высокую оценку.isShowA(Бур-тип) ложное решениеnumberAПоказывать и скрывать.numberAВ интерфейсе параметры переменных установлены на:numberA@isShowA

img

Не подбиратьisShowAПараметрыnumberAПараметры скрыты. Для параметров типа контроллеров, параметры зависят от части для определения того, является ли параметр равным параметру.Индексные значения‒ Так же как иisShowAВ качестве примера параметров, когда параметры настраиваются на переменные, можно написать:numberA@combox==2numberAПараметры основаны наcomboxВыбирает ли параметр показать или скрыть третий вариант (индекс 0 соответствует первому, индекс 1 - второму, индекс 2 - третьему).

Политические параметры интерфейса, интерактивные элементы, параметры на шаблонах: Добавить только начало описания параметров в начале группировки(?第一组)Например, следующий рисунок.

img

При использовании стратегии параметры выставляются в группах:

img

Параметры по умолчанию сохранены: Параметры стратегии изображены, если вы хотите сохранить параметры стратегии по умолчанию при повторном проверке, вы можете нажать после изменения параметров стратегии.保存回测设置Нажмите на кнопку.

img

img

Параметры политики, которые были установлены, могут быть сохранены в форме кода в политике:

/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/

Структура данных

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

Торговля

Доступ к истории всех сделок (не своих)exchange.GetTrades()Функция возвращает.

{
    Id      : 9585306,          // 交易记录ID,如果交易所接口没有提供订单ID则使用时间戳填充
    Time    : 1567736576000,    // 时间(Unix timestamp 毫秒)
    Price   : 1000,             // 价格
    Amount  : 1,                // 数量
    Type    : 0                 // 订单类型,参考常量里的订单类型,0即为ORDER_TYPE_BUY,ORDER_TYPE_BUY的值为0
}
Тикер

Рыночные рынкиexchange.GetTicker()Функция возвращает.

{
    Info    : {...},             // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    High    : 1000,              // 最高价,如果交易所接口没有提供24小时最高价则使用卖一价格填充
    Low     : 500,               // 最低价,如果交易所接口没有提供24小时最低价则使用买一价格填充
    Sell    : 900,               // 卖一价
    Buy     : 899,               // 买一价
    Last    : 900,               // 最后成交价
    Volume  : 10000000,          // 最近成交量,原则上现货成交量单位为交易币种(baseCurrency),期货成交量单位为合约张数。如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
    Time    : 1567736576000      // 毫秒级别时间戳
}
Запись

СтандартыOHLCСтруктура, используемая для рисования K-линий и анализа показателей;exchange.GetRecords()Функция возвращает массив этой структуры.RecordСтруктура представляет собой столб K-линии, то есть K-линию.BARRecordВ том числеTimeНачало цикла для этого столбца K-линии.

{
    Time    : 1567736576000,     // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
    Open    : 1000,              // 开盘价
    High    : 1500,              // 最高价
    Low     : 900,               // 最低价
    Close   : 1200,              // 收盘价
    Volume  : 1000000            // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
Порядок

Структура заказов,exchange.GetOrder()exchange.GetOrders()Функция возвращает.exchange.GetOrders()Возвращается матрица этой структуры или пустая матрица (если нет).Заказы, которые пока не завершеныВозвращение[], т.е. пустая матрица) ‒

{
    Info        : {...},         // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Id          : 123456,        // 交易单唯一标识
    Price       : 1000,          // 下单价格,注意市价单的该属性可能为0或者-1
    Amount      : 10,            // 下单数量,注意市价单的该属性可能为金额并非币数
    DealAmount  : 10,            // 成交数量,如果交易所接口不提供该数据则可能使用0填充
    AvgPrice    : 1000,          // 成交均价,注意有些交易所不提供该数据。不提供、也无法计算得出的情况该属性设置为0
    Status      : 1,             // 订单状态,参考常量里的订单状态,例如:ORDER_STATE_CLOSED
    Type        : 0,             // 订单类型,参考常量里的订单类型,例如:ORDER_TYPE_BUY
    Offset      : 0              // 数字货币期货的订单数据中订单的开平仓方向。ORDER_OFFSET_OPEN为开仓方向,ORDER_OFFSET_CLOSE为平仓方向
    ContractType : ""            // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
Рыночный заказ

Продолжайте искать.exchange.GetDepth()Функции возвращаются в структуру данныхПредложенияСпроситСтруктура данных элементов в матрицах.

{
    Price   : 1000,              // 价格
    Amount  : 1                  // 数量
}
Глубина

Глубина рынка,exchange.GetDepth()Функция возвращает.

{
    Asks    : [...],             // 卖单数组,MarketOrder数组,按价格从低向高排序
    Bids    : [...],             // 买单数组,MarketOrder数组,按价格从高向低排序
    Time    : 1567736576000      // 毫秒级别时间戳
}
Счет

Информация об аккаунтеexchange.GetAccount()Функция возвращает ⇒ данные в возвращаемой структуре, относящиеся к текущим установленным парам сделок, установленным контрактным кодам.

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Balance         : 1000,      // 可用计价币数量,现货中如果交易对是BTC_USDT,Balance指的是当前可用USDT数量。U本位期货合约中Balance指的是可用保证金USDT的数量
    FrozenBalance   : 0,         // Balance表示的资产用于挂单的冻结数量
    Stocks          : 1,         // 可用交易币数量,现货中如果交易对是BTC_USDT,Stocks指的是当前可用BTC数量。币本位期货合约中Stocks指的是可用保证金的币(baseCurrency)的数量
    FrozenStocks    : 0          // Stocks表示的资产用于挂单的冻结数量
}
Положение

Информация о позициях, хранящихся в торговле фьючерсами, передаетсяexchange.GetPosition()Функция возвращается сюда.PositionСтруктураМасштабы

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    MarginLevel     : 10,        // 持仓杆杠大小,如果交易所接口没有提供该数据则通过计算填充,可能会有误差
    Amount          : 100,       // 持仓量,持仓合约张数,通常是正整数。注意每个交易所的合约乘数、价值等合约规格可能不一样,下单规则也可能不一样,例如币安合约可以0.1张下单
    FrozenAmount    : 0,         // 仓位冻结量,用于平仓挂单时的临时冻结仓位数量
    Price           : 10000,     // 持仓均价,原则上该属性为仓位总体的平均价格(不参与结算),如果交易所接口没有提供该数据则用交易所接口现有的持仓均价填充(参与结算)
    Profit          : 0,         // 持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口没有提供该数据则用交易所接口其它盈亏数据填充,盈亏数值的单位和当前合约保证金的单位相同
    Type            : 0,         // PD_LONG为多头仓位,PD_SHORT为空头仓位
    ContractType    : "quarter", // 合约代码,具体可以参看SetContractType函数描述中传入的参数
    Margin          : 1          // 仓位占用的保证金,如果交易所接口没有提供该数据则使用0填充
}

В связи с этим, мы должны быть внимательны к цифровым валютным фьючерсам.exchange.GetPosition()Функция возвращаетPositionСтруктурные матрицы.FrozenAmountProfitMarginсвойства, поскольку данные, предоставляемые биржами, не являются едиными, объекты разных бирж называютсяexchange.GetPosition()Данные, возвращаемые при интерфейсе, могут иметь различные определения.FrozenAmountДля 0; если требуется вычислить некоторые данныеInfoАнализ исходных данных в свойстве.

Рынок

Рыночная информация о торговых сортахexchange.GetMarkets()Функция возвращает это.MarketСтруктураСловарь

{
    Symbol          : "btcusdt",       // 该交易品种在交易所的原始名称
    BaseAsset       : "BTC",           // baseCurrency 交易币,统一大写
    QuoteAsset      : "USDT",          // quoteCurrency 计价币,统一大写
    TickSize        : 0.01,            // 价格最小变动数值
    AmountSize      : 0.01,            // 下单量最小变动数值
    PricePrecision  : 2,               // 价格精度,表示价格精确到2位小数
    AmountPrecision : 3,               // 下单量精度,表示下单量精确到3位小数
    MinQty          : 0.001,           // 最小下单量
    MaxQty          : 1000,            // 最大下单量
    MinNotional     : 5,               // 最小下单金额
    MaxNotional     : 9999999,         // 最大下单金额
    CtVal           : 100,             // 合约价值
    Info            : {...}            // 交易所该品种的原始数据
}

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

Глобальные функции

Версия ((()

Version(), возвращает текущую версию системы. Вернутое значение: тип строки.

Сон ((миллисекунда)

Sleep(Millisecond), функция покоя, которая приостанавливает процесс на некоторое время.MillisecondДля типа числа. Параметры для миллисекунд, например:Sleep(1000)Второй шаг - отдохнуть. Поддерживает операции с длительностью покоя менее 1 миллисекунды, например, настройкиSleep(0.1)◎ поддерживает минимальный параметр0.000001, наносекундный спящий. 1 наносекунд равен1e-6Миллисекунды.

Обратите внимание: ИспользуетсяPythonПри написании языковых стратегий следует использовать операции с интервалом допроса, временем ожиданияSleep(Millisecond)Функции. Не рекомендуетсяPythonО чем вы?timeКухняtime.sleep(second)Функции.time.sleep(second)Функция заставляет программист фактически ждать определенное количество секунд при повторном проверке.secondПараметры - это количество секунд, на которые установлена пауза), что приводит к очень медленному повторению политики.

Виртуальная?

IsVirtual(), чтобы определить, работает ли текущая политика для аналогичного повторного тестирования. Вернутое значение: тип Бура. Анонимный отзыв возвращает статусtrueВернулся.false

Почта ((...)

Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body), отправление сообщения.. Параметровое значение: все параметры для типа строки.. Возвратное значение: тип бура, отправление успешно возвращено.truesmtpServerДля отправки почтыsmtpУслугиsmtpUsernameВ этом случае, мы не можем позволить себе использовать его.smtpPasswordSMTP-пароль для почтового ящика (не пароль для входа в почтовый ящик)mailToПосылка в почтовый ящик:titleНапример, вы можете написать в электронном письме, что у вас есть электронная почта.bodyНапример, содержание электронной почты:

function main(){
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")

Больше

qq89520Вопрос в том, повторяется ли функция C постоянно или только один раз.

Эй, эй, эй!_C ((function, args...) Это по умолчанию 3s? Можно ли изменить по умолчанию, чтобы поставить _CDelay ((1000) прямо перед _C ((function, args...)?

ЛанчайеКластер: если вы создаете 1000 ботов одновременно и без стресса, вы можете создать несколько администраторов для распределения задач. Есть примеры кода для создания кластеров? Как создать несколько хостеров для распределения задач

Вэнги1Log ((talib.help (('MACD')); используется только в js, а в python нет свойства talib.help...

cjz140Что отличает _C ((function, args...) от функции Sleep, и я думаю, что это означает, что мы должны перепробовать.

3263243yКак очистить ErrorFilter после SetErrorFilter?

- Я не знаю.Есть ли другие способы использовать сторонние библиотеки?

- Я не знаю.Что должен заполнить родительский класс, если вы хотите унаследовать новый класс, определенный объектом биржи?

ЭтанвуЕсть ли настраиваемые инструменты для декомпиляции?

ПэнглихенгА как насчет exange.IO (("status"))?

ПэнглихенгПочему функция sell в сером цвете, это означает, что функция представления не используется?

ПэнглихенгПочему функция sell в сером цвете, это означает, что функция представления не используется?

ПэнглихенгЯ не знаю языка, ха-ха-ха, я хотел бы спросить, поддерживает ли es6

ПэнглихенгЯ не знаю языка, ха-ха-ха, я хотел бы спросить, поддерживает ли es6

Don.Как вы пишете среднюю линию объема?

черепахаЧто будет возвращено, если не удастся купить exchange.Buy ((1000) по рыночной цене?

Нинг-цзыНовый шрифт выглядит потрясающе.

гиппопотамBitmex Test Network ((testnet.bitmex.com) также имеет API-интерфейс, но на данный момент биржа может выбрать только Bitmex Mother Station, адрес API-документации https://testnet.bitmex.com/app/apiOverview Как вы можете помочь?

Чжидзинvar ret1 = exchanges[0].IO (("api", "future_estimated_price", "symbol=btc_usd"); Log (('ok futures estimated delivery price', ret1); https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png Почему мы не можем позвонить на интерфейсы других бирж и написать ошибку?

Аллен ФростлайнНедавно была переписана стратегия набора, и оба появились одновременно, но в первом API, похоже, нет упоминания.

виденияПривет, как разработчик Python, что вы думаете, что пишут ваши API-документы?

Аллен ФростлайнGetAccount: [EAPI:Rate limit exceeded] Хотите узнать, как это решить?

zhjx2314Не поддерживает StochRSI, можно ли добавить как можно скорее

ЕфГГГКогда Python в режиме реального времени, сценарий находится на собственном сервере Ali Cloud или на кластере botvs?

ЕфГГГКакую версию python вы используете?

- Очень хорошо.Пояснение GetFee должно было быть таким: "Верните Fee-структуру, а не один слог".

ЗвапКак вы можете вызвать талиб с помощью js?

ЕфГГГПоиск документации Python

Wmjbs123Если вы хотите, чтобы ваш код был чёрным, белыми глазами, написать код ночью, легко близоруко.

Don.Как настроить резюме в вейсбуке бота?

Число: безумныйМожно ли добавить в структуру ордера поле с равной ценой сделки?

МаленькийGetOrders: получает все незавершенные заказы, возвращает структуру Array Order, в китайской биткойн-торговли ETH, возвращает только последние 10 пунктов.

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

ЦзибангЧто означает значение, возвращаемое функцией $.Cross ((x, y)?

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

Эдвард ГьюКак вы думаете, какая-то функция CORRE в talib не переносится или пропускается?

Бедная гора ЯньньКажется, нет возможности ссылаться на показатели!

МаленькийКак переводить время k-линии, которое читается, в настоящее время, о, я не понимаю, слишком длинный, решен, спасибо

МаленькийКак удалить числа из матриц, я использую record.remove ((records[0])

ЗмейкаюОбычно мы получаем часовую линию K, но как вызвать ATR на дневную линию K?

ЗмейкаюОбычно мы получаем часовую линию K, но как вызвать ATR на дневную линию K?

57278863Узнайте, как традиционные фьючерсы получают цены и заказы, к сожалению, их корни очень тонкие.

КиринВ частности, в Китае существует более 10 тысяч фьючерсных рынков.

МаленькийНу, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну, ну.

МаленькийКак печатать состояние хранения, как я печатаю [object object][object object], как получить состояние хранения множества и пустых блоков, а также GetTicker ((), как получить неделю, следующую неделю и квартал.

ЧжидзинМогут ли фьючерсные биржи использовать GetTicker для получения рынка?

ПродажиКакой StochRSI можно добавить?

МомоксCancelOrder ((orderId) Отменить заказ по номеру заказа, вернуть true или false, попросите true= ячейка была успешно отменена, верно?

Момокс_G(K, V) Сохраняется глобальный словарный список Этот метод сохраняет глобальные переменные, которые могут использоваться для обмена данными между различными политиками.

Флуфи 3DВсплеск популярности

НульВы можете использовать LogProfitReset для перезагрузки журналов доходов.

xyМожно ли непосредственно скопировать EA?

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

МаленькийКакой это язык, есть ли какие-либо учебные материалы?

jxhbtcОшибка с данными неделю не подключается к роботу.

ДюхуИндекс TA - это просто расчет цены на закрытие?

btcrobotПривет, мир.

Маленькие мечтыФункция _C будет бездумно повторяться, пока не получит успешный результат.

Маленькие мечтыТалиб библиотека для python требует установки. http://www.botvs.com/bbs-topic/669

Маленькие мечтыSleep - это время, когда программа ничего не делает и ждет, пока параметры не будут установлены.

Маленькие мечтыНе требуя наследования, JS непосредственно завернулся в объект {name: "new object", old_exchange : exchange[0],...... }

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

Маленькие мечтыЕсли вы не хотите, чтобы кто-то из ваших друзей поделился вашим мнением, приходите в QQ-группу.

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

Маленькие мечтыES6 не поддерживается, ^^

Маленькие мечтыЕсли вы хотите, чтобы я рассказал вам об этой проблеме, я отвечу на нее.

Маленькие мечтыЕсли вы не хотите, чтобы ваш товар был куплен, вы можете купить его, если вы не хотите, чтобы он был куплен.

черепахаНапример, OKCoin, что вы получаете, если вы покупаете больше, чем у вас есть?

Маленькие мечтыВ частности, на какой бирже я верну номер заказа на OK Futures?

НульУже поддерживается переключение пары транзакций при запуске, требуется загрузка последнего хостера. Поддержка Bter/Poloniex Подробная API-документация Описание транзакционной функции внизу ((очистить кэш браузера после обновления, если не видно)

Маленькие мечтыQQ, я помогу вам найти вопрос.

Профессиональные кормильцыЕсли вы хотите установить белый список, я настраиваю IP-адрес хоста.

Маленькие мечтыЭто базовая ссылка не создана Сервер не отвечает. При запросе API KEY устанавливается IP-адрес?

Профессиональные кормильцыЭто смущает... Я могу запустить политику, которая не работает в бит-эпоху, и GetAccount не может получить доступ к GetAccount: Post http://api.btc38.com/v1/getMyBalance.php: read tcp 192.168.0.227:58596->211.149.148.144:80: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 2017-05-23 21:08:24 Битэпоха Ошибка GetAccount: timeout 2017-05-23 21:08:02 Биткойн-эпоха Ошибка GetAccount: timeout 2017-05-23 21:07:40 Бит эпоха Ошибка GetAccount: timeout 2017-05-23 21:07:20 Возобновить Может быть, это вопрос о белом списке IP-адресов?

Маленькие мечтыСерверы биржи не ответили, протокол TCP не был установлен и три раза рукопожатия не были проведены.

Профессиональные кормильцыA connection attempt failed because the connected party did not properly respond after a period of time (попытка подключения потерпела неудачу, потому что подключенная сторона не отреагировала должным образом после определенного периода времени)

Маленькие мечтыПривет! Речь идет об exchange.IO ((api, ApiName, Args) Функция не поддерживается, см. https://www.botvs.com/bbs-topic/812

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

Профессиональные кормильцыНе поддерживает бит-эпоха?

Маленькие мечтыhttps://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png Я думаю, что это нормально.

Нинг-цзыНапример, я хочу сделать полную валютную сделку с poloniex, но поддерживает только несколько валют, а exchange.IO, похоже, не поддерживает P-Net.

Маленькие мечтыЭто может быть вызвано exchange.IO.

Нинг-цзыА как насчет API, требующих проверки аккаунта?

Маленькие мечтыЕсли API, не требующие проверки аккаунта, можно использовать с помощью httpQuery (подробнее о документации BotVS), фактический API для транзакций требует доступа.

Маленькие мечтыПараметры API передаются с помощью HttpQuery: https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd. Для API бирж, которые не требуют проверки аккаунта, используйте HttpQuery прямо на платформе, а те, которые связаны с аккаунтом, используют IO API. Пост: https://www.botvs.com/bbs-topic/850

виденияСпасибо, надеюсь, что у вас будет прекрасная документация на API.

Маленькие мечтыГде вы видели этот API realTicker?

Маленькие мечтыhttps://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png API-документация является языком JavaScript. Описание, версия python описание в верхней части страницы обмена сообществами в Python.

НульЗдравствуйте, спасибо за совет, сейчас перестраивается документация API.

Маленькие мечтыПривет - показывает, что частота доступа превышает ограничения. https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png В политике используется функция Sleep ((1000)?, эта 1000 - это позволяет программе приостановить один секунд в каждом раунде, что можно настроить самостоятельно, целью является контроль программы частота доступа к API, поскольку некоторые биржи устанавливают максимальное ограничение доступа, определенное время, превышающее определенное количество посещений, будет отказывать в доступе, блокируя IP-адреса.

Маленькие мечтыhttps://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png Я лично пишу, что уже сравнил показатели STOCHRSI с OK, и согласен, что скорость немного медленная, оптимизирована и временно доступна.

НульВы можете выбрать, на сервере botvs или на сервере своего хостера, версия 2.7.5.

Маленькие мечтыВ этом случае, вы должны быть готовы.

Маленькие мечтыТеперь вы можете настроить свой собственный стиль фона.

Маленькие мечтыПитонская документация пишется.

Маленькие мечтыТалибская библиотека поддерживает:

Хззгуд48 https://www.botvs.com/bbs-topic/276

Маленькие мечтыПо-видимому, есть пример на площади стратегии, http://www.botvs.com/strategy/15098

НульДоступ к свойствам AvergPrice для Orders, которые поддерживаются биржами, может, а те, которые не поддерживаются, всегда будут иметь свойство 0.

ЕфГГГКак ссылаться на сторонние источники?

НульДля быстрого компиляции, система встроена только в небольшое количество библиотек.

Маленькие мечтыНеприветливая, проблема в том, что в группе можно "М" мне - я в основном онлайн.

ЦзибангСпасибо.

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

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

КиринЧтобы получить каждую позицию с помощью position[i], position является матрицей.

Нинг-цзыexchange.GetRecords ((PERIOD_D1));

КиринМой традиционный фьючерс всегда был: "GetAccount: not login", "пароль не ошибся, значит не сможешь войти".

НульПо умолчанию это неделя, для получения указанного требуется SetContractType.

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

Момокс3q

НульНе может быть, они отделены друг от друга.

СюаньшуаньКонечно, нет, это исключительно для MT4.

НульЯвление Javascript есть повсюду в Интернете.

ПродажиВы решили свой вопрос?

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