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 // 用于记录重启密码
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:
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.
Vorheriger订单同步管理系统(Synchronous Server)
Der temporäre Code lautet:
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)
}
}
Bei diesem Band wird die Binance-Festplatte getestet, während die OKEX-Festplatte getestet wird.订单同步管理系统类库(Single Server)
In der Vorlagemain
Die Funktion) ^
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.specifiedAmount
Das ist eins.
订单同步管理系统类库(Single Server)
Die Testfunktionen auf der Festplatte lösen die Transaktionen aus.
Die Festplatten-Politiker der Folge empfangen ein Signal und führen die Folge-Aktion aus:
Die Börse hat entsprechende Aufträge ausgegeben.
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.
Und dann läuft diese Festplatte wieder, die für das Band verantwortlich ist.订单同步管理系统类库(Single Server)
)。
Die gleiche Funktion wird auch auf der Festplatte ausgelöst:
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.