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

Источник данных по назначению

Система обратного тестирования платформы 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
        ]
        // ...
    ]
}
  • Интервал между соседними периодами составляет 8 часов.
  • Например, курс финансирования Binance обновляется каждые 8 часов. Данные по ставке финансирования -16795? Поскольку, как и данные K-линии, для того, чтобы избежать потери точности плавающей запятой во время сетевой передачи, данные используют тип целого числа; данные по ставке финансирования также могут быть отрицательными.

Пример запроса на данные по ставке финансирования из обратного тестирования Система:

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)
}
Сохранить настройки обратного тестирования Местный двигатель обратного теста