کریپٹوکرنسی اثاثہ جات کی تجارت کی جگہ میں ، مارکیٹ کے اعداد و شمار کو حاصل کرنا اور تجزیہ کرنا ، استفسار کی شرح ، اور اکاؤنٹ اثاثوں کی نقل و حرکت کی نگرانی کرنا تمام اہم آپریشن ہیں۔ ذیل میں کچھ عام تقاضوں کے لئے نفاذ کی کوڈ مثالیں ہیں۔
ایف ایم زیڈ پلیٹ فارم پر مقداری تجارتی حکمت عملی کا پروگرام لکھتے وقت ، جب آپ کو کسی ضرورت کا سامنا کرنا پڑتا ہے تو آپ کو سب سے پہلے اس کا تجزیہ کرنے کی ضرورت ہوتی ہے۔ لہذا ضروریات کی بنیاد پر ، ہم نے مندرجہ ذیل مواد کا تجزیہ کیا:
GET https://api.binance.com/api/v3/ticker/price
.
FMZ پلیٹ فارم پر، استعمال کریںHttpQuery
ایکسچینج ٹکر انٹرفیس تک رسائی کے لئے فنکشن (عوامی انٹرفیس جس میں دستخط کی ضرورت نہیں ہے) ۔price fluctuations (%) = (current price - initial price) / initial price * 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)
}
// Calculate price fluctuations
var tbl = {
type : "table",
title : "Price fluctuations",
cols : ["trading pair", "current price", "price 4 hours ago", "price fluctuations", "data length", "earliest data time", "latest data time"],
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) {
// ...
}
یہ پروگرام ایک لامحدود لوپ کے ذریعے بائننس API ٹریڈنگ جوڑی کی قیمتوں کی مسلسل نگرانی کرتا ہے۔ ۲.۲ قیمتوں کی معلومات حاصل کریں
var arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))
بائننس API کے ذریعے ٹریڈنگ جوڑی کی موجودہ قیمت کی معلومات حاصل کریں۔ اگر واپسی صف نہیں ہے تو ، 5 سیکنڈ انتظار کریں اور دوبارہ کوشش کریں۔ 2.3۔ قیمتوں کے اعداد و شمار کو اپ ڈیٹ کریں
for (var i = 0; i < arr.length; i++) {
// ...
}
حاصل کردہ قیمت کی معلومات کی صف کے ذریعے تکرار کریں اور dictSymbolsPrice میں ڈیٹا کو اپ ڈیٹ کریں۔ ہر تجارتی جوڑی کے لئے ، موجودہ ٹائم اسٹیمپ اور قیمت کو متعلقہ ڈیٹا صف میں شامل کریں۔ 2.4۔ استثناء کی کارروائی
} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
استثناؤں کو پکڑیں اور استثنا کی معلومات کو لاگ کریں تاکہ پروگرام کو چلانے کے لئے یقینی بنایا جا سکے. 2.5۔ قیمتوں میں اتار چڑھاؤ کا حساب لگائیں
for (var symbol in dictSymbolsPrice) {
// ...
}
dictSymbolsPrice کے ذریعے تکرار کریں، ہر ٹریڈنگ جوڑی کی قیمت میں اتار چڑھاؤ کا حساب لگائیں، اور اگر یہ 4 گھنٹے سے زیادہ ہے تو سب سے پہلے ڈیٹا کو ہٹا دیں. 2.6۔ ٹیبلز کو ترتیب دیں اور بنائیں
var entries = Object.entries(dictSymbolsPrice)
entries.sort((a, b) => b[1].percentageChange - a[1].percentageChange)
for (var i = 0; i < entries.length; i++) {
// ...
}
ٹریڈنگ کے جوڑوں کو ان کی قیمتوں میں اتار چڑھاؤ کے سلسلے میں ترتیب دیں اور ٹریڈنگ کے جوڑوں کے بارے میں معلومات پر مشتمل ایک ٹیبل بنائیں۔ 2.7۔ لاگ آؤٹ پٹ اور تاخیر
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(5000)
ٹیبل اور موجودہ وقت کو ایک لاگ ان کی شکل میں آؤٹ پٹ کریں اور لوپ کے اگلے راؤنڈ کو جاری رکھنے کے لئے 5 سیکنڈ انتظار کریں.
یہ پروگرام بائننس API کے ذریعے ٹریڈنگ جوڑی کی ریئل ٹائم قیمت کی معلومات حاصل کرتا ہے ، پھر قیمت کی اتار چڑھاؤ کا حساب لگاتا ہے ، اور اسے ٹیبل کی شکل میں لاگ ان کرتا ہے۔ یہ پروگرام ٹریڈنگ جوڑوں کی قیمتوں کی ریئل ٹائم مانیٹرنگ کے فنکشن کو سمجھنے کے لئے مسلسل لوپ میں چلتا ہے۔ نوٹ کریں کہ اس پروگرام میں استثناء پروسیسنگ شامل ہے تاکہ اس بات کو یقینی بنایا جاسکے کہ قیمت کی معلومات حاصل کرتے وقت استثناء کی وجہ سے عملدرآمد میں خلل نہیں پڑتا ہے۔
چونکہ اعداد و شمار کو شروع میں صرف تھوڑا سا جمع کیا جاسکتا ہے ، لہذا 4 گھنٹے کی ونڈو کے لئے کافی اعداد و شمار جمع کیے بغیر قیمتوں میں اتار چڑھاؤ کا حساب لگانا ممکن نہیں ہے۔ لہذا ، ابتدائی قیمت کو حساب کتاب کے لئے بنیاد کے طور پر استعمال کیا جاتا ہے ، اور 4 گھنٹوں کے لئے کافی اعداد و شمار جمع کرنے کے بعد ، قیمتوں میں اتار چڑھاؤ کے حساب کتاب کے لئے 4 گھنٹے کی ونڈو کو برقرار رکھنے کے لئے سب سے پرانے اعداد و شمار کو ختم کردیا جائے گا۔
فنڈنگ کی شرح کی جانچ کرنا مذکورہ کوڈ کی طرح ہے ، سب سے پہلے ، ہمیں فنڈنگ کی شرح سے متعلق انٹرفیس تلاش کرنے کے لئے بائننس API دستاویزات کی جانچ پڑتال کرنے کی ضرورت ہے۔ بائننس کے پاس متعدد انٹرفیس ہیں جو ہمیں فنڈز کی شرح سے استفسار کرنے کی اجازت دیتے ہیں ، یہاں ہم مثال کے طور پر یو میں درج معاہدے کے انٹرفیس کو لیتے ہیں:
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: "Top 10 funding rates for U-denominated contracts",
cols: ["contracts", "funding rate", "marked price", "index price", "current rate time", "next rate time"],
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)
}
}
واپسی کے اعداد و شمار کی ساخت مندرجہ ذیل ہے، اور بائننس دستاویزات کو چیک کریں، یہ ظاہر کرتا ہے کہ آخری فنڈنگ کی شرح فنڈنگ کی شرح ہے جو ہم چاہتے ہیں.
{
"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": "Top 10 funding rates for U-denominated contracts",
"cols": ["contracts", "next rate", "minimum", "current", "maximum"],
"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)
لائیو ٹریڈنگ رننگ ٹیسٹ:
یہ مثالیں بنیادی ڈیزائن کے خیالات اور کال کرنے کے طریقوں کو فراہم کرتی ہیں ، اصل منصوبے کو مخصوص ضروریات کی بنیاد پر مناسب تبدیلیاں اور توسیع کرنے کی ضرورت پڑسکتی ہے۔ امید ہے کہ ، یہ کوڈز آپ کو کریپٹوکرنسی ڈیجیٹل اثاثوں کی تجارت میں مختلف ضروریات کو بہتر طور پر پورا کرنے میں مدد کرسکتے ہیں۔