Design eines FMZ-basierten Quantitativ-Synchronisierungsmanagementsystems (2)

Schriftsteller:Kleine Träume, Erstellt: 2022-02-16 12:11:36, aktualisiert: 2023-09-15 20:46:46

img

Design eines FMZ-basierten Quantitativ-Synchronisierungsmanagementsystems (2)

Synchronous Server (Synchronous Server) ist ein Synchronous Server für die Verwaltung von Bestellungen.

Wir setzen den vorherigen Artikel fort:Gestaltung eines FMZ-basierten Quantitativ-Synchronisierungsmanagementsystems (1)Die Diskussion über die Synchronisierung der Listen begann mit der Entwicklung einer Strategie.

Ein paar Designfragen:

  • 1, Wenn Sie die Zahlung nicht synchronisieren möchten, können Sie sie pausieren. Sobald sie pausiert ist, ist es verboten, von der Erweiterungs-API aus zu starten und die Passwortprüfung zu verwenden. Die Funktion wurde mit zwei globalen Variablen ergänzt:

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

    img

    Dann wird auf der Politik-Edit-Seite ein interaktiver Kontrollpunkt hinzugefügt, der für das Pausieren/Wiederaufnehmen der Politik verwendet wird ((nicht das Festplatten-Stoppen, nur logische Pause, keine Liste mehr, nichts mehr zu tun)).订单同步管理系统类库(Single Server)Auch die Festplatte kann Ihre Strategie nicht mehr wecken. Der Implementierungscode für die entsprechenden Funktionen:

    ...
              // 判断交互指令
              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° Sie können die Anzahl der Einheiten für die Liste angeben oder sie multiplizieren. Die Parameter für die Strategie werden ergänzt:

    img

    specifiedAmount: Anzahl der Listen angegeben, bei -1, also nicht angegeben. zoomAmountRatio: Vergrößerung der Untermenge des gesendeten Signals, z. B.ETH_USDT,swap,buy,1, dann multipliziert man den Wert der unteren Einheitsmenge mit zoomAmountRatio.

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

    Hier wird die Anzahl der benötigten Nachfragen für das empfangene Signal realisiert.VergrößerungOderGeben Sie einen bestimmten Wert an

  • 3. Versuchen Sie, den Code so einfach wie möglich zu verarbeiten, indem Sie andere Template-Klassenbibliotheken verwenden.

    Die Klassen für die Nutzung von Online-Bestellungen:https://www.fmz.com/strategy/10989Die Futures-Klassenbuch für die Nutzung von Futures-Klassenbuch: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
      }
    

    Sieh mal, es braucht nur einen Satz:$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount)... und so weiter.

Das ist ein sehr schwieriger Fall.

Vorheriger订单同步管理系统(Synchronous Server)Der temporäre Code lautet:

img

Jetzt beginnen wir mit der Neugestaltung.订单同步管理系统(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)
    }
}

Tests

Bei diesem Band wird die Binance-Festplatte getestet, während die OKEX-Festplatte getestet wird.订单同步管理系统类库(Single Server)In der VorlagemainDie Funktion) ^

img

Aber wir haben die Handelsrichtung auf null geändert und die Handelsmenge auf 0.003 geändert. Aber die OKEX-Konto-Liste muss eine ganze Zahl sein, also habe ich die Strategie-Parameter festgelegt.specifiedAmountDas ist eins.

img

订单同步管理系统类库(Single Server)Die Testfunktionen auf der Festplatte lösen die Transaktionen aus.

img

Die Festplatten-Politiker der Folge empfangen ein Signal und führen die Folge-Aktion aus:

img

Die Börse hat entsprechende Aufträge ausgegeben.

img

Im nächsten Test wird die Ausgleichsstellung getestet, indem man die Richtung der Unterposition in der Test-Main-Funktion in die Ausgleichsrichtung der Leerstandsstellung 0.003 umwandelt.

img

Und dann läuft diese Festplatte wieder, die für das Band verantwortlich ist.订单同步管理系统类库(Single Server))。

img

Die gleiche Funktion wird auch auf der Festplatte ausgelöst:

img

Die Strategie ist unter:Klassensammlung für das Synchronisierungsmanagement von Bestellungen (Single Server) Synchronous Server (Synchronous Server) ist ein Synchronous Server für die Verwaltung von Bestellungen.

Strategieentwurf ist nur für das Austauschlernen, die tatsächliche Produktion erfordert eigene Änderungen, Anpassungen und Optimierungen.


Verwandt

Mehr