4
Подписаться
1271
Подписчики

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

Создано: 2022-02-16 12:11:36, Обновлено: 2023-09-15 20:46:46
comments   0
hits   1431

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

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

Заказать синхронный сервер

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

Рассмотрим следующие вопросы дизайна:

  • 1. Если вы пока не хотите выполнять приказы синхронно, можете ли вы поставить их на паузу? После паузы запуск из API расширения запрещен, используется аутентификация по паролю. Для реализации этой функции добавьте две глобальные переменные:
  var isStopFollow = false   // 用于标记当前是否跟单
  var reStartPwd = null      // 用于记录重启密码

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

Затем добавьте интерактивные элементы управления на страницу редактирования стратегии, чтобы приостановить/перезапустить стратегию (это не останавливает реальную торговлю, а только приостанавливает логику, прекращает выполнение ордеров и ничего не делает). При паузе вы можете установить пароль паузы, чтобы даже если у вас есть расширенный 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. Вы можете указать объем заказа или масштабировать его в большую или меньшую сторону. Добавьте параметры в стратегию:

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

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

      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)Временный код такой:

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

Начните редизайн сейчас订单同步管理系统(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функция).

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

Мы только что изменили направление транзакции на короткую продажу и объем транзакции на 0,003 (контракты Binance на основе USDT могут размещать ордера в десятичных числах). Однако счет OKEX должен быть целым числом (ордера биржи OKEX должны быть размещены целыми числами), поэтому я указываю параметры стратегииspecifiedAmountравно 1.

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

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

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

Стратегия копирования ордеров в реальном времени получает сигнал и выполняет действие копирования:

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

Биржа открыла соответствующий ордер.

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

Далее давайте протестируем закрытие позиции и изменим направление ордера в основной функции теста, чтобы закрыть короткую позицию в 0,003 контракта.

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

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

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

Та же операция запускается и при копировании реального заказа:

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

Адрес политики: Библиотека классов системы управления синхронизацией заказов (один сервер) Заказать синхронный сервер

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