암호화폐 자산 거래 분야에서 시장 데이터, 쿼리 요금, 그리고 계정 자산 변화 모니터링을 획득하고 분석하는 것이 핵심적인 작업이다. 다음은 몇 가지 일반적인 요구를 구현하는 방법의 코드 사례이다.
FMZ에서 양적 거래 전략 프로그램을 작성할 때, 요구사항을 먼저 분석해야 합니다. 따라서 요구사항에 따라 다음을 분석합니다.
GET https://api.binance.com/api/v3/ticker/price
ᅳ
FMZ에서 거래소의 거래 인터페이스 (신명 없이 공개된 인터페이스) 를 사용HttpQuery
이 함수들은涨跌幅百分比 =(当前价格 - 初始价格)/ 初始价格 * 100
이 단위는 우리는 문제를 명확히 생각하고 해결책을 결정한 후, 직접 설계 절차를 진행합니다.
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 = {}
: 각 거래 쌍의 가격 정보를 저장하는 빈 객체. 키는 거래 쌍의 기호이며, 값은 거래 쌍의 이름, 가격 데이터 배열 및 유동 부진 정보를 포함하는 객체이다.while (true) {
// ...
}
이 프로그램은 무한한 루프를 통해 Binance API의 거래 대 가격을 지속적으로 모니터링합니다.var arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))
바이낸스 API를 통해 거래 쌍의 현재 가격 정보를 얻습니다. 배열이 아닌 경우 5초 후에 다시 시도하십시오.for (var i = 0; i < arr.length; i++) {
// ...
}
검색된 가격 정보 배열을 탐색하고, diktsymbolsPrice의 데이터를 업데이트한다. 각 거래 쌍에 대해, 현재 시간대와 가격을 해당 데이터 배열에 추가한다.} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
오류를 캡처하고 오류 정보를 기록하여 프로그램이 계속 실행될 수 있도록 합니다.for (var symbol in dictSymbolsPrice) {
// ...
}
디크트 심볼스 프라이스 (dictSymbolsPrice) 를 탐색하여 각 거래 쌍에 대한 var entries = Object.entries(dictSymbolsPrice)
entries.sort((a, b) => b[1].percentageChange - a[1].percentageChange)
for (var i = 0; i < entries.length; i++) {
// ...
}
트레이드 쌍을 LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(5000)
테이블과 현재 시간을 로그 형태로 출력하고 5초 후에 다음 라운드를 계속합니다.이 프로그램은 Binance API를 통해 거래 쌍에 대한 실시간 가격 정보를 얻고, 그 후 오차를 계산하고, 테이블 형태로 로그에 출력합니다. 이 프로그램은 지속적인 루핑 실행을 통해 거래에 대한 가격의 실시간 모니터링 기능을 구현합니다. 이 프로그램은 가격 정보를 획득하는 동안 이상으로 중단되지 않도록 예외 처리를 포함한다는 점에 유의해야합니다.
초기에는 데이터가 조금씩 수집되기 때문에, 충분한 4시간의 데이터가 수집되지 않을 때, 회전할 수 없는 계산
이 코드는 이보다 더 큰 크기를 가지고 있습니다. 이 코드는 Bitcoin의 API 문서를 참조하여 이 코드에 대한 인터페이스를 찾을 수 있습니다. 이 코드는 U-비트 계약의 인터페이스를 사용하여 이 코드에 대한 인터페이스를 찾을 수 있습니다.
GET https://fapi.binance.com/fapi/v1/premiumIndex
우리는 계약이 너무 많기 때문에 가장 많은 자본을 수출하는 상위 10개국입니다.
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)
}
}
이 자료의 구조는 다음과 같습니다. 이 자료를 살펴보면, Last Funding Rate가 우리가 원하는 기금 비율입니다.
{
"symbol":"STMXUSDT",
"markPrice":"0.00883606",
"indexPrice":"0.00883074",
"estimatedSettlePrice":"0.00876933",
"lastFundingRate":"0.00026573",
"interestRate":"0.00005000",
"nextFundingTime":1702828800000,
"time":1702816229000
}
실제 디스크 실행 테스트:
사용자들은 파이썬 버전이 필요하다는 예를 제시했고, OKX 거래소입니다.
https://www.okx.com/priapi/v5/public/funding-rate-all?currencyType=1
이 인터페이스에서 반환된 데이터는:
{
"code":"0",
"data":[
{
"fundingTime":1702828800000,
"fundingList":[
{
"instId":"BTC-USDT-SWAP",
"nextFundingRate":"0.0001102188733642",
"minFundingRate":"-0.00375",
"fundingRate":"0.0000821861465884",
"maxFundingRate":"0.00375"
} ...
이 문서는
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)
실제 디스크 실행 테스트:
이 예시들은 기본적인 디자인 아이디어와 실제 프로젝트에서 특정 요구에 따라 적절한 수정 및 확장이 필요할 수 있는 호출 방법을 제공합니다. 이 코드가 암호화폐 디지털 자산 거래의 다양한 요구를 더 잘 충족시키는 데 도움이 될 것으로 기대됩니다.
98K-파운드 추적_Long@모니토리언 계정 자산 변화 사례를 조만간 발표할 것을 기대합니다.
98K-파운드 추적_Long찬사를 드립니다.
발명가들의 수량화 - 작은 꿈이 모든 것이 계획에 포함되어 있습니다.