
Ada banyak pedagang manual di dunia mata uang kripto yang membutuhkan robot peniru, tetapi mereka terganggu oleh kenyataan bahwa dibutuhkan waktu lama untuk memulai desain terprogram jika mereka tidak memiliki pengetahuan dasar. Berdasarkan jenis permintaan ini, dalam artikel ini kami akan merancang robot perdagangan salinan spot sederhana untuk membantu teman-teman di dunia mata uang kripto yang tidak memiliki pengetahuan dasar tentang perdagangan algoritmik.
Pertama, mari kita analisis kebutuhannya. Fungsi robot ini adalah untuk memastikan bahwa ketika satu akun melakukan transaksi beli atau jual, akun lain yang menyalin transaksi akan mengikutinya dan menjalankan transaksi tersebut. Oleh karena itu, pertama-tama kita perjelas dua hal:
Sekarang setelah kita mengidentifikasi kebutuhan ini secara awal, kita perlu terus memikirkan langkah berikutnya. Bagaimana kita mengidentifikasi tindakan akun referensi?
Pemantauan akun referensi sangat mudah untuk akun spot. Kita hanya perlu membandingkan jumlah koin pada data informasi akun terbaru dengan jumlah koin pada data informasi akun terbaru yang diperoleh saat ini. Apabila jumlah koin pada data informasi akun terakhir yang diperoleh saat ini lebih banyak dari catatan sebelumnya, maka itu membuktikan bahwa akun referensi telah melakukan operasi beli, dan pembelian berhasil. Sebaliknya jika koinnya sedikit maka akan dilakukan operasi jual pada akun referensi. Setelah kami menemukan tindakan ini, kami membiarkan akun bursa lainnya melakukan operasi yang sama.
Bila suatu transaksi diketahui telah dieksekusi pada akun referensi, catatan data akun terkini harus diperbarui untuk dibandingkan dengan informasi akun yang diperoleh pada saat berikutnya guna menentukan apakah ada tindakan transaksi baru.
Logika di atas dijelaskan oleh kode strategi:
// 检测跟单
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 // 更新参考交易所最近一次的账户信息,用于下次对比
Logika deteksi utama dari strategi ini adalah kode di atas. Demi kesederhanaan desain, strategi ini menggunakan templat resmi FMZ [Perpustakaan Perdagangan Mata Uang Digital].$.Buy , $.SellIni semua adalah fungsi dari templat ini, dan fungsinya adalah untuk mengeksekusi operasi pesanan.
Tambahkan beberapa tampilan bilah status ke strategi untuk memudahkan pemantauan data setiap akun. Strategi lengkapnya adalah sebagai berikut:
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
}
}
Mari kita lakukan pengujian waktu nyata menggunakan pengujian pertukaran simulasi wexApp FMZ. Di sini saya menambahkan tiga akun wexApp, yang independen satu sama lain. Satu di antaranya berfungsi sebagai pertukaran referensi, dan dua lainnya berfungsi sebagai pertukaran salinan.

Kemudian kami secara manual menempatkan pesanan menggunakan terminal perdagangan FMZ untuk melihat apakah robot akan secara otomatis mengikuti pesanan tersebut.

Anda dapat melihat bahwa robot mendeteksi transaksi dan menjalankan operasi penyalinan.

Strategi lengkap: https://www.fmz.com/strategy/255182
Strategi ini hanya untuk pembelajaran. Jika Anda memiliki pertanyaan, silakan tinggalkan pesan.