O recurso está a ser carregado... Carregamento...

Realizar um robô de contabilidade de caixa de moeda digital simples

Autora:Inventor quantificado - sonho pequeno, Criado: 2021-02-18 16:09:43, Atualizado: 2023-09-26 20:57:30

img

Realizar um robô de contabilidade de caixa de moeda digital simples

Muitos amigos do círculo de moedas que fazem transações manuais precisam de um robô de acompanhamento, mas também precisam de um tempo mais longo para iniciar o projeto programado quando sofrem com o zero básico. Baseando-se nessas necessidades, este artigo foi criado para ajudar os amigos do círculo de moedas a aprenderem o zero básico.

Para começar, vamos analisar a necessidade, e a função deste robô é realizar uma operação de compra e venda quando uma conta ocorre, e as outras contas seguem para executar essa operação. A primeira coisa que vamos fazer é definir dois temas:

  • Conta de referência: conta monitorada, monitorar o movimento desta conta.
  • Conta de seguimento: conta de seguimento, quando ocorre uma ação na conta de referência, a conta de seguimento executa a mesma ação.

A primeira coisa que precisamos fazer é pensar no próximo passo. Como podemos identificar uma conta de referência a cada passo?

O monitoramento da conta de referência é muito simples para a conta em dinheiro, podemos fazer isso simplesmente comparando o número de moedas nos dados de informações da conta mais recentes com o número de moedas nos dados de informações da conta mais recentes obtidos atualmente. Se o número de moedas nos dados de informações da conta atual obtidos for maior do que o registrado na última vez, prova que a conta de referência executou uma operação de compra e a compra foi bem-sucedida. Contudo, se a conta de referência tiver menos moedas, executar uma operação de venda. Depois de descobrirmos essa ação, podemos pedir que outras contas de câmbio executem a mesma operação.

Quando se descobre que a conta de referência executou uma transação, é necessário atualizar o registro de dados da conta mais recente para comparar com a próxima informação da conta obtida para determinar se há novas ações de transação.

A lógica acima é descrita em código estratégico:

        // 检测跟单
        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                                  // 更新参考交易所最近一次的账户信息,用于下次对比

A principal lógica de detecção da estratégia é o código acima. Para simplificar o projeto, a estratégia usa o modelo de banco de dados oficial da FMZ.$.Buy , $.SellTodas são funções deste modelo, e a função é executar a seguinte operação.

A política foi adicionada a um conjunto de barras de estado para monitorar os dados das contas, e a política completa é a seguinte:

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

Vamos fazer um teste em tempo real, usando o teste de simulação de exchanges do wexApp do FMZ. Aqui eu adicionei três contas do wexApp, todas independentes umas das outras. Uma delas é para a troca de referência e as outras duas são para a troca de acompanhamento.

img

Em seguida, usamos o terminal de transações do FMZ para fazer o próximo pedido manualmente e ver se o robô faz o pedido automaticamente.

img

O bot detectou a transação e executou o pedido.

img

A estratégia completa:https://www.fmz.com/strategy/255182

A estratégia é apenas para aprendizagem, por favor deixe um comentário se tiver alguma dúvida.


Relacionados

Mais.

SíriosOlá, pode ajudar a implementar, pagando para ajudar. Obrigado.

SíriosOlá, pode ajudar a implementar, pagando para ajudar. Obrigado.

GordosO que é que a minha mãe tem a dizer?

13169222039Olá, eu gostaria de perguntar se você pode obter este código de pessoa que está em cima da moeda.

Inventor quantificado - sonho pequenoO código da estratégia é aberto e está disponível no Plano de Estratégias, onde você pode ver os tutoriais da comunidade FMZ. Os tutoriais iniciais são para uso pedagógico e podem ser usados de forma básica.

RootmeO preço do Bitcoin é muito diferente do preço do Bitcoin, mas o preço do Bitcoin pode ser muito diferente.