Система обратного тестирования платформы FMZ Quant Trading поддерживает пользовательские источники данных, система обратного тестирования используетGET
метод запроса пользовательского URL (публично доступный URL) для получения внешнего источника данных для бэкстеста. Дополнительные параметры запроса следующие:
Параметр | Значение | Объяснение |
---|---|---|
символ | Имя символа | Данные о спотовом рынке, такие как:BTC_USDT , данные фьючерсного рынка, такие как:BTC_USDT.swap , данные по ставкам финансирования фьючерсных бессрочных контрактов, такие как:BTC_USDT.funding , данные индекса цен фьючерсных контрактов, такие как:BTC_USDT.index |
Еда | Обмены | как OKX, Futures_OKX |
круглый | Точность данных | True означает, что конкретная точность определяется в данных, вводимых пользовательским источником данных.round=true |
Период | Период данных K-линии (миллисекунды) | такие как:60000 это 1-минутный период |
глубина | Уровни глубины | 1-20 |
торговля | Необходимо ли разделять данные | истинное ((1) / ложное ((0) |
от | Время начала | Unix временная метка |
до | Время конца | Unix временная метка |
подробности | Запрос данных для деталей символа | Запрос, отправленный FMZ Quant Trading Platform Backtesting System на пользовательский источник данных, фиксируется как:detail=true |
обычай | – | Этот параметр можно игнорировать. |
При установке источника данных объектов спотовой биржи и фьючерсной биржи на пользовательский источник данных (кормильщик) система обратного тестирования отправляет запрос в службу пользовательского источника данных:
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Bitget&from=1351641600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_OKX&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=1
Формат возврата должен быть одним из следующих двух форматов (который будут автоматически распознаваться системой):
Уровень моделирования Tick, следующий пример данных JSON:
{
"detail": {
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10
},
"schema":["time", "open", "high", "low", "close", "vol"],
"data":[
[1564315200000, 9531300, 9531300, 9497060, 9497060, 787],
[1564316100000, 9495160, 9495160, 9474260, 9489460, 338]
]
}
Отметка уровня бота, ниже приведен пример данных JSON:
Данные обратного теста уровня Tick (содержат информацию о глубине рынка, а формат глубины представляет собой массив[price, volume]
Он может иметь несколько уровней глубины,asks
для ценового восходящего порядка,bids
для понижающегося порядка цен).
{
"detail": {
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10
},
"schema":["time", "asks", "bids", "trades", "close", "vol"],
"data":[
[1564315200000, [[9531300, 10]], [[9531300, 10]], [[1564315200000, 0, 9531300, 10]], 9497060, 787],
[1564316100000, [[9531300, 10]], [[9531300, 10]], [[1564316100000, 0, 9531300, 10]], 9497060, 787]
]
}
Поле | Описание |
---|---|
подробности | Подробная информация о запрашиваемом типе данных, |
включая наименование деноминированной валюты, наименование валюту, точность, минимальное количество заказов и т.д. Схема. Она определяет атрибуты столбцов в данных. массив, который чувствителен к буквам и ограничен временем, открыт, высокий, низкий, закрытый, объем, просьбы, предложения, сделки Данные. Структура столбца, записанные данные согласно схеме. настройки.
Детальное поле
Поле | Описание |
---|---|
Еда | Exchange Id, пожалуйста, обратите внимание, что спот и фьючерсы |
Некоторые обмены имеют разные эффекты. | |
символ | Код торгового продукта |
псевдоним | Символ в обмене соответствует текущему |
код торгового продукта | |
Базовая Валюта | Валюта торговли |
котировкаВалюта | В денежной форме |
маржа Валюта | Валюта маржи |
БазаПрецизия | Точность валюты транзакции |
ЦитатаПрецизия | Точность ценообразования валюты |
minQty | Минимальное количество заказов |
maxQty | Максимальное количество заказа |
Минимальная | Минимальная сумма заказа |
maxНоциональный | Максимальная сумма заказа |
ценыTick | Скачок цен |
объемЗаметка | Минимальное значение изменения количества заказа (один скачок в |
количество заказов) | |
Маржинальный уровень | Фьючерсы |
контракт Тип | Для бессрочных контрактов, установленных на:swap , |
Система backtest будет продолжать отправлять процент финансирования и индекс цен просьбы.
Специальные атрибуты столбцовasks
, bids
, trades
:
Поле | Описание | Примечания |
---|---|---|
просьбы / предложения | [цена, объем],...] | Например, данные в |
- Да.Live Trading Level Tick
Пример данных:[[9531300, 10]]
Ѕыло бы здорово. Ѕыло бы здорово.
∙∙∙Торговля ∙∙∙ Время, направление, цена, объем ∙∙∙
Например, данные вLive Trading Level Tick
Пример данных:[[1564315200000, 0, 9531300, 10]]
|
При обратном тестировании вечных контрактов на фьючерсных биржах, пользовательские
источники данных также требуют дополнительных данных о ставках финансирования и цене
Система обратного тестирования будет продолжать отправлять запросы
для ставок финансирования только при возврате запрашиваемых рыночных данных
и поле деталей в возвращенной структуре содержит"contractType": "swap"
пара ключевых значений.
Когда система обратного тестирования получает данные о процентах финансирования, она будет продолжать отправлять запросы на данные о индексе цен.
Структура данных по ставкам финансирования выглядит следующим образом:
{
"detail": {
"eid": "Futures_Binance",
"symbol": "BTC_USDT.funding",
"alias": "BTC_USDT.funding",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "",
"basePrecision": 8,
"quotePrecision": 8,
"minQty": 1,
"maxQty": 10000,
"minNotional": 1,
"maxNotional": 100000000,
"priceTick": 1e-8,
"volumeTick": 1e-8,
"marginLevel": 10
},
"schema": [
"time",
"open",
"high",
"low",
"close",
"vol"
],
"data": [
[
1584921600000,
-16795,
-16795,
-16795,
-16795,
0
],
[
1584950400000,
-16294,
-16294,
-16294,
-16294,
0
]
// ...
]
}
Пример запроса на данные по ставке финансирования из обратного тестирования Система:
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.funding&to=1611244800&trades=0
Структура данных по индексу цен выглядит следующим образом:
{
"detail": {
"eid": "Futures_Binance",
"symbol": "BTC_USDT.index",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"contractType": "index",
"marginCurrency": "USDT",
"basePrecision": 3,
"quotePrecision": 1,
"minQty": 0.001,
"maxQty": 1000,
"minNotional": 0,
"maxNotional": 1.7976931348623157e+308,
"priceTick": 0.1,
"volumeTick": 0.001,
"marginLevel": 10,
"volumeMultiple": 1
},
"schema": [
"time",
"open",
"high",
"low",
"close",
"vol"
],
"data": [
[1584921600000, 58172, 59167, 56902, 58962, 0],
[1584922500000, 58975, 59428, 58581, 59154, 0],
// ...
]
}
Пример запроса данных о индексе цен, отправленного с помощью обратного тестирования Система:
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.index&to=1611244800&trades=0
Укажите адрес источника данных, например,http://120.24.2.20: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
// request: GET http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=OKX&from=1584921600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
// http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1599958800&period=3600000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=0
fmt.Println("request:", r)
// response
defer func() {
// response data
/* e.g. data
{
"detail": {
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10
},
"schema": [
"time",
"open",
"high",
"low",
"close",
"vol"
],
"data": [
[1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151],
[1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738],
[1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875],
[1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777],
[1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292],
[1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666],
[1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405],
[1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768],
[1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797],
[1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692]
]
}
*/
// /* Simulation level Tick
ret := map[string]interface{}{
"detail": map[string]interface{}{
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10,
},
"schema": []string{"time","open","high","low","close","vol"},
"data": []interface{}{
[]int64{1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151}, // 1610755200000 : 2021-01-16 08:00:00
[]int64{1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738}, // 1610841600000 : 2021-01-17 08:00:00
[]int64{1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875},
[]int64{1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777},
[]int64{1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292},
[]int64{1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666},
[]int64{1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405},
[]int64{1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768},
[]int64{1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797},
[]int64{1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692},
},
}
// */
/* Bot level Tick
ret := map[string]interface{}{
"detail": map[string]interface{}{
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10,
},
"schema": []string{"time", "asks", "bids", "trades", "close", "vol"},
"data": []interface{}{
[]interface{}{1610755200000, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{1610755200000, 0, 9531300, 10}}, 9497060, 787},
[]interface{}{1610841600000, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{1610841600000, 0, 9531300, 11}}, 9497061, 789},
},
}
*/
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: 2021-01-16 08:00:00
end: 2021-01-22 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
args: [["number",2]]
*/
function main() {
var ticker = exchange.GetTicker()
var records = exchange.GetRecords()
Log(exchange.GetName(), exchange.GetCurrency())
Log(ticker)
Log(records)
}
Сохранить настройки обратного тестирования
Местный двигатель обратного теста