Type/to search
8
Follow
1361
Followers
Разработка системы управления синхронизацией заказов на основе квантификации FMZ (2)
Original
Created 2022-02-16 12:11:36  Updated 2023-09-15 20:46:46
 0
 1622

img

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

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

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

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

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

    img

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

    javascript
    ... // 判断交互指令 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 }
    1. Вы можете указать объем заказа или масштабировать его в большую или меньшую сторону.
      Добавьте параметры в стратегию:

    img

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

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

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

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

    Точечный заказ с использованием библиотеки классов: https://www.fmz.com/strategy/10989
    Библиотека фьючерсных заказов: https://www.fmz.com/strategy/203258

    javascript
    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)

javascript
// 全局变量 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 (контракты Binance на основе USDT могут размещать ордера в десятичных числах). Однако счет OKEX должен быть целым числом (ордера биржи OKEX должны быть размещены целыми числами), поэтому я указываю параметры стратегииspecifiedAmountравно 1.

img

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

img

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

img

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

img

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

img

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

img

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

img

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

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

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)