암호 화폐 스팟의 간단한 주문 감독 봇을 실현

저자:니나바다스, 창작: 2022-04-11 11:54:34, 업데이트: 2022-04-11 11:55:08

암호 화폐 스팟의 간단한 주문 감독 봇을 실현

암호화폐 서클의 많은 친구들이 주문 감독 봇이 필요하지만, 그들은 기본이 0일 때 프로그래밍 디자인에 착수하는 데 오랜 시간이 걸리므로 고통 받고 있습니다. 그러한 필요에 따라 이 기사에서는 간단한 스팟 주문 감독 봇을 설계하여 기본이 0일지 않은 친구들에게 프로그램 거래를 배우도록 도울 것입니다.

우선, 요구 사항을 분석해 봅시다. 이 봇의 기능은 계정이 구매 또는 판매 작업을 할 때, 다른 계정 감독 계정도 따라와 작업을 실행한다는 것을 깨닫는 것입니다. 먼저 두 가지 주제를 정의합니다.

  • 기준계산: 각 행위가 모니터링되는 감시계산.
  • 오더 감독 계좌: 오더 감독 계좌. 레퍼런스 계좌가 동작을 할 때, 오더 감독 계좌가 동일한 동작을 수행합니다.

이 요구 사항 이 초기 에 명확 해 지자, 다음 단계 에 대해 계속 생각 합니다. 참조 계정 의 모든 행동 을 어떻게 식별 할 수 있습니까?

참조 계정을 모니터링합니다. 그것은 현금 거래 계정에 매우 간단합니다. 우리는 단지 최신 계정 정보 데이터의 상징 금액과 최신 계정 정보 데이터의 현재 상징 금액을 비교해야합니다. 현재 얻은 최신 계정 정보 데이터의 기호 금액이 이전 기록보다 많으면 참조 계정이 구매 작업을 수행하고 실행이 성공했다는 것을 증명합니다. 반대로 기호 수가 적으면 참조 계정에서 판매 작업이 수행됩니다. 작업을 감지 한 후 다른 플랫폼 계정이 동일한 작업을 수행하도록하십시오.

기준계좌에서 거래가 이루어졌다는 사실이 확인되면, 최신 계정 데이터 레코드를 업데이트하여 다음 번에 얻은 계정 정보와 비교하여 새로운 거래가 있는지 여부를 결정해야 합니다.

위 논리의 전략 코드 설명:

        // 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 [디지털 통화 거래 라이브러리] 템플릿을 사용합니다.$.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

이 전략은 연구용일 뿐입니다. 어떤 질문이 있을 때, 그것에 대해 댓글을 남길 수 있다면 감사할 것입니다.


더 많은