Dalam bidang perdagangan aset mata wang kripto, mendapatkan dan menganalisis data pasaran, kadar pertanyaan, dan memantau perubahan aset akaun adalah operasi penting. Berikut adalah contoh kod untuk beberapa keperluan biasa.
Dalam menulis program strategi dagangan kuantitatif di FMZ, keperluan yang dihadapi perlu dianalisis terlebih dahulu. Oleh itu, berdasarkan keperluan, kami menganalisis perkara berikut:
GET https://api.binance.com/api/v3/ticker/price
Saya tidak tahu.
Penggunaan antara muka pasaran (antara muka awam tanpa tanda tangan) untuk mengakses bursa di FMZHttpQuery
Fungsi tersebut.涨跌幅百分比 =(当前价格 - 初始价格)/ 初始价格 * 100
, satuan ialah Setelah memikirkan masalah dan menentukan penyelesaian, kami mulakan proses reka bentuk sendiri.
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 = {}
: objek kosong yang digunakan untuk menyimpan maklumat harga bagi setiap pasangan dagangan. Kunci adalah simbol pasangan dagangan, nilai adalah objek yang mengandungi nama pasangan dagangan, susunan data harga, dan maklumat kejatuhan.while (true) {
// ...
}
Program ini terus memantau harga transaksi pada API Binance melalui gelung tanpa henti.var arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))
Mengambil maklumat mengenai harga semasa pasangan dagangan melalui API Binance. Jika yang dikembalikan bukan aritmatika, tunggu 5 saat dan cuba lagi.for (var i = 0; i < arr.length; i++) {
// ...
}
Melalui matriks maklumat harga yang diperoleh, mengemas kini data di dictSymbolsPrice. Untuk setiap pasangan transaksi, senar masa dan harga semasa ditambahkan ke matriks data yang sesuai.} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
Mengambil ketidakselarasan dan merakam maklumat ketidakselarasan untuk memastikan program dapat terus dijalankan.for (var symbol in dictSymbolsPrice) {
// ...
}
Melalui dictSymbolsPrice, mengira penurunan margin untuk setiap pasangan dagangan, dan menghapuskan data terdahulu jika panjang data melebihi 4 jam.var entries = Object.entries(dictSymbolsPrice)
entries.sort((a, b) => b[1].percentageChange - a[1].percentageChange)
for (var i = 0; i < entries.length; i++) {
// ...
}
Mengurutkan pasangan dagangan dari tinggi ke rendah mengikut penurunan kenaikan dan menghasilkan jadual yang mengandungi maklumat mengenai pasangan dagangan.LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(5000)
Mengeksport jadual dan masa semasa dalam bentuk log, dan menunggu 5 saat untuk meneruskan pusingan seterusnya.Program ini memperoleh maklumat harga sebenar dari pasangan dagangan melalui API Binance, kemudian mengira penurunan dan outputnya ke log dalam bentuk jadual. Program ini mempunyai fungsi untuk memantau transaksi terhadap harga secara langsung melalui pelaksanaan berulang. Perlu diingat bahawa program ini mengandungi pemprosesan pengecualian untuk memastikan pelaksanaan tidak terganggu oleh pengecualian semasa mendapatkan maklumat harga.
Oleh kerana data hanya dikumpulkan sedikit demi sedikit pada mulanya, jika tidak dikumpulkan data yang mencukupi selama 4 jam, maka tidak boleh menggulirkan penurunan kenaikan harga. Oleh itu, pada mulanya, harga awal dikira sebagai penanda aras, dan setelah mengumpulkan data yang mencukupi selama 4 jam, data tertua dihapuskan secara berturut-turut untuk mengekalkan tempoh jendela 4 jam.
Perbandingan antara permintaan kadar dana dan kod di atas adalah serupa, pertama sekali anda perlu melihat dokumen API Binance untuk mencari antara muka yang berkaitan dengan kadar dana. Binance mempunyai beberapa antara muka yang boleh meminta kadar dana, di sini kita menggunakan antara muka kontrak U-bit sebagai contoh:
GET https://fapi.binance.com/fapi/v1/premiumIndex
Oleh kerana kontrak terlalu banyak, kami di sini adalah 10 eksport terbesar dengan kadar modal yang tinggi.
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)
}
}
Struktur data yang dikembalikan adalah sebagai berikut, melihat dokumen Binance, anda dapat mengetahui Last Funding Rate adalah kadar dana yang kita mahukan.
{
"symbol":"STMXUSDT",
"markPrice":"0.00883606",
"indexPrice":"0.00883074",
"estimatedSettlePrice":"0.00876933",
"lastFundingRate":"0.00026573",
"interestRate":"0.00005000",
"nextFundingTime":1702828800000,
"time":1702816229000
}
Percubaan berjalan pada cakera sebenar:
Pengguna telah mengemukakan contoh yang memerlukan versi Python, dan ini adalah pertukaran OKX.
https://www.okx.com/priapi/v5/public/funding-rate-all?currencyType=1
Data yang dikembalikan oleh antara muka:
{
"code":"0",
"data":[
{
"fundingTime":1702828800000,
"fundingList":[
{
"instId":"BTC-USDT-SWAP",
"nextFundingRate":"0.0001102188733642",
"minFundingRate":"-0.00375",
"fundingRate":"0.0000821861465884",
"maxFundingRate":"0.00375"
} ...
Kode spesifik:
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)
Percubaan berjalan pada cakera sebenar:
Contoh-contoh ini memberikan idea reka bentuk asas, kaedah panggilan, dan projek sebenar mungkin memerlukan perubahan dan pengembangan yang sesuai mengikut keperluan tertentu. Kami berharap kod ini dapat membantu anda memenuhi lebih baik pelbagai keperluan dalam perdagangan aset digital mata wang kripto.
Pengesanan 98K-band_LongDiharap guru-guru kecil akan membuat contoh perubahan aset akaun @monitoring secepat mungkin.
Pengesanan 98K-band_LongPujian
Pencipta Kuantiti - Impian KecilBaiklah, ini dalam rancangan.