Дизайн синхронной системы управления заказами на базе FMZ (2)

Автор:Маленькие мечты, Создано: 2022-02-16 12:11:36, Обновлено: 2023-09-15 20:46:46

img

Дизайн синхронной системы управления заказами на базе FMZ (2)

Система синхронного управления заказами (Synchronous Server)

Мы продолжаем предыдущий пост:Дизайн синхронной системы управления заказами на базе FMZ (1)Позже, после обсуждения, мы приступили к разработке стратегии синхронизации списков.

Посмотрите на несколько вопросов, связанных с дизайном:

  • 1, если вы не хотите синхронизировать счета временно, можно ли приостановить. После приостановки запрещается запуск с расширения API, использование пароля проверки. Для реализации этой функции добавлены две глобальные переменные:

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

    img

    Затем на странице редактирования политики добавляется интерактивный контроллер, используемый для приостановки/перезагрузки политики ((не приостанавливает этот диск, просто логический приостановка, не следит за списком, ничего не делает)); приостановка может быть настроена как пароль приостановки, так что даже если у вас есть расширение API KEY订单同步管理系统类库(Single Server)Диск также не может пробудить вашу политику. При перезагрузке списка вводите пароль, установленный по умолчанию, чтобы пробудить функции списка. Код реализации соответствующих функций:

    ...
              // 判断交互指令
              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, можно указать количество подписных листов или увеличить их по множественным числам Добавить параметры в стратегию:

    img

    specifiedAmount: указывает количество последовательностей, по умолчанию -1, то есть не указывает. zoomAmountRatio: масштабирование меньшей величины передаваемого сигнала, например:ETH_USDT,swap,buy,1, то мы умножим значение нижней единицы на zoomAmountRatio.

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

    Здесь реализовано меньшее количество потребностей в полученном сигнале.УвеличениеИлиУкажите конкретные значения

  • 3, Код максимально упрощенный, сделанный с использованием других библиотек шаблонов.

    Например, вы можете использовать следующие файлы:https://www.fmz.com/strategy/10989Фьючерсные заказы используют следующие классы: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
      }
    

    В этом случае, если вы хотите, чтобы ваш ребенок был здоровым, вы должны быть готовы к этому.$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount)... и так далее.

Код стратегии

Предыдущий订单同步管理系统(Synchronous Server)Временный код выглядит так:

img

Сейчас начинается перепроектирование.订单同步管理系统(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)
    }
}

Тесты

На данный раз учетная запись использует Binance на диске, а учетная запись использует учетную запись OKEX.订单同步管理系统类库(Single Server)В шаблонеmainФункция) ⋅

img

Но мы изменили направление сделки на пустое, и количество сделок было изменено на 0.003 ((Биньян USDT) новые контракты могут быть заказаны с целым числом прописок). Но учетная запись ОКЕКС должна быть целым числом ((ОКЕКС) учетная запись должна быть целым числом прописок, поэтому параметры Я указываю параметры политикиspecifiedAmountЭто 1⁄4.

img

订单同步管理系统类库(Single Server)Процесс тестирования функций на диске запускает транзакции.

img

Политики на диске получают сигнал и выполняют следующие действия:

img

Например, в 2010 году в Нью-Йорке появилась одна из крупнейших торговых площадок в мире, а в 2012 году - в Нью-Йорке.

img

Затем проверьте равновесие, изменив направление нижнего ряда в тестовой функции main на равновесие 0.003 пустого положения.

img

И затем снова запустить этот диск, который отвечает за ленту.订单同步管理系统类库(Single Server))。

img

Поскольку он не имеет никакого отношения к работе с компьютером, он не имеет никакого отношения к работе с компьютером, и не имеет никакого отношения к работе с компьютером.

img

Политический адрес:Классификация систем синхронного управления заказами (Single Server) Система синхронного управления заказами (Synchronous Server)

Стратегический дизайн предназначен только для обмена знаниями, фактическое производство требует собственных изменений, корректировок и оптимизации.


Связанные

Больше