Реализовать простой бот контроля за заказами криптовалютного спота

Автор:Нинабадасс., Создано: 2021-04-11 11:54:34, Обновлено: 2021-04-11 11:55:08

Реализовать простой бот контроля за заказами криптовалютного спота

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

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

  • Референтный счет: контролируемый счет, каждое действие которого контролируется.
  • Счет надзора за заказами: счет надзора за заказами; когда на эталонном счете действует действие, то тот же действие будет выполняться на счете надзора за заказами.

После того, как это требование было сначала прояснено, мы продолжаем думать о следующем шаге.

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

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

Кодовое описание стратегии логики выше:

        // detect order supervising
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)  // detect the currency amount changes 
        var func = null 
        if (amount > 0) {   // the amount increased 
            func = $.Buy    // buy
        } else if (amount < 0) {  // the amount decreased 
            func = $.Sell         // sell 
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // when i equals 0, it indicates the reference platform, not to be processed; process other order supervising platforms 
            func(exchanges[i], Math.abs(amount))          // execute the specified trading function, and it could be $.Buy or $.Sell, which needs to be determined by observing whether amount is larger than 0 or less than 0
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc                                  // update the latest account information of the reference platform, to compare it with the next one 

Основной логикой обнаружения стратегии является вышеуказанный код. Для упрощения дизайна стратегия использует официальный шаблон FMZ [Digital Currency Trading Library], и$.Buyи$.SellВсе функции шаблона - функция выполнения операций заказа.

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

function test() { 
    // test function 
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
        var x = Math.random()
        if (x > 0.5) {
            $.Buy(exchange, x / 10)    
        } else {
            $.Sell(exchange, x / 10)    
        }        
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "no platform of order supervising"
    }
    var exName = exchange.GetName()
    // detect the reference platform 
    if (exName.includes("Futures_")) {
        throw "only support sport order supervising"
    }
    Log("start monitoring", exName, "platform", "#FF0000")
    
    // detect the order supervising platforms 
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "Do not support the order supervising of futures platfroms"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // test function
           test()  
        }  
        Sleep(5000)
        
        // update the current information of the reference account 
        var nowAcc = _C(exchange.GetAccount)
        
        // the account information of the reference platform
        var refTbl = {
            type : "table", 
            title : "reference platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // the account information of the order supervising platform
        var followTbl = {
            type : "table", 
            title : "order supervising platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []        
        }
        for (var i = 1 ; i < exchanges.length ; i++) {
            var acc = _C(exchanges[i].GetAccount)
            var name = exchanges[i].GetName()
            followTbl.rows.push([name, acc.Stocks, acc.FrozenStocks, acc.Balance, acc.FrozenBalance])
        }
        
        // status bar display 
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // detect order supervising 
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)
        var func = null 
        if (amount > 0) {
            func = $.Buy
        } else if (amount < 0) {
            func = $.Sell
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc
    }
}

Давайте попробуем это на реальном боте, на платформе моделирования FMZ wexApp для тестирования. Здесь я добавил три учетных записей wexApp, все из которых являются независимыми учетными записями. Один из них служит справочной платформой, а два других служат платформами контроля за заказами.

img

Затем мы вручную разместили заказ через торговый терминал FMZ, чтобы увидеть, может ли бот автоматически контролировать заказ.

img

Вы можете видеть, что бот обнаружил торговлю и выполнил операцию контроля за заказами.

img

Полная стратегия:https://www.fmz.com/strategy/255182

Если у вас есть какие-либо вопросы, мы будем благодарны, если вы оставите комментарии по этому поводу.


Больше