Có rất nhiều bạn bè trong vòng tròn tiền điện tử cần một bot giám sát lệnh, nhưng họ đang phải chịu đựng thời gian dài để bắt đầu với thiết kế lập trình khi họ không có cơ bản. Dựa trên những nhu cầu như vậy, trong bài viết này, chúng tôi sẽ thiết kế một bot giám sát lệnh tại chỗ đơn giản để giúp những người bạn không có cơ bản học giao dịch chương trình.
Trước hết, hãy phân tích yêu cầu. chức năng của bot này là nhận ra rằng khi một tài khoản có một giao dịch mua hoặc bán, các tài khoản khác của lệnh giám sát sẽ theo dõi và thực hiện các hoạt động quá. Vậy, trước tiên chúng ta xác định 2 chủ đề:
Sau khi yêu cầu này được làm rõ ban đầu, chúng ta tiếp tục suy nghĩ về bước tiếp theo.
Theo dõi tài khoản tham chiếu. Nó rất đơn giản cho các tài khoản giao dịch tại chỗ. Chúng ta chỉ cần so sánh số tiền biểu tượng trong dữ liệu thông tin tài khoản mới nhất với số tiền biểu tượng hiện tại trong dữ liệu thông tin tài khoản mới nhất thu được. Nếu số tiền biểu tượng trong dữ liệu thông tin tài khoản mới nhất hiện được thu được lớn hơn hồ sơ trước đó, nó chứng minh rằng tài khoản tham khảo đã thực hiện một hoạt động mua và việc thực hiện đã thành công. Ngược lại, nếu có ít biểu tượng hơn, một hoạt động bán được thực hiện cho tài khoản tham khảo. Sau khi chúng tôi phát hiện hành động, hãy để các tài khoản nền tảng khác thực hiện cùng một hoạt động.
Khi thấy rằng tài khoản tham khảo đã thực hiện giao dịch, hồ sơ dữ liệu tài khoản mới nhất phải được cập nhật để so sánh với thông tin tài khoản thu được lần tiếp theo để xác định xem có hành động giao dịch mới hay không.
Mô tả mã chiến lược của logic ở trên:
// detect order supervising
var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks) // detect the currency amount changes
var func = null
if (amount > 0) { // the amount increased
func = $.Buy // buy
} else if (amount < 0) { // the amount decreased
func = $.Sell // sell
} else {
continue
}
// execute order supervising
Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
for (var i = 1 ; i < exchanges.length ; i++) { // when i equals 0, it indicates the reference platform, not to be processed; process other order supervising platforms
func(exchanges[i], Math.abs(amount)) // execute the specified trading function, and it could be $.Buy or $.Sell, which needs to be determined by observing whether amount is larger than 0 or less than 0
}
// update the information record of the reference account after order supervising
initAcc = nowAcc // update the latest account information of the reference platform, to compare it with the next one
Lý thuyết phát hiện chính của chiến lược là mã trên. Để đơn giản hóa thiết kế, chiến lược sử dụng mẫu FMZ chính thức [Thư viện giao dịch tiền kỹ thuật số], và$.Buy
và$.Sell
là tất cả các chức năng của mẫu, chức năng là thực hiện các hoạt động lệnh.
Thêm một số màn hình thanh trạng thái vào chiến lược để dễ dàng theo dõi dữ liệu của mỗi tài khoản.
function test() {
// test function
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 "no platform of order supervising"
}
var exName = exchange.GetName()
// detect the reference platform
if (exName.includes("Futures_")) {
throw "only support sport order supervising"
}
Log("start monitoring", exName, "platform", "#FF0000")
// detect the order supervising platforms
for (var i = 1 ; i < exchanges.length ; i++) {
if (exchanges[i].GetName().includes("Futures_")) {
throw "Do not support the order supervising of futures platfroms"
}
}
var initAcc = _C(exchange.GetAccount)
while(1) {
if(IsVirtual()) {
// test function
test()
}
Sleep(5000)
// update the current information of the reference account
var nowAcc = _C(exchange.GetAccount)
// the account information of the reference platform
var refTbl = {
type : "table",
title : "reference platform",
cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
rows : []
}
refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
// the account information of the order supervising platform
var followTbl = {
type : "table",
title : "order supervising platform",
cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
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])
}
// status bar display
LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
// detect order supervising
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
}
// execute order supervising
Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
for (var i = 1 ; i < exchanges.length ; i++) {
func(exchanges[i], Math.abs(amount))
}
// update the information record of the reference account after order supervising
initAcc = nowAcc
}
}
Hãy thử nghiệm nó trên bot thực tế, bởi FMZ wexApp nền tảng mô phỏng để thử nghiệm. Ở đây tôi đã thêm ba tài khoản wexApp, tất cả đều là tài khoản độc lập. Một trong số đó phục vụ như một nền tảng tham khảo, và hai người khác phục vụ như các nền tảng giám sát đơn đặt hàng.
Sau đó, chúng tôi đặt một lệnh bằng tay qua FMZ giao dịch đầu cuối để xem liệu robot có thể tự động giám sát lệnh.
Bạn có thể thấy rằng robot phát hiện giao dịch và thực hiện hoạt động giám sát lệnh.
Chiến lược hoàn chỉnh:https://www.fmz.com/strategy/255182
Chiến lược chỉ dành cho nghiên cứu. Nếu có bất kỳ câu hỏi nào, chúng tôi sẽ đánh giá cao nếu bạn để lại bình luận về nó.