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

مصنف:چھوٹا سا خواب, تخلیق: 2023-12-17 18:43:46, تازہ کاری: 2023-12-18 09:46:16

img

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

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

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

  • ڈیزائن کس پروگرامنگ زبان میں لکھا گیا ہے یہ منصوبہ جاوا اسکرپٹ کا استعمال کرتے ہوئے کیا جائے گا۔
  • تمام کرنسیوں کے لئے حقیقی وقت کی کرنسی ڈیٹا کی ضرورت ہے اس ضرورت کو دیکھتے ہوئے ، ہماری پہلی چیز یہ ہے کہ بائن آن کے API دستاویزات کو دیکھیں اور دیکھیں کہ کیا انضمام مارکیٹ کے اعداد و شمار موجود ہیں؟ (مجموعی مارکیٹیں بہترین ہیں ، ایک قسم کے لئے ایک قسم کی جانچ پڑتال) ۔ ایک دوسرے کے ساتھ مل کر کام کرنے کے لئے، آپ کو ایک دوسرے کے ساتھ مل کر کام کرنے کی ضرورت ہے.GET https://api.binance.com/api/v3/ticker/price◄ ایف ایم زیڈ پر ، ایکسچینج مارکیٹ انٹرفیس (پبلک انٹرفیس جس میں دستخط کی ضرورت نہیں ہے) تک رسائی حاصل کریں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)
    }
}

کوڈ تجزیہ

    1. اعداد و شمار کی ساختvar dictSymbolsPrice = {}: ایک خالی شے جو ہر ٹریڈنگ جوڑی کے لئے قیمت کی معلومات کو ذخیرہ کرنے کے لئے استعمال ہوتی ہے۔ کلید ٹریڈنگ جوڑی کی علامت ہے ، قدر ایک شے ہے جس میں ٹریڈنگ جوڑی کا نام ، قیمت کے اعداد و شمار کی صفیں اور گرنے کی معلومات شامل ہیں۔
    1. اہم فنکشن main ((()
    • 2.1. لامحدود گردش
      while (true) {
          // ...
      }
      
      یہ پروگرام ایک لامحدود لوپ کے ذریعے بائننس API کی قیمتوں کی مسلسل نگرانی کرتا ہے۔
    • 2.2 قیمتوں کے بارے میں معلومات حاصل کریں
      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) {
          // ...
      }
      
      ہر ٹریڈنگ جوڑی کے لئے ڈکٹ علامتوں کی قیمتوں کا حساب لگائیں اور اگر اعداد و شمار کی لمبائی 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 کے ذریعے ٹرانزیکشن جوڑی کی حقیقی وقت کی قیمت کی معلومات حاصل کرتا ہے، پھر گرنے کا حساب لگاتا ہے، اور اسے جدول کی شکل میں لاگ ان کرتا ہے۔ یہ پروگرام مسلسل لوپ پر عملدرآمد کے ذریعے ٹرانزیکشن کی قیمتوں پر حقیقی وقت کی نگرانی کی سہولت فراہم کرتا ہے۔ یہ نوٹ کرنا ضروری ہے کہ پروگرام میں غیر معمولی عملدرآمد شامل ہے تاکہ یہ یقینی بنایا جاسکے کہ قیمت کی معلومات حاصل کرنے کے دوران غیر معمولی طور پر عملدرآمد میں خلل نہیں پڑتا ہے۔

ریئل ڈسک چلانے کی جانچ

img

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

2، بینک آف انڈیا کے تمام قسم کے فنڈز کی شرحوں کے بارے میں معلوم کریں

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

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)
    }
}

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

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

ریئل ڈسک پر ٹیسٹ:

img

پیتھون ورژن کے لئے او کے ایکس ایکس ایکسچینج کے معاہدے کی شرح حاصل کریں

ایک صارف نے ایک مثال پیش کی ہے جس میں پطرون ورژن کی ضرورت ہوتی ہے اور یہ او کے ایکس ایکس ایکسچینج ہے۔

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)

ریئل ڈسک پر ٹیسٹ:

img

اختتام

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


مزید

98K-بگنڈ ٹریکنگ_ لانگہم امید کرتے ہیں کہ استاد چھوٹی خواب جلد از جلد ایک @ مانیٹرنگ اکاؤنٹ اثاثوں کی تبدیلی کا معاملہ نکالیں گے۔

98K-بگنڈ ٹریکنگ_ لانگتعریف

چھوٹا سا خواباچھا، یہ منصوبہ بندی میں ہے۔