В процессе загрузки ресурсов... загрузка...

Квалификация FMZ: Анализ примеров дизайна общих потребностей на рынке криптовалют (II)

Автор:Изобретатели количественного измерения - мечты, Создано: 2023-12-24 22:24:58, Обновлено: 2023-12-25 17:10:56

img

Если читатель заметил в предыдущей статье, что требуется пример программы для мониторинга контрактных счетов, то в этом выпуске мы проведем тестирование на бирже Binance, чтобы реализовать эту потребность и вместе научиться проектировать.

Криптовалютные биржи ежедневно обрабатывают большое количество транзакций, включая распределение активов между различными кошельками. Мониторинг этих распределений в режиме реального времени имеет решающее значение для трейдеров и разработчиков. В этой статье мы рассмотрим JavaScript-код, предназначенный для мониторинга последних распределений активов на криптовалютных биржах, и обсудим его ключевые компоненты.

Анализ потребностей

Посмотрев на документацию биржи, мы обнаружили, что существует интерфейс для поиска всей информации о перемещении. Поскольку мы просто отслеживаем возможные записи перемещений, нам не нужно получать всю историю перемещений. Нам нужно только проверять записи перемещений в определенном диапазоне последних периодов в соответствии с определенной частотой.

С помощью этого интерфейса:

// GET /sapi/v1/asset/transfer type, size : 100

После просмотра документации Binance выяснилось, что данные, возвращаемые этим интерфейсом, имеют временные зазоры, и использование временных зазоров очень просто. Если у вас есть запись, большей, чем максимальный временной зазор текущей записи, это означает, что произошло новое перемещение.

/sapi/v1/asset/transferКаждый интерфейс запрашивает не более 100 данных за раз, и это не создает проблем для низкочастотных переключений, если только один из них не закончится, а до следующего аккаунт будет иметь более 100 переключений. В этом случае может быть пропущено несколько новых операционных записей, которые достаточно для сценария общего спроса.

Конечно, есть еще много деталей при фактическом проектировании, например, просмотр документации обнаружил, что есть много направлений пересечения, поэтому мы должны контролировать каждое направление пересечения.var dicType = {...}В этом случае мы будем использовать все возможности, чтобы управлять всеми направлениями.

Для лучшего отображения контента мы использовали таблицу состояния, чтобы вывести информацию о перемещении последних 5 статей в интерфейс политики, поэтому мы построили таблицу под названием:monitorОбъекты, используемые для записи данных. Конечно, вы не можете бесконечно записывать запись перемещения информации, поэтому мы поддерживаем только 100 записей в каждом направлении перемещения, и более 100 записей удаляют преждевременные записи.

Примеры кода

function getRecentTransferHistory(TransType, typeDesc) {
	// GET /sapi/v1/asset/transfer type, size : 100
    
    var rows = null 
    var ret = exchange.IO("api", "GET", "/sapi/v1/asset/transfer", `type=${TransType}&size=100`)
    Log("/sapi/v1/asset/transfer" + `type=${TransType}&size=100`)
    if (ret && typeof(ret.rows) != "undefined" && Array.isArray(ret.rows)) {
        rows = ret.rows
    } else if (ret && typeof(ret.total) != "undefined" && ret.total == 0) {
        rows = []
    } else {
    	Log(TransType, typeDesc, "查询失败", ret)
    }
    
    return rows
}

var monitor = {}
function monitorTransfers() {
    var dicType = {
        "MAIN_UMFUTURE": "现货钱包 --> U本位合约钱包",
        "MAIN_CMFUTURE": "现货钱包 --> 币本位合约钱包",
        "UMFUTURE_MAIN": "U本位合约钱包 --> 现货钱包",
        "UMFUTURE_MARGIN": "U本位合约钱包 --> 杠杆全仓钱包",
        "CMFUTURE_MAIN": "币本位合约钱包 --> 现货钱包",
        "MARGIN_UMFUTURE": "杠杆全仓钱包 --> U本位合约钱包",
        "MARGIN_CMFUTURE": "杠杆全仓钱包 --> 币本位合约钱包",
        "CMFUTURE_MARGIN": "币本位合约钱包 --> 杠杆全仓钱包",
        "FUNDING_UMFUTURE": "资金钱包 --> U本位合约钱包",
        "UMFUTURE_FUNDING": "U本位合约钱包 --> 资金钱包",
        "FUNDING_CMFUTURE": "资金钱包 --> 币本位合约钱包",
        "CMFUTURE_FUNDING": "币本位合约钱包 --> 资金钱包",
        "UMFUTURE_OPTION": "U本位合约钱包 --> 期权钱包",
        "OPTION_UMFUTURE": "期权钱包 --> U本位合约钱包",
        // 统一账户
        "MAIN_PORTFOLIO_MARGIN": "现货钱包 --> 统一账户钱包",
        "PORTFOLIO_MARGIN_MAIN": "统一账户钱包 --> 现货钱包"
    }
    
    Log("开始检测")
    _.each(dicType, function(v, k) {
        var rows = getRecentTransferHistory(k, v)
        var maxTS = 0
        _.each(rows, function(row) {
            if (typeof(monitor[k]) == "undefined") {
            	monitor[k] = {"transType": k, "typeDesc": v, "recentRecords": [], "lastTS": 0}            	
            }

            if (row["timestamp"] > monitor[k]["lastTS"]) {
                monitor[k]["recentRecords"].push(row)
                
                if (monitor[k]["lastTS"] != 0) {
                	Log("检测到新增划转记录", k, v, row, "#FF0000")
                }                
            }
            maxTS = Math.max(maxTS, row["timestamp"])     
        })
        if (rows && rows.length == 0) {
            return 
        }
        monitor[k]["lastTS"] = maxTS

        var sortedArrayAscending = monitor[k]["recentRecords"].slice().sort((a, b) => a.timestamp - b.timestamp)
        monitor[k]["recentRecords"] = sortedArrayAscending

        if (monitor[k]["recentRecords"].length > 100) {
        	monitor[k]["recentRecords"].shift()
        }
        Sleep(1000)
    })
    Log("开始结束")
}


function main() {
    LogReset()
    while (true) {
        monitorTransfers()

        var tbls = []
        _.each(monitor, function(v, k) {
        	var tbl = {
        		"type": "table", 
        		"title": v["typeDesc"], 
        		"cols": ["asset", "amount", "status", "tranId", "time"], 
        		"rows": []
        	}

            var arr = v["recentRecords"].slice().sort((a, b) => b.timestamp - a.timestamp)
            for (var i = 0; i < arr.length; i++) {
            	if (i < 5) {
            		tbl["rows"].push([arr[i]["asset"], arr[i]["amount"], arr[i]["status"], arr[i]["tranId"], _D(arr[i]["timestamp"])])
            	}            	
            }
            tbls.push(tbl)
        })        

    	LogStatus(_D(), "\n", "`" + JSON.stringify(tbls) + "`")
    	Sleep(1000 * 30)
    }
}

Код обзора:

Предложенный код JavaScript состоит из нескольких функций, которые вместе создают систему для мониторинга недавнего распределения активов. Давайте рассмотрим основные компоненты:

  • Функция getRecentTransferHistory:

    Цель: Получить историю последнего пересечения активов из API биржи по указанным параметрам. Параметры: TransType (тип перемещения), typeDesc (тип описания). API-конец: /sapi/v1/asset/transfer.

  • Функция monitorTransfers:

    Цель: просматривать заранее определенные типы перемещений, искать последнюю историю перемещений и записывать любые новые перемещения. Используйте dicType, чтобы отобразить тип перечеркивания в легко читаемые описания. Обновление объекта монитора для отслеживания последнего перемещения каждого типа.

  • Функция main:

    Цель: работать в бесконечном цикле, постоянно контролировать сдвиги и показывать последние данные. Регулярно использует функцию monitorTransfers. Для каждого типа сдвига создается таблица, содержащая активы, суммы, состояние, идентификаторы сделок и временные рамки.

Ключевые черты:

  • Динамическая разметка:

    Код использует dicType, который отображает типы обозначений в описательных названиях, чтобы дать четкие указания на свойства каждого обозначения.

  • Следить за ситуацией в реальном времени:

    Система постоянно проверяет новые переключения, обновляет объекты монитора и фиксирует любые обнаруженные изменения.

  • По данным:

    Используйте таблицы, чтобы представить разделение данных каждого типа, включая соответствующие детали, такие как активы, суммы, состояние, идентификаторы сделок и временные рамки.

  • Недавно перенаправили историю:

    Для каждого типа сохраняется список последних записей, чтобы обеспечить краткое и своевременное отображение.

Тестирование на диске

Ручной сдвиг, и программа обнаруживает сдвиг.

img

img

Окончание:

Предоставляемый код JavaScript предоставляет мощное решение для мониторинга недавнего распределения активов на криптовалютных биржах. Его динамичные и реальные характеристики делают его ценным инструментом для трейдеров и разработчиков, которые хотят узнать о движении активов между различными кошельками. Этот код может быть изменен и настроен в соответствии с конкретными потребностями, предоставляя прочную основу для тех, кто хочет усилить стратегию торговли криптовалютами или разработать дополнительные функции мониторинга.

В этой статье мы предлагаем идеи для дизайна, чтобы ваша криптовалютная карьера была насыщена информацией и успешной!


Больше

98-K-диапазон отслеживания _LongМаленькая мечта учитель - это реалистичная версия Доля А. Маленькая мечта учитель самый жуткий Люблю тебя