Tài nguyên đang được tải lên... tải...

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

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2022-02-16 12:11:36, Cập nhật: 2023-09-15 20:46:46

img

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

Hệ thống quản lý đơn hàng đồng bộ (Synchronous Server)

Chúng tôi tiếp tục bài viết trước:Thiết kế hệ thống quản lý đồng bộ đơn đặt hàng dựa trên FMZ định lượng (1)Trong khi đó, các nhà nghiên cứu cũng đã thảo luận về việc bắt đầu thiết kế các chiến lược đồng bộ hóa danh sách.

Hãy xem xét một vài vấn đề thiết kế sau:

  • Nếu bạn không muốn đồng bộ hóa đơn tạm thời, bạn có thể tạm dừng không. Một khi tạm dừng, bạn sẽ không được khởi động từ API mở rộng, sử dụng xác minh mật khẩu. Để thực hiện chức năng này, thêm 2 biến toàn cầu:

    var isStopFollow = false   // 用于标记当前是否跟单
    var reStartPwd = null      // 用于记录重启密码
    

    img

    Sau đó, thêm một điều khiển tương tác vào trang chỉnh sửa chính sách để tạm dừng / khởi động lại chính sách (không phải dừng ổ đĩa thực này, chỉ tạm dừng logic, không theo dõi, không làm gì cả).订单同步管理系统类库(Single Server)Khả năng này cũng không thể kích hoạt chính sách của bạn. Khi khởi động lại danh sách theo dõi, nhập mật khẩu mặc định để kích hoạt chức năng theo dõi. Mã thực hiện 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ố đơn hàng nhỏ hơn hoặc có thể mở rộng nhiều lần Thêm tham số vào chính sách:

    img

    specifiedAmount: Đặt số lượng hàng theo dõi, mặc định là -1, nghĩa là không được chỉ định. zoomAmountRatio: Tăng theo số lượng nhỏ nhất trong tín hiệu được gửi, ví dụ:ETH_USDT,swap,buy,1, thì giá trị của số đơn vị dưới đây sẽ được nhân với zoomAmountRatio.

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

    Đây là một số lượng nhỏ nhất cần thiết trong tín hiệu nhận được.Tăng kích thướcHoặcĐặt giá trị cụ thể

  • 3, Mã được giảm thiểu nhất có thể, sau đó xử lý bằng các thư viện lớp mẫu khác.

    Các thư viện sử dụng theo đơn đặt hàng:https://www.fmz.com/strategy/10989Tiếp tục sử dụng thư mục: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 có thể thấy, đơn giản chỉ cần một câu:$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount)...vì vậy.

Mã chiến lược:

Trước đây订单同步管理系统(Synchronous Server)Có một số người nói rằng: "Chúng tôi không thể làm điều đó".

img

Bây giờ hãy bắt đầu thiết kế lại订单同步管理系统(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)
    }
}

Kiểm tra

Tài khoản này sử dụng Binance để kiểm tra ổ đĩa thực, và ổ đĩa khác sử dụng tài khoản OKEX.订单同步管理系统类库(Single Server)Trong mẫumainChức năng) ^

img

Chỉ cần chúng ta thay đổi hướng giao dịch thành không và số lượng giao dịch được thay đổi thành 0.003 (contract USDT có thể được đặt hàng bằng số nhỏ). Nhưng bảng đơn của tài khoản OKEX phải là một số nguyên (bảng đơn của sàn giao dịch OKEX phải là một số nguyên)specifiedAmountCó 1 ≠ 1.

img

订单同步管理系统类库(Single Server)Trong khi đó, các ứng dụng khác cũng được sử dụng.

img

Các chiến lược thực của đơn hàng nhận được tín hiệu và thực hiện các hành động đơn hàng:

img

Trong khi đó, các nhà giao dịch đã đưa ra các lệnh tương ứng.

img

Tiếp theo, hãy thử ngang bằng bằng cách thay đổi hướng đơn hàng dưới trong hàm main để làm phẳng vị trí trống 0.003.

img

Sau đó chạy lại đĩa thực này chịu trách nhiệm về băng.订单同步管理系统类库(Single Server))。

img

Một số người cho rằng, việc sử dụng máy tính để điều khiển các máy tính có thể gây ra sự thay đổi lớn trong tính năng của bạn.

img

Địa chỉ chiến lược:Bộ thư mục hệ thống quản lý đồng bộ đơn hàng (Single Server) Hệ thống quản lý đơn hàng đồng bộ (Synchronous Server)

Thiết kế chiến lược chỉ để học hỏi, sản xuất thực tế cần tự sửa đổi, điều chỉnh, tối ưu hóa.


Có liên quan

Thêm nữa