کریپٹو کرنسی اثاثہ جات کی تجارت کے میدان میں، مارکیٹ کے ڈیٹا کو حاصل کرنا اور اس کا تجزیہ کرنا، شرحوں کی جانچ کرنا، اور اکاؤنٹ کے اثاثوں کی تبدیلیوں کی نگرانی کرنا سبھی اہم کام ہیں۔ کچھ عام تقاضوں کو نافذ کرنے کے لیے درج ذیل کوڈ کی مثالیں ہیں۔
1. میں 4 گھنٹے کے اندر بائنانس اسپاٹ میں سب سے زیادہ اضافے کے ساتھ کرنسی حاصل کرنے کے لیے کوڈ کیسے لکھوں؟
FMZ پر ایک مقداری تجارتی حکمت عملی پروگرام لکھتے وقت، آپ کو پہلے ضروریات کا تجزیہ کرنے کی ضرورت ہوتی ہے۔ لہذا ضروریات کے مطابق، ہم مندرجہ ذیل نکات کا تجزیہ کرتے ہیں:
- ڈیزائن لکھنے کے لیے کون سی پروگرامنگ زبان استعمال کی جاتی ہے۔
جاوا اسکرپٹ کا استعمال کرتے ہوئے منصوبہ بند عمل درآمد۔ - تمام کرنسیوں کے لیے ریئل ٹائم اسپاٹ مارکیٹ ڈیٹا کی ضرورت ہے۔
جب ہم نے اس ضرورت کو دیکھا، تو ہم نے سب سے پہلے Binance کے API دستاویزات کو دیکھنا تھا تاکہ یہ معلوم کیا جا سکے کہ آیا کوئی مجموعی مارکیٹ ڈیٹا موجود ہے یا نہیں (مجموعی مارکیٹ ڈیٹا بہترین ہوگا، کیونکہ ہر ایک پروڈکٹ کو ایک ایک کرکے چیک کرنا وقت طلب اور محنت طلب ہوگا۔ ایک)۔
مجموعی مارکیٹ کی معلومات کے انٹرفیس سے استفسار کریں:GET https://api.binance.com/api/v3/ticker/price。
FMZ پر، ایکسچینج کوٹیشن انٹرفیس (عوامی انٹرفیس جس پر دستخط کی ضرورت نہیں ہے) تک رسائی حاصل کریں۔HttpQueryفنکشن - 4 گھنٹے کی رولنگ ونڈو پیریڈ کے ڈیٹا کو گننے کی ضرورت ہے۔
اس شماریاتی پروگرام کی ساخت کے بارے میں سوچیں۔ - عروج و زوال کا حساب لگائیں، ترتیب دیں۔
عروج و زوال کے الگورتھم کے بارے میں سوچیں، کیا یہ ہے:涨跌幅百分比 =(当前价格 - 初始价格)/ 初始价格 * 100، یونٹ "%" ہے۔
مسئلہ کے بارے میں سوچیں اور حل کا فیصلہ کریں۔ ہم نے پروگرام کو ڈیزائن کرنا شروع کیا۔
کوڈ ڈیزائن
javascript
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 = {}: ایک خالی چیز جو ہر تجارتی جوڑے کے لیے قیمت کی معلومات ذخیرہ کرنے کے لیے استعمال ہوتی ہے۔ کلید تجارتی جوڑے کی علامت ہے، اور قدر ایک ایسی چیز ہے جس میں تجارتی جوڑے کا نام، قیمت کے اعداد و شمار کی ایک صف، اور معلومات کی تبدیلی ہوتی ہے۔
- ڈیٹا کا ڈھانچہ
-
- مین فنکشن مین ()
-
2.1 لامحدود لوپ
javascriptwhile (true) { // ... }یہ پروگرام ایک لامحدود لوپ کے ذریعے Binance API کی تجارتی جوڑی کی قیمتوں کی مسلسل نگرانی کرتا ہے۔
-
2.2 قیمت کی معلومات حاصل کریں۔
javascriptvar arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))Binance API کے ذریعے تجارتی جوڑے کی موجودہ قیمت کی معلومات حاصل کریں۔ اگر واپس کی گئی قدر ایک صف نہیں ہے، تو 5 سیکنڈ انتظار کریں اور دوبارہ کوشش کریں۔
-
2.3 قیمت کا ڈیٹا اپ ڈیٹ کریں۔
javascriptfor (var i = 0; i < arr.length; i++) { // ... }حاصل کردہ قیمت کی معلومات کی صف کو عبور کریں اور dictSymbolsPrice میں ڈیٹا کو اپ ڈیٹ کریں۔ ہر تجارتی جوڑے کے لیے، موجودہ ٹائم اسٹیمپ اور قیمت متعلقہ ڈیٹا اری میں شامل کریں۔
-
2.4 مستثنیٰ ہینڈلنگ
javascript} catch(e) { Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message) }مستثنیات کو پکڑیں اور استثنیٰ کی معلومات ریکارڈ کریں تاکہ یہ یقینی بنایا جا سکے کہ پروگرام پر عمل درآمد جاری رہ سکتا ہے۔
-
2.5 اضافہ یا کمی کا حساب لگائیں۔
javascriptfor (var symbol in dictSymbolsPrice) { // ... }ڈیکٹ سمبولس پرائس کو عبور کریں، ہر تجارتی جوڑے کے اضافے یا کمی کا حساب لگائیں، اور اگر ڈیٹا کی لمبائی 4 گھنٹے سے زیادہ ہو جائے تو ابتدائی ڈیٹا کو حذف کر دیں۔
-
2.6 جدولوں کو ترتیب دینا اور تیار کرنا
javascriptvar entries = Object.entries(dictSymbolsPrice) entries.sort((a, b) => b[1].percentageChange - a[1].percentageChange) for (var i = 0; i < entries.length; i++) { // ... }تجارتی جوڑوں کو اونچائی سے کم کی طرف بڑھنے یا کم کرکے ترتیب دیں، اور تجارتی جوڑے کی معلومات پر مشتمل ایک جدول بنائیں۔
-
2.7 لاگ آؤٹ پٹ اور تاخیر
javascriptLogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`") Sleep(5000)ٹیبل اور موجودہ وقت کو لاگ فارم میں آؤٹ پٹ کریں، اور اگلے سائیکل کو جاری رکھنے سے پہلے 5 سیکنڈ تک انتظار کریں۔
یہ پروگرام Binance API کے ذریعے تجارتی جوڑے کی اصل وقت کی قیمت کی معلومات حاصل کرتا ہے، پھر اضافہ یا کمی کا حساب لگاتا ہے اور اسے ٹیبل کی شکل میں لاگ میں آؤٹ پٹ کرتا ہے۔ لین دین کے جوڑے کی قیمتوں کی اصل وقتی نگرانی کے فنکشن کو حاصل کرنے کے لیے پروگرام کو ایک مسلسل لوپ میں انجام دیا جاتا ہے۔ واضح رہے کہ پروگرام میں استثنیٰ ہینڈلنگ شامل ہے تاکہ اس بات کو یقینی بنایا جا سکے کہ قیمت کی معلومات حاصل کرتے وقت مستثنیات کی وجہ سے عملدرآمد میں رکاوٹ نہ آئے۔
اصلی ڈسک آپریشن ٹیسٹ
چونکہ شروع میں صرف تھوڑا سا ڈیٹا اکٹھا کیا جا سکتا ہے، اس لیے اگر 4 گھنٹے کے لیے کافی ڈیٹا اکٹھا نہ کیا گیا ہو تو اسے رولنگ کی بنیاد پر عروج و زوال کا حساب لگانا ناممکن ہے۔ اس لیے، شروع میں، ابتدائی قیمت کو حساب کے لیے معیار کے طور پر استعمال کیا جاتا ہے، 4 گھنٹے کے لیے کافی ڈیٹا اکٹھا کرنے کے بعد، عروج اور زوال کے حساب کے لیے 4 گھنٹے کی کھڑکی کی مدت کو برقرار رکھنے کے لیے ایک ایک کرکے سب سے قدیم ڈیٹا کو ختم کیا جاتا ہے۔
2. تمام Binance U- مارجن فیوچر معاہدوں کی فنڈنگ کی شرح چیک کریں۔
فنڈنگ کی شرح کے بارے میں پوچھنا اوپر والے کوڈ سے ملتا جلتا ہے، پہلے آپ کو فنڈنگ کی شرح سے متعلق انٹرفیس تلاش کرنے کے لیے Binance کے API دستاویزات کو چیک کرنے کی ضرورت ہے۔ بائننس کے پاس فنڈنگ کی شرح کے بارے میں پوچھ گچھ کے لیے کئی انٹرفیس ہیں یہاں ہم مثال کے طور پر U-based معاہدوں کا انٹرفیس لیتے ہیں۔
GET https://fapi.binance.com/fapi/v1/premiumIndex
کوڈ کا نفاذ
چونکہ بہت سارے معاہدے ہیں، ہم یہاں سب سے زیادہ فنڈنگ کی شرحوں کے ساتھ ٹاپ ٹین کو آؤٹ پٹ کرتے ہیں۔
javascript
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)
}
}
واپس کردہ ڈیٹا کا ڈھانچہ درج ذیل ہے Binance دستاویزات سے، ہم دیکھ سکتے ہیں کہ lastFundingRate وہ فنڈنگ ریٹ ہے جو ہم چاہتے ہیں۔
javascript
{
"symbol":"STMXUSDT",
"markPrice":"0.00883606",
"indexPrice":"0.00883074",
"estimatedSettlePrice":"0.00876933",
"lastFundingRate":"0.00026573",
"interestRate":"0.00005000",
"nextFundingTime":1702828800000,
"time":1702816229000
}
اصلی ڈسک آپریشن ٹیسٹ:
OKX ایکسچینج کنٹریکٹ فنڈنگ ریٹ حاصل کرنے کا ازگر کا ورژن
ایک صارف نے بتایا کہ ایک ازگر ورژن کی ضرورت ہے، اور یہ OKX ایکسچینج سے ہے۔ یہاں بھی طریقہ سے لاگو کیا جاتا ہے:
https://www.okx.com/priapi/v5/public/funding-rate-all?currencyType=1انٹرفیس کے ذریعے واپس کیا گیا ڈیٹا:
python
{
"code":"0",
"data":[
{
"fundingTime":1702828800000,
"fundingList":[
{
"instId":"BTC-USDT-SWAP",
"nextFundingRate":"0.0001102188733642",
"minFundingRate":"-0.00375",
"fundingRate":"0.0000821861465884",
"maxFundingRate":"0.00375"
} ...
مخصوص کوڈ:
python
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)
اصلی ڈسک آپریشن ٹیسٹ:
END
یہ مثالیں بنیادی ڈیزائن آئیڈیاز اور کال کرنے کے طریقے فراہم کرتی ہیں، اصل پروجیکٹس میں، مخصوص ضروریات کی بنیاد پر مناسب ترمیم اور توسیع کی ضرورت ہو سکتی ہے۔ مجھے امید ہے کہ یہ کوڈز آپ کو cryptocurrency ڈیجیٹل اثاثہ جات کی تجارت میں مختلف ضروریات کو بہتر طریقے سے پورا کرنے میں مدد کر سکتے ہیں۔
- 1





