avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

ایف ایم زیڈ کوانٹیفیکیشن: کرپٹو کرنسی مارکیٹ (I) میں کامن ڈیمانڈ ڈیزائن کی مثالوں کا تجزیہ

میں تخلیق کیا: 2023-12-17 18:43:46, تازہ کاری: 2024-11-06 21:18:36
comments   3
hits   1811

ایف ایم زیڈ کوانٹیفیکیشن: کرپٹو کرنسی مارکیٹ (I) میں کامن ڈیمانڈ ڈیزائن کی مثالوں کا تجزیہ

کریپٹو کرنسی اثاثہ جات کی تجارت کے میدان میں، مارکیٹ کے ڈیٹا کو حاصل کرنا اور اس کا تجزیہ کرنا، شرحوں کی جانچ کرنا، اور اکاؤنٹ کے اثاثوں کی تبدیلیوں کی نگرانی کرنا سبھی اہم کام ہیں۔ کچھ عام تقاضوں کو نافذ کرنے کے لیے درج ذیل کوڈ کی مثالیں ہیں۔

1. میں 4 گھنٹے کے اندر بائنانس اسپاٹ میں سب سے زیادہ اضافے کے ساتھ کرنسی حاصل کرنے کے لیے کوڈ کیسے لکھوں؟

FMZ پر ایک مقداری تجارتی حکمت عملی پروگرام لکھتے وقت، آپ کو پہلے ضروریات کا تجزیہ کرنے کی ضرورت ہوتی ہے۔ لہذا ضروریات کے مطابق، ہم مندرجہ ذیل نکات کا تجزیہ کرتے ہیں:

  • ڈیزائن لکھنے کے لیے کون سی پروگرامنگ زبان استعمال کی جاتی ہے۔ جاوا اسکرپٹ کا استعمال کرتے ہوئے منصوبہ بند عمل درآمد۔
  • تمام کرنسیوں کے لیے ریئل ٹائم اسپاٹ مارکیٹ ڈیٹا کی ضرورت ہے۔ جب ہم نے اس ضرورت کو دیکھا، تو ہم نے سب سے پہلے Binance کے API دستاویزات کو دیکھنا تھا تاکہ یہ معلوم کیا جا سکے کہ آیا کوئی مجموعی مارکیٹ ڈیٹا موجود ہے یا نہیں (مجموعی مارکیٹ ڈیٹا بہترین ہوگا، کیونکہ ہر ایک پروڈکٹ کو ایک ایک کرکے چیک کرنا وقت طلب اور محنت طلب ہوگا۔ ایک)۔ مجموعی مارکیٹ کی معلومات کے انٹرفیس سے استفسار کریں:GET https://api.binance.com/api/v3/ticker/price。 FMZ پر، ایکسچینج کوٹیشن انٹرفیس (عوامی انٹرفیس جس پر دستخط کی ضرورت نہیں ہے) تک رسائی حاصل کریں۔HttpQueryفنکشن
  • 4 گھنٹے کی رولنگ ونڈو پیریڈ کے ڈیٹا کو گننے کی ضرورت ہے۔ اس شماریاتی پروگرام کی ساخت کے بارے میں سوچیں۔
  • عروج و زوال کا حساب لگائیں، ترتیب دیں۔ عروج و زوال کے الگورتھم کے بارے میں سوچیں، کیا یہ ہے:涨跌幅百分比 =(当前价格 - 初始价格)/ 初始价格 * 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)
    }
}

کوڈ کا تجزیہ

  • 1. ڈیٹا کا ڈھانچہ var dictSymbolsPrice = {}: ایک خالی چیز جو ہر تجارتی جوڑے کے لیے قیمت کی معلومات ذخیرہ کرنے کے لیے استعمال ہوتی ہے۔ کلید تجارتی جوڑے کی علامت ہے، اور قدر ایک ایسی چیز ہے جس میں تجارتی جوڑے کا نام، قیمت کے اعداد و شمار کی ایک صف، اور معلومات کی تبدیلی ہوتی ہے۔

    1. مین فنکشن مین ()
    • 2.1 لامحدود لوپ
    while (true) {
        // ...
    }
    

    یہ پروگرام ایک لامحدود لوپ کے ذریعے Binance API کی تجارتی جوڑی کی قیمتوں کی مسلسل نگرانی کرتا ہے۔

    • 2.2 قیمت کی معلومات حاصل کریں۔
    var arr = JSON.parse(HttpQuery("https://api.binance.com/api/v3/ticker/price"))
    

    Binance 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) {
        // ...
    }
    

    ڈیکٹ سمبولس پرائس کو عبور کریں، ہر تجارتی جوڑے کے اضافے یا کمی کا حساب لگائیں، اور اگر ڈیٹا کی لمبائی 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 سیکنڈ تک انتظار کریں۔

یہ پروگرام Binance API کے ذریعے تجارتی جوڑے کی اصل وقت کی قیمت کی معلومات حاصل کرتا ہے، پھر اضافہ یا کمی کا حساب لگاتا ہے اور اسے ٹیبل کی شکل میں لاگ میں آؤٹ پٹ کرتا ہے۔ لین دین کے جوڑے کی قیمتوں کی اصل وقتی نگرانی کے فنکشن کو حاصل کرنے کے لیے پروگرام کو ایک مسلسل لوپ میں انجام دیا جاتا ہے۔ واضح رہے کہ پروگرام میں استثنیٰ ہینڈلنگ شامل ہے تاکہ اس بات کو یقینی بنایا جا سکے کہ قیمت کی معلومات حاصل کرتے وقت مستثنیات کی وجہ سے عملدرآمد میں رکاوٹ نہ آئے۔

اصلی ڈسک آپریشن ٹیسٹ

ایف ایم زیڈ کوانٹیفیکیشن: کرپٹو کرنسی مارکیٹ (I) میں کامن ڈیمانڈ ڈیزائن کی مثالوں کا تجزیہ

چونکہ شروع میں صرف تھوڑا سا ڈیٹا اکٹھا کیا جا سکتا ہے، اس لیے اگر 4 گھنٹے کے لیے کافی ڈیٹا اکٹھا نہ کیا گیا ہو تو اسے رولنگ کی بنیاد پر عروج و زوال کا حساب لگانا ناممکن ہے۔ اس لیے، شروع میں، ابتدائی قیمت کو حساب کے لیے معیار کے طور پر استعمال کیا جاتا ہے، 4 گھنٹے کے لیے کافی ڈیٹا اکٹھا کرنے کے بعد، عروج اور زوال کے حساب کے لیے 4 گھنٹے کی کھڑکی کی مدت کو برقرار رکھنے کے لیے ایک ایک کرکے سب سے قدیم ڈیٹا کو ختم کیا جاتا ہے۔

2. تمام Binance U- مارجن فیوچر معاہدوں کی فنڈنگ ​​کی شرح چیک کریں۔

فنڈنگ ​​کی شرح کے بارے میں پوچھنا اوپر والے کوڈ سے ملتا جلتا ہے، پہلے آپ کو فنڈنگ ​​کی شرح سے متعلق انٹرفیس تلاش کرنے کے لیے Binance کے API دستاویزات کو چیک کرنے کی ضرورت ہے۔ بائننس کے پاس فنڈنگ ​​کی شرح کے بارے میں پوچھ گچھ کے لیے کئی انٹرفیس ہیں یہاں ہم مثال کے طور پر U-based معاہدوں کا انٹرفیس لیتے ہیں۔

GET https://fapi.binance.com/fapi/v1/premiumIndex

کوڈ کا نفاذ

چونکہ بہت سارے معاہدے ہیں، ہم یہاں سب سے زیادہ فنڈنگ ​​کی شرحوں کے ساتھ ٹاپ ٹین کو آؤٹ پٹ کرتے ہیں۔

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 وہ فنڈنگ ​​ریٹ ہے جو ہم چاہتے ہیں۔

{
    "symbol":"STMXUSDT",
    "markPrice":"0.00883606",
    "indexPrice":"0.00883074",
    "estimatedSettlePrice":"0.00876933",
    "lastFundingRate":"0.00026573",
    "interestRate":"0.00005000",
    "nextFundingTime":1702828800000,
    "time":1702816229000
}

اصلی ڈسک آپریشن ٹیسٹ:

ایف ایم زیڈ کوانٹیفیکیشن: کرپٹو کرنسی مارکیٹ (I) میں کامن ڈیمانڈ ڈیزائن کی مثالوں کا تجزیہ

OKX ایکسچینج کنٹریکٹ فنڈنگ ​​ریٹ حاصل کرنے کا ازگر کا ورژن

ایک صارف نے بتایا کہ ایک ازگر ورژن کی ضرورت ہے، اور یہ 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)

اصلی ڈسک آپریشن ٹیسٹ:

ایف ایم زیڈ کوانٹیفیکیشن: کرپٹو کرنسی مارکیٹ (I) میں کامن ڈیمانڈ ڈیزائن کی مثالوں کا تجزیہ

END

یہ مثالیں بنیادی ڈیزائن آئیڈیاز اور کال کرنے کے طریقے فراہم کرتی ہیں، اصل پروجیکٹس میں، مخصوص ضروریات کی بنیاد پر مناسب ترمیم اور توسیع کی ضرورت ہو سکتی ہے۔ مجھے امید ہے کہ یہ کوڈز آپ کو cryptocurrency ڈیجیٹل اثاثہ جات کی تجارت میں مختلف ضروریات کو بہتر طریقے سے پورا کرنے میں مدد کر سکتے ہیں۔