avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Được tạo ra trong: 2022-02-16 12:11:36, cập nhật trên: 2023-09-15 20:46:46
comments   0
hits   1431

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Đặt hàng máy chủ đồng bộ

Chúng ta hãy tiếp tục với bài viết trước:Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (1)Sau khi thảo luận với các chuyên gia, chúng tôi bắt đầu thiết kế chiến lược sao chép giao dịch đồng bộ.

Hãy xem xét những vấn đề thiết kế sau:

  • 1. Nếu bạn không muốn thực hiện lệnh đồng bộ trong thời điểm hiện tại, bạn có thể tạm dừng không? Sau khi tạm dừng, việc khởi chạy từ API tiện ích mở rộng sẽ bị cấm, sử dụng xác thực bằng mật khẩu. Để thực hiện chức năng này, hãy thêm hai biến toàn cục:
  var isStopFollow = false   // 用于标记当前是否跟单
  var reStartPwd = null      // 用于记录重启密码

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Sau đó thêm các điều khiển tương tác trên trang chỉnh sửa chiến lược để tạm dừng/khởi động lại chiến lược (nó không dừng giao dịch thực tế mà chỉ tạm dừng logic, dừng theo lệnh và không làm gì cả). Khi tạm dừng, bạn có thể đặt mật khẩu tạm dừng để ngay cả khi bạn có API KEY mở rộng订单同步管理系统类库(Single Server)Ngay cả một phiên giao dịch thực sự cũng không thể đánh thức được chiến lược của bạn. Khi khởi động lại giao dịch sao chép, hãy nhập mật khẩu được cài đặt sẵn để đánh thức chức năng giao dịch sao chép. Mã triển khai các chức năng liên quan:

  ...
            // 判断交互指令
            if (arr.length == 2) {
            	// 带控件的按钮
            	if (arr[0] == "stop/restart") {
            		// 暂停/重启跟单
            		if (!isStopFollow) {
            		    isStopFollow = true
            		    reStartPwd = arr[1]
            		    Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
            		} else if (isStopFollow && arr[1] == reStartPwd) {
            			isStopFollow = false 
            			reStartPwd = null 
            			Log("已经重启跟单,", "清空重启密码。", "#FF0000")
            		} else if (isStopFollow && arr[1] != reStartPwd) {
            			Log("重启密码错误!")
            		}
            	}
            	continue 
            }
  • 2. Bạn có thể chỉ định số lượng đặt hàng hoặc tăng hoặc giảm số lượng Thêm tham số vào chiến lược:

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

specifiedAmount: chỉ định số lượng của lệnh tiếp theo. Giá trị mặc định là -1, nghĩa là không chỉ định. zoomAmountRatio: phóng to theo số lượng đơn hàng trong tín hiệu đã gửi, ví dụ, tín hiệu đã gửi là:ETH_USDT,swap,buy,1, nhân số lượng đặt hàng với zoomAmountRatio. Mặc định là -1, nghĩa là không có chức năng thay đổi tỷ lệ.

      var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
      amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio

Ở đây chúng tôi thực hiện số lượng đơn hàng cần được theo dõi trong tín hiệu nhận đượcPhónghoặcChỉ định các giá trị cụ thể

  • 3. Giữ cho mã ngắn gọn nhất có thể và sử dụng các thư viện mẫu khác để xử lý đơn hàng.

Đặt lệnh giao ngay bằng thư viện lớp: https://www.fmz.com/strategy/10989 Thư viện lệnh tương lai: https://www.fmz.com/strategy/203258

    function trade(action) {
        // 切换交易对,设置合约
        exchange.SetCurrency(action.symbol)
        if (action.ct != "spot") {
            exchange.SetContractType(action.ct)        
        }        

        var retTrade = null 
        var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
        amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio    

        if (action.direction == "buy") {
            retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
        } else if (action.direction == "sell") {
            retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
        } else if (action.direction == "closebuy") {
            retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
        } else if (action.direction == "closesell") {
            retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
        }
        return retTrade
    }

Vì vậy, bạn thấy đấy, để đặt hàng chỉ cần một câu:$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount) .. Chờ đợi.

Mã chiến lược:

Trước订单同步管理系统(Synchronous Server)Mã tạm thời là như sau:

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Bắt đầu thiết kế lại ngay bây giờ订单同步管理系统(Synchronous Server)

// 全局变量
var isStopFollow = false
var reStartPwd = null 

function trade(action) {
    // 切换交易对,设置合约
    exchange.SetCurrency(action.symbol)
    if (action.ct != "spot") {
        exchange.SetContractType(action.ct)        
    }    

    var retTrade = null 
    var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
    amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio

    if (action.direction == "buy") {
        retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
    } else if (action.direction == "sell") {
    	retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
    } else if (action.direction == "closebuy") {
    	retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
    } else if (action.direction == "closesell") {
    	retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
    }
    return retTrade
}

function parseCmd(cmd) {
	var objAction = {}
	// 解析cmd ,例如:ETH_USDT,swap,buy,1
    var arr = cmd.split(",")
    if (arr.length != 4) {
    	return null 
    }
    objAction.symbol = arr[0]
    objAction.ct = arr[1]
    objAction.direction = arr[2]
    objAction.amount = arr[3]
    return objAction
}

function main() {
	// 清除所有日志
    LogReset(1)  

    if (isSimulateOKEX) {
    	exchange.IO("simulate", true)
    	Log("切换到OKEX模拟盘!")
    }

    // 设置精度
    exchange.SetPrecision(pricePrecision, amountPrecision)

    // 检查缩放、指定不能同时设置
    if (specifiedAmount != -1 && zoomAmountRatio != -1) {
    	throw "不能同时指定同步量和缩放量"
    }

    while (true) {
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd: ", cmd)
            var arr = cmd.split(":")

            // 判断交互指令
            if (arr.length == 2) {
            	// 带控件的按钮
            	if (arr[0] == "stop/restart") {
            		// 暂停/重启跟单
            		if (!isStopFollow) {
            		    isStopFollow = true
            		    reStartPwd = arr[1]
            		    Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
            		} else if (isStopFollow && arr[1] == reStartPwd) {
            			isStopFollow = false 
            			reStartPwd = null 
            			Log("已经重启跟单,", "清空重启密码。", "#FF0000")
            		} else if (isStopFollow && arr[1] != reStartPwd) {
            			Log("重启密码错误!")
            		}
            	}
            	continue 
            }
            
            // 允许跟单
            if (!isStopFollow) {
                // 解析跟单信号交互指令
                var objAction = parseCmd(cmd)
                if (objAction) {
            	    // 解析正确
            	    var ret = trade(objAction)
                } else {
                	Log("错误的信号指令 cmd:", cmd)
                }
            }
        }
        
        // 显示跟单情况
        LogStatus(_D(), isStopFollow ? "停止同步" : "保持同步", "\n")

        Sleep(1000)
    }
}

Bài kiểm tra

Lần này, tài khoản có lệnh sẽ sử dụng tài khoản Binance thật để thử nghiệm, còn tài khoản thật để sao chép lệnh sẽ sử dụng tài khoản OKEX. Chúng tôi vẫn sử dụng hàm kiểm tra được sử dụng trong bài viết trước (订单同步管理系统类库(Single Server)Trong mẫumainchức năng).

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Chúng tôi vừa thay đổi hướng giao dịch sang bán khống và khối lượng giao dịch thành 0,003 (hợp đồng dựa trên USDT của Binance có thể đặt lệnh theo số thập phân). Tuy nhiên, tài khoản OKEX phải là số nguyên (lệnh giao dịch OKEX phải được đặt ở dạng số nguyên), vì vậy tôi chỉ định các tham số chiến lượcspecifiedAmountlà 1.

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

订单同步管理系统类库(Single Server)Chức năng kiểm tra kích hoạt một giao dịch thực tế.

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Chiến lược sao chép lệnh theo thời gian thực nhận được tín hiệu và thực hiện hành động sao chép:

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Sàn giao dịch mở lệnh tương ứng.

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Tiếp theo, hãy thử đóng vị thế và thay đổi hướng lệnh trong hàm chính thử nghiệm để đóng vị thế bán khống 0,003 hợp đồng.

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Sau đó chạy lại đĩa thực sự chịu trách nhiệm lấy lệnh (订单同步管理系统类库(Single Server))。

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Hoạt động tương tự cũng được kích hoạt bằng cách sao chép thứ tự thực:

Thiết kế hệ thống quản lý đồng bộ đơn hàng dựa trên định lượng FMZ (2)

Địa chỉ chính sách: Thư viện lớp hệ thống quản lý đồng bộ hóa đơn hàng (Máy chủ đơn) Đặt hàng máy chủ đồng bộ

Thiết kế chiến lược chỉ dành cho mục đích giao tiếp và học tập. Vui lòng sửa đổi, điều chỉnh và tối ưu hóa theo nhu cầu sản xuất thực tế.