Im Bereich des Handels mit Kryptowährungs-Assets sind die Erfassung und Analyse von Marktdaten, Anfrageraten und die Überwachung von Kontovermögen Änderungen von entscheidender Bedeutung.
Bei der Erstellung einer quantitativen Handelsstrategie auf FMZ müssen die Bedürfnisse zuerst analysiert werden.
GET https://api.binance.com/api/v3/ticker/price
Ich bin nicht derjenige.
Auf der FMZ wird der Markt-Interface (öffentliche Schnittstelle ohne Unterschrift) verwendet, um auf die Börse zuzugreifenHttpQuery
Die Funktion.涨跌幅百分比 =(当前价格 - 初始价格)/ 初始价格 * 100
Die Einheit ist Nach dem Problem und der Lösung beginnen wir mit dem Design.
var dictSymbolsPrice = {}
function main() {
while (true) {
// GET https://api.binance.com/api/v3/ticker/price
try {
var arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))
if (!Array.isArray(arr)) {
Sleep(5000)
continue
}
var ts = new Date().getTime()
for (var i = 0; i < arr.length; i++) {
var symbolPriceInfo = arr[i]
var symbol = symbolPriceInfo.symbol
var price = symbolPriceInfo.price
if (typeof(dictSymbolsPrice[symbol]) == "undefined") {
dictSymbolsPrice[symbol] = {name: symbol, data: []}
}
dictSymbolsPrice[symbol].data.push({ts: ts, price: price})
}
} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
// 计算涨跌幅
var tbl = {
type : "table",
title : "涨跌幅",
cols : ["交易对", "当前价格", "4小时前价格", "涨跌幅", "数据长度", "最早数据时间", "最新数据时间"],
rows : []
}
for (var symbol in dictSymbolsPrice) {
var data = dictSymbolsPrice[symbol].data
if (data[data.length - 1].ts - data[0].ts > 1000 * 60 * 60 * 4) {
dictSymbolsPrice[symbol].data.shift()
}
data = dictSymbolsPrice[symbol].data
dictSymbolsPrice[symbol].percentageChange = (data[data.length - 1].price - data[0].price) / data[0].price * 100
}
var entries = Object.entries(dictSymbolsPrice)
entries.sort((a, b) => b[1].percentageChange - a[1].percentageChange)
for (var i = 0; i < entries.length; i++) {
if (i > 9) {
break
}
var name = entries[i][1].name
var data = entries[i][1].data
var percentageChange = entries[i][1].percentageChange
var currPrice = data[data.length - 1].price
var currTs = _D(data[data.length - 1].ts)
var prePrice = data[0].price
var preTs = _D(data[0].ts)
var dataLen = data.length
tbl.rows.push([name, currPrice, prePrice, percentageChange + "%", dataLen, preTs, currTs])
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(5000)
}
}
var dictSymbolsPrice = {}
: ein leerer Objekt, der Preisinformationen für jedes Transaktionspaar speichert. Die Taste ist das Symbol für das Transaktionspaar, der Wert ist ein Objekt, der den Namen des Transaktionspaares, die Preisdatenarchitektur und die Abwärtstrendinformationen enthält.while (true) {
// ...
}
Der Prozess überwacht die Preise von Transaktionen in der Binance API in einem endlosen Kreislauf.var arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))
Die Binance API erhält aktuelle Preisinformationen über die Paare. Wenn keine Array zurückgegeben wird, warten Sie 5 Sekunden und versuchen Sie es erneut.for (var i = 0; i < arr.length; i++) {
// ...
}
Durchsuchen Sie die erhaltenen Preisinformationsarchive und aktualisieren Sie die Daten in dictSymbolsPrice. Für jedes Transaktionspaar werden die aktuellen Zeitfenster und Preise in die entsprechende Datarchive hinzugefügt.} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
Er fängt Abweichungen ein und zeichnet Abweichungsmeldungen auf, um sicherzustellen, dass das Programm weiter ausgeführt werden kann.for (var symbol in dictSymbolsPrice) {
// ...
}
Durchsuchen Sie die DictSymbolsPrice, berechnen Sie den Kursverfall für jedes Handelspärchen und entfernen Sie die frühesten Daten, wenn die Daten länger als 4 Stunden sind.var entries = Object.entries(dictSymbolsPrice)
entries.sort((a, b) => b[1].percentageChange - a[1].percentageChange)
for (var i = 0; i < entries.length; i++) {
// ...
}
Sie ordnet die Paare von oben nach unten nach dem Fall der Wellen und erzeugt eine Tabelle mit Informationen über die Paare.LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(5000)
Die Tabelle und die aktuelle Zeit werden in Form von Logs ausgeführt, und nach 5 Sekunden wird die nächste Runde fortgesetzt.Das Programm erhält über die Binance API die Echtzeit-Preisinformationen über ein Handelspärchen, berechnet dann die Preisverluste und liefert sie in Tabellenform in das Protokoll. Das Programm ermöglicht die Echtzeit-Überwachung von Preisen durch ständige Loop-Ausführung.
Da die Daten zu Beginn nur an einzelnen Punkten gesammelt werden können, ist es unmöglich, die Steigerung zu berechnen, wenn nicht genug Daten für 4 Stunden gesammelt werden.
Bei der Abfrage von Kapitalraten und dem oben genannten Code ist es ähnlich. Zunächst müssen Sie sich die API-Dokumentation von Binance ansehen, um die Interface zu finden. Binance hat mehrere Interfaces, mit denen Sie die Kapitalrate abfragen können.
GET https://fapi.binance.com/fapi/v1/premiumIndex
Da es zu viele Verträge gibt, sind wir in den Top 10 der Exporte mit den höchsten Kapitalpreisen.
function main() {
while (true) {
// GET https://fapi.binance.com/fapi/v1/premiumIndex
try {
var arr = JSON.parse(HttpQuery("https://fapi.binance.com/fapi/v1/premiumIndex"))
if (!Array.isArray(arr)) {
Sleep(5000)
continue
}
arr.sort((a, b) => parseFloat(b.lastFundingRate) - parseFloat(a.lastFundingRate))
var tbl = {
type: "table",
title: "U本位合约资金费率前十",
cols: ["合约", "资金费率", "标记价格", "指数价格", "当期费率时间", "下期费率时间"],
rows: []
}
for (var i = 0; i < 9; i++) {
var obj = arr[i]
tbl.rows.push([obj.symbol, obj.lastFundingRate, obj.markPrice, obj.indexPrice, _D(obj.time), _D(obj.nextFundingTime)])
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
Sleep(1000 * 10)
}
}
Die Datenstruktur, die zurückgegeben wird, ist wie folgt: Wenn man sich die Binance-Dokumentation anschaut, kann man feststellen, dass die LastFundingRate das ist, was wir wollen.
{
"symbol":"STMXUSDT",
"markPrice":"0.00883606",
"indexPrice":"0.00883074",
"estimatedSettlePrice":"0.00876933",
"lastFundingRate":"0.00026573",
"interestRate":"0.00005000",
"nextFundingTime":1702828800000,
"time":1702816229000
}
Tests auf der Festplatte:
Ein Benutzer stellte ein Beispiel für eine Python-Version vor, und das ist die OKX-Börse.
https://www.okx.com/priapi/v5/public/funding-rate-all?currencyType=1
Die Daten, die die Schnittstelle zurückgibt:
{
"code":"0",
"data":[
{
"fundingTime":1702828800000,
"fundingList":[
{
"instId":"BTC-USDT-SWAP",
"nextFundingRate":"0.0001102188733642",
"minFundingRate":"-0.00375",
"fundingRate":"0.0000821861465884",
"maxFundingRate":"0.00375"
} ...
Der spezifische Code:
import requests
import json
from time import sleep
from datetime import datetime
def main():
while True:
# https://www.okx.com/priapi/v5/public/funding-rate-all?currencyType=1
try:
response = requests.get("https://www.okx.com/priapi/v5/public/funding-rate-all?currencyType=1")
arr = response.json()["data"][0]["fundingList"]
Log(arr)
if not isinstance(arr, list):
sleep(5)
continue
arr.sort(key=lambda x: float(x["fundingRate"]), reverse=True)
tbl = {
"type": "table",
"title": "U本位合约资金费率前十",
"cols": ["合约", "下期费率", "最小", "当期", "最大"],
"rows": []
}
for i in range(min(9, len(arr))):
obj = arr[i]
row = [
obj["instId"],
obj["nextFundingRate"],
obj["minFundingRate"],
obj["fundingRate"],
obj["maxFundingRate"]
]
tbl["rows"].append(row)
LogStatus(_D(), "\n", '`' + json.dumps(tbl) + '`')
except Exception as e:
Log(f"Error: {str(e)}")
sleep(10)
Tests auf der Festplatte:
Diese Beispiele liefern grundlegende Design-Ideen, Anwendungsmethoden, die in den tatsächlichen Projekten entsprechend den spezifischen Bedürfnissen angepasst und erweitert werden müssen. Wir hoffen, dass diese Codes Ihnen helfen, die verschiedenen Bedürfnisse bei der Handel mit Kryptowährungen und digitalen Assets besser zu erfüllen.
98-K-Band-Tracking_LongIch hoffe, dass die Lehrerinnen und Lehrer schnellstmöglich einen Fall von Vermögensveränderungen bei @Monitoring Accounts herausfinden.
98-K-Band-Tracking_LongLobpreisen
Die Erfinder quantifizieren - Kleine TräumeDas ist in der Planung.