Muchos amigos de Coin Circle que realizan transacciones manuales necesitan un robot de seguimiento, pero también necesitan un tiempo más largo para iniciar el diseño programado cuando no tienen conocimientos básicos. Basándonos en estas necesidades, en este artículo hemos diseñado un simple robot de seguimiento de operaciones para ayudar a los amigos de Coin Circle a aprender los principios básicos de la transacción programada.
Primero analizamos la demanda, y el robot tiene la función de realizar una operación de compra y venta en una cuenta, y otras cuentas de pago siguen la operación. Así que, primero vamos a aclarar dos temas:
Una vez que hayamos identificado esta necesidad, el siguiente paso es seguir pensando; ¿cómo podemos identificar una cuenta de referencia en cada movimiento?
El monitoreo de la cuenta de referencia es muy sencillo para las cuentas de efectivo, simplemente comparando el número de monedas en la última información de la cuenta con el número de monedas en la información de la cuenta más reciente que se obtiene actualmente. Si el número de monedas en los datos de información de la cuenta más reciente obtenidos es mayor que el registrado la vez anterior, el registro demuestra que la cuenta de referencia realizó una operación de compra y que la compra fue exitosa. Por el contrario, si hay menos monedas, se realiza una operación de venta para la cuenta de referencia. Una vez que descubrimos esta acción, podemos hacer que otras cuentas de intercambio realicen la misma operación.
Cuando se descubre que la cuenta de referencia ha ejecutado una transacción, se debe actualizar el registro de datos de la cuenta más reciente para compararlo con la siguiente información de la cuenta obtenida para determinar si hay nuevas acciones de transacción.
La lógica descrita en el código estratégico anterior:
// 检测跟单
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 // 更新参考交易所最近一次的账户信息,用于下次对比
La principal lógica de detección de la estrategia es el código anterior. Para simplificar el diseño, la estrategia utiliza la plantilla de la librería oficial de transacciones de monedas digitales de FMZ.$.Buy
, $.Sell
Todas son funciones de esta plantilla, la función es ejecutar la siguiente operación.
Además, añadimos a la política algunas barras de estado para que pueda monitorear los datos de cada cuenta. La política completa es la siguiente:
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 a hacer una prueba en vivo, usando FMZ para probar una simulación de intercambio de wexApp. Aquí he añadido tres cuentas de wexApp, todas ellas independientes. Una de ellas es una bolsa de referencia y las otras dos son una bolsa de seguimiento.
Luego, usamos el terminal de transacciones de FMZ para hacer el siguiente pedido manualmente y ver si el robot lo hace automáticamente.
Se puede ver que el robot detecta las transacciones y realiza las operaciones de seguimiento.
La estrategia completa es:https://www.fmz.com/strategy/255182
Las estrategias son solo para aprender, gracias por los comentarios si tienes algún problema.
Los siasHola, ¿puedes ayudarme a implementarlo, pagando por ello? Gracias.
Los siasHola, ¿puedes ayudarme a implementarlo, pagando por ello? Gracias.
El niño gordo.¿Puede detectarse el colgante?
13169222039Hola, me gustaría preguntarle si puede obtener el código de la persona que aparece en la moneda.
Los inventores cuantifican - sueños pequeñosLa estrategia está disponible en la página web de la comunidad FMZ, donde se pueden ver los tutoriales de la comunidad FMZ. Los tutoriales de nivel primario son para uso docente, y los usos básicos se pueden implementar.
La mezcla de hierroEn el caso de las monedas reales, hay un retraso, y es posible que su precio sea muy diferente al de ellos.