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:
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
, $.Sell
Todas 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.
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.
O bot detectou a transação e executou o pedido.
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.
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.