간단한 디지털 화폐 현금 결제 로봇을 구현

저자:작은 꿈, 2021-02-18 16:09:43, 업데이트: 2023-09-26 20:57:30

img

간단한 디지털 화폐 현금 결제 로봇을 구현

동전圈의 많은 친구들은 수동 거래에 로봇을 따라가지만, 0의 기초가 어려운 경우 프로그래밍 설계에 대한 입학이 더 오래 걸립니다. 우리는 이러한 필요에 따라 이 기사를 함께 설계하여 간단한 현장 거래 로봇을 설계하여 0의 기초를 학습하는 동전圈의 친구들에게 도움을줍니다.

먼저 요구사항을 분석해 보겠습니다. 이 로봇의 기능은 하나의 계정에서 거래가 이루어질 때 다른 계정에서 거래가 이루어질 때 그 작업을 수행하는 것입니다. 그래서 우리는 먼저 두 가지 주제를 명확히합니다.

  • 참고 계정: 감시된 계정, 이 계정의 움직임을 감시하십시오.
  • 계정 계정: 계정 계정, 참조 계정에서 동작이 발생하면 계정 계정이 동일한 동작을 수행합니다.

이 필요성은 이미 명확히 밝혀져 있고, 다음 단계로 생각해야 합니다.

참고 계정을 모니터링하는 것은 현금 계정과 매우 간단합니다. 우리는 단지 가장 최근의 계정 정보 데이터의 동전 수와 현재 최신 계정 정보 데이터의 동전 수를 비교하는 것만으로도 가능합니다. 현재 얻은 최신 계정 정보 데이터의 코인 수가 이전 기록보다 많으면 참조 계정이 구매를 한 번 수행하고 구매가 성공했다고 증명합니다. 반대로 코인이 부족하면 참조 계정에 판매를 한 번 수행합니다. 이 동작을 발견한 후 다른 거래소 계정에 동일한 동작을 수행하도록하십시오.

참조 계정이 거래 한 번을 수행한 것을 발견하면, 새로운 거래 활동이 있는지 판단하기 위해 다음으로 얻은 계정 정보와 비교하기 위해 가장 최근의 계정 데이터 레코드를 업데이트해야합니다.

위 논리적인 전략 코드는 다음과 같습니다.

        // 检测跟单
        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
        }
        
        // 执行跟单
        Log("跟单!数量:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // i 等于 0 时,是参考交易所,不处理,处理其它的跟单交易所        
            func(exchanges[i], Math.abs(amount))          // 执行具体的交易函数,可能是$.Buy 或者是 $.Sell ,具体看amount 是大于0,还是小于0
        }
        
        // 执行跟单之后更新参考交易所账户信息记录
        initAcc = nowAcc                                  // 更新参考交易所最近一次的账户信息,用于下次对比

전략의 주요 탐지 논리는 위의 코드이다. 간결한 설계를 위해, 전략은 FMZ의 공식 디지털 통화 거래 라이브러리 템플릿을 사용했다.$.Buy , $.Sell이 템플릿의 함수들은 모두 다음 명령어를 실행하는 함수들입니다.

또한 각 계정의 데이터를 모니터링하기 위해 정책에 상태 표시를 추가합니다. 전체 정책은 다음과 같습니다:

function test() { 
    // 测试函数
    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 "没有跟单的交易所"
    }
    var exName = exchange.GetName()
    // 检测参考交易所
    if (exName.includes("Futures_")) {
        throw "仅支持现货跟单"
    }
    Log("开始监控", exName, "交易所", "#FF0000")
    
    // 检测跟单交易所
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "不支持期货交易所跟单"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // 测试函数
           test()  
        }  
        Sleep(5000)
        
        // 更新参考账户当前的账户信息
        var nowAcc = _C(exchange.GetAccount)
        
        // 参考交易所账户信息
        var refTbl = {
            type : "table", 
            title : "参考交易所",
            cols : ["名称", "币", "冻结币", "钱", "冻结钱"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // 跟单交易所账户信息
        var followTbl = {
            type : "table", 
            title : "跟单交易所",
            cols : ["名称", "币", "冻结币", "钱", "冻结钱"],
            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])
        }
        
        // 状态栏显示
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // 检测跟单
        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
        }
        
        // 执行跟单
        Log("跟单!数量:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // 执行跟单之后更新参考交易所账户信息记录
        initAcc = nowAcc
    }
}

FMZ의 wexApp 모의 거래소를 사용하여 실제 테스트를 해 봅시다. 여기에 세 개의 wexApp 계정을 추가했습니다.

img

그리고 우리는 FMZ의 거래 단말기를 사용하여 다음 주문을 수동으로 처리하고 로봇이 자동으로 주문을 처리하는지 확인합니다.

img

로봇이 거래를 감지하고 순서 작업을 수행하는 것을 볼 수 있습니다.

img

전 전략:https://www.fmz.com/strategy/255182

이 전략은 학습용으로만 사용되며, 질문이 있다면 댓글을 달아주십시오.


관련

더 많은

시아인안녕하세요, 지원할 수 있나요?

시아인안녕하세요, 지원할 수 있나요?

뚱뚱한 새끼을 검출할 수 있나요?

13169222039안녕하세요. 이 동전 위에 있는 사람 번호를 가져오실 수 있는지 궁금합니다.

작은 꿈이 전략은 오픈 소스 코드이며 전략 광장에서 공개되어 FMZ 커뮤니티에서 설치된 튜토리얼을 볼 수 있습니다. 초등 튜토리얼은 교육용으로 기본 사용이 가능합니다.

로트메코인 자체에 지연이 있기 때문에, 아마도 당신의 가격은 그들보다 훨씬 달라질 것입니다.