
В мире криптовалют есть много ручных трейдеров, которым нужны роботы-копии, но их беспокоит тот факт, что им требуется много времени, чтобы начать работать с программным дизайном, если у них нет базовых знаний. Основываясь на этом типе спроса, в этой статье мы разработаем простого робота для спотовой копировальной торговли, чтобы помочь друзьям в криптовалютном кругу, которые не имеют базовых знаний об алгоритмической торговле.
Сначала давайте проанализируем потребности. Функция этого робота заключается в том, чтобы гарантировать, что когда на одном счете происходит операция покупки или продажи, другие счета-копии последуют его примеру и выполнят эту операцию. Поэтому сначала проясним две темы:
Теперь, когда мы предварительно определили эту потребность, нам нужно продолжить думать о следующем шаге. Как мы идентифицируем действия ссылочных аккаунтов?
Мониторинг справочных счетов очень прост для счетов спот. Нам нужно только сравнить количество монет в последних данных информации о счете с количеством монет в последних данных информации о счете, полученных в настоящее время. Если количество монет в последних полученных данных учетной записи больше, чем в предыдущей записи, это доказывает, что на контрольной учетной записи была выполнена операция покупки, и покупка прошла успешно. Наоборот, если монет меньше, то для реферального счета выполняется операция продажи. После того, как мы обнаружим это действие, мы сможем разрешить другим аккаунтам биржи выполнять ту же операцию.
Если обнаружено, что транзакция была выполнена по ссылочному счету, необходимо обновить последнюю запись данных счета для сравнения с информацией о счете, полученной в следующий раз, чтобы определить, были ли какие-либо новые действия по транзакции.
Приведенная выше логика описывается кодом стратегии:
// 检测跟单
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
}
}
Давайте проведем тест в реальном времени, используя имитационный тест обмена wexApp от FMZ. Здесь я добавил три аккаунта wexApp, которые независимы друг от друга. Один из них служит для обмена ссылками, а два других — для обмена копиями.

Затем мы используем торговый терминал FMZ, чтобы вручную разместить ордер и посмотреть, выполнит ли робот его автоматически.

Вы видите, что робот обнаружил транзакцию и выполнил операцию копирования.

Полная стратегия: https://www.fmz.com/strategy/255182
Стратегия только для обучения. Если у вас есть вопросы, пожалуйста, оставьте сообщение.