2
Подписаться
319
Подписчики

Рабочий процесс на практике: простое управление ордерами на основе процента от капитала и автоматизированными мерами тейк-профита и стоп-лосса

Создано: 2025-11-12 10:58:07, Обновлено: 2025-11-15 12:45:08
comments   0
hits   219

Рабочий процесс на практике: простое управление ордерами на основе процента от капитала и автоматизированными мерами тейк-профита и стоп-лосса

1. Введение

Всем привет! Недавно я получил много отзывов от друзей об использовании рабочего процесса, и наиболее часто задаваемый вопрос…Процентная доля правиСтоп-стопЧто касается проблем с настройкой, многие спрашивают: «Я знаю, что мне нужно контролировать риск, но как именно рассчитать объём ордера на основе средств на счёте? И ещё, как автоматически установить стоп-лосс и тейк-профит ордера после открытия позиции, чтобы система могла управлять рисками за нас?»

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


II. Подробное объяснение размещения заказов на основе процента капитала

Рабочий процесс на практике: простое управление ордерами на основе процента от капитала и автоматизированными мерами тейк-профита и стоп-лосса

2.1 Что такое размещение ордеров на основе процента от собственного капитала?

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

Например

  • На счету 10 000 USDT.
  • Установите коэффициент риска 5% (riskRatio = 0,05).
  • Система будет использовать квоту в 500 USDT для открытия позиции.

Основные преимущества

  1. Риски под контролемРиск — фиксированный процент для каждой транзакции, независимо от остатка на счете.
  2. Высокая норма использования капиталаПри изменении средств на счете размер заказа автоматически корректируется — размер заказа увеличивается при увеличении средств и соответственно уменьшается при уменьшении средств.
  3. Высокая степень адаптацииСчета, подходящие для разных размеров капитала

2.2 Полная логика вычислений и реализация кода

Шаг 1: Получите информацию об учетной записи

// 1. 获取账户信息
const accountInfo = exchange.GetAccount();
if (!accountInfo) {
    return [{ 
        json: { 
            success: false, 
            error: "获取账户信息失败" 
        } 
    }];
}

const availBalance = accountInfo.Balance; // 可用余额
Log("账户可用余额:", availBalance);

Ключевые моментыBalanceПоле отображает доступный остаток, который является основой для расчета.


Шаг второй: получение рыночной информации

// 2. 获取市场信息
const symbol = $vars.coin + '_USDT.swap' || 'ETH_USDT.swap';
const allMarkets = exchange.GetMarkets();
const marketsInfo = allMarkets[symbol];

if (!marketsInfo) {
    return [{ 
        json: { 
            success: false, 
            error: `未找到交易对信息: ${symbol}` 
        } 
    }];
}

Описание основных параметров

  • CtValНоминальная стоимость контракта (например, номинальная стоимость бессрочного контракта ETH составляет 0,01 ETH)
  • MinQtyМинимальное количество заказа
  • MaxQtyМаксимальное количество заказа
  • AmountPrecisionТочность количества
  • PricePrecisionТочность цен

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


Шаг 3: Получите текущую цену

// 3. 获取当前价格
const ticker = exchange.GetTicker(symbol);
if (!ticker) {
    return [{ 
        json: { 
            success: false, 
            error: "获取价格信息失败" 
        } 
    }];
}

const currentPrice = ticker.Last; // 最新成交价
Log("当前价格:", currentPrice);

Шаг 4: Рассчитайте количество контрактов

// 4. 计算合约张数
const riskRatio = $vars.riskRatio || 0.05; // 默认 5% 风险比例

// 步骤 1:计算风险金额
const riskAmount = availBalance * riskRatio;

// 步骤 2:计算币种数量
let coinQuantity = riskAmount / currentPrice;

// 步骤 3:转换为合约张数(因为期货交易用的是合约张数)
let contractQuantity = coinQuantity / marketsInfo.CtVal;

// 步骤 4:精度处理(确保下单数量符合交易所要求)
contractQuantity = _N(contractQuantity, marketsInfo.AmountPrecision);

Log("计算步骤:");
Log("- 风险金额:", riskAmount);
Log("- 币种数量:", coinQuantity);
Log("- 合约面值:", marketsInfo.CtVal);
Log("- 原始合约张数:", coinQuantity / marketsInfo.CtVal);
Log("- 精度处理后:", contractQuantity);

Сводка расчетных формул

合约张数 = (账户余额 × 风险比例 ÷ 当前价格) ÷ 合约面值

Шаг 5: Проверьте ограничения

// 5. 检查限制
if (contractQuantity < marketsInfo.MinQty) {
    return [{ 
        json: { 
            success: false, 
            error: `计算数量${contractQuantity}小于最小要求${marketsInfo.MinQty}`,
            calculatedQuantity: contractQuantity,
            minQty: marketsInfo.MinQty
        } 
    }];
}

if (contractQuantity > marketsInfo.MaxQty) {
    Log("数量超过最大限制,使用最大值:", marketsInfo.MaxQty);
    contractQuantity = marketsInfo.MaxQty;
}

Log("最终下单数量:", contractQuantity);

Распространенные ошибки новичков

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

Если указанные выше настройки неверны, появится уведомление о сбое заказа. Новичкам следует обратить на это особое внимание.


III. Подробное объяснение настроек фиксации прибыли и стоп-лосса

Рабочий процесс на практике: простое управление ордерами на основе процента от капитала и автоматизированными мерами тейк-профита и стоп-лосса

3.1 Основная логика фиксации прибыли и стоп-лосса

Многие путаются в направлении фиксации прибыли и стоп-лосса. Давайте проясним это:

Тип холдингов Операция по получению прибыли Операция стоп-лосс
Несколько заказов Продавайте, чтобы закрыть позиции, когда цены растут Продавайте, чтобы закрыть позиции, когда цены падают.
Короткая позиция Покупайте, чтобы закрыть позиции, когда цены падают Покупайте, чтобы закрыть позицию, когда цены вырастут

Ключевые моментыИ фиксация прибыли, и стоп-лоссЗакрытие операцииНаправление должно быть противоположно направлению позиции.


3.2 Подробное объяснение условных одиночных параметров

На платформе Inventor используйтеCreateConditionOrderФункции установки уровней стоп-лосса и тейк-профита:

В настоящее время платформа FMZ поддерживает условные ордера CreateConditionOrder в реальной торговле, но бэктестинг пока не поддерживает их.

  • CreateConditionOrder(symbol, side, amount, condition)
  • GetConditionOrder(id)
  • GetConditionOrders(symbol)
  • CancelConditionOrder(id)
  • GetHistoryConditionOrders(symbol, since, limit)
exchange.CreateConditionOrder(
    symbol,           // 交易对
    closeDirection,   // 平仓方向:closebuy 或 closesell
    positionSize,     // 平仓数量
    {
        "ConditionType": ORDER_CONDITION_TYPE_SL,  // 止损类型
        "SlTriggerPrice": stopLossPrice,           // 触发价格
        "SlOrderPrice": executionPrice             // 执行价格
    },
    "止损单"          // 订单备注
);

Описание параметров

  • Тип операции(closeDirection):

    • Используется для закрытия длинных позицийclosebuy
    • Используется для закрытия коротких позицийclosesell
  • ConditionType

    • ORDER_CONDITION_TYPE_SLСтоп-лосс
    • ORDER_CONDITION_TYPE_TPТейк-профит
  • TriggerPriceАктивируйте заказ при достижении этой цены.

  • OrderPrice (Цена исполнения)После активации транзакция будет завершена по этой цене.

Уведомление:В настоящее время условные ордера поддерживаются только в режиме реальной торговли, и необходимо обновить кастодиан.


3.3 Расчет цен стоп-лосса и тейк-профита

В коде мы динамически рассчитываем на основе направления открытия:

const stopLossPercent = 0.02;   // 2% 止损
const takeProfitPercent = 0.04; // 4% 止盈

if (openSide == 'openShort') {
    // 空仓:止损价格上涨,止盈价格下跌
    stopLossPrice = _N(entryPrice * (1 + stopLossPercent), pricePrecision);
    takeProfitPrice = _N(entryPrice * (1 - takeProfitPercent), pricePrecision);
} else {
    // 多仓:止损价格下跌,止盈价格上涨
    stopLossPrice = _N(entryPrice * (1 - stopLossPercent), pricePrecision);
    takeProfitPrice = _N(entryPrice * (1 + takeProfitPercent), pricePrecision);
}

Log("入场价格:", entryPrice);
Log("止损价格:", stopLossPrice);
Log("止盈价格:", takeProfitPrice);

3.4 Управление и мониторинг условных операторов

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

// 查询条件单状态
const slOrder = exchange.GetConditionOrder(stopLossOrderId);
const tpOrder = exchange.GetConditionOrder(takeProfitOrderId);

Log("止损单状态:", slOrder.Status);
Log("止盈单状态:", tpOrder.Status);
Log("状态说明: 0=活跃, 1=已触发, -1=不存在");

Логика обработки состояний

if (slStatus == 1 && tpStatus == 0) {
    // 止损被触发,取消止盈单
    Log("🛑 止损单已触发,取消止盈单");
    exchange.CancelConditionOrder(takeProfitOrderId);
    _G('status', 'finished');
    
} else if (tpStatus == 1 && slStatus == 0) {
    // 止盈被触发,取消止损单
    Log("🎯 止盈单已触发,取消止损单");
    exchange.CancelConditionOrder(stopLossOrderId);
    _G('status', 'finished');
    
} else if (slStatus == 0 && tpStatus == 0) {
    // 两个单都还活跃,继续监控
    Log("⏳ 止盈止损单都活跃,继续监控");
}

Ключевые функции

  • Платформа изобретателя обеспечиваетGetConditionOrderЭта функция позволяет просматривать текущий статус всех условных заказов.
  • Если срабатывает ордер «тейк-профит» или «стоп-лосс» с одной стороны, условный ордер в противоположном направлении следует немедленно отменить.
  • Его можно использоватьCancelConditionOrderДля функции в качестве входных данных требуется только номер заказа.

Примечания

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

IV. Интеграция полного рабочего процесса

4.1 Управление статусом транзакции

В демонстрационном рабочем процессе мы используем конечный автомат для управления всем циклом транзакции:

const savestatus = _G('status');

// 初始化状态
if (!savestatus) {
    _G('status', 'unfinished');
}

Три штата

  1. unfinishedОткрытых позиций пока нет; процесс открытия позиции необходимо завершить.
  2. monitorПозиции открыты, установлены стоп-лосс и тейк-профит ордера; сейчас идет этап мониторинга.
  3. finishedТранзакция завершена, готовится сброс статуса.

4.2 Полный процесс транзакции

Благодаря интеграции ордеров на процентное соотношение капитала с ордерами стоп-лосс и тейк-профит мы получаем полноценный торговый процесс:

блок-схема

计算下单数量 → 执行开仓 → 设置止盈止损 → 监控持仓 → 交易完成

Реализация кода

// 状态1: 执行开仓
if (positionData.status == 'unfinished') {
    // 1. 开仓下单
    const openOrder = exchange.CreateOrder(symbol, dir, -1, positionSize);
    
    // 2. 等待订单成交
    Sleep(3000);
    const openOrderInfo = exchange.GetOrder(openOrder);
    
    // 3. 订单成交后设置止盈止损
    if (openOrderInfo.Status == ORDER_STATE_CLOSED) {
        const stopLossOrderId = exchange.CreateConditionOrder(...);
        const takeProfitOrderId = exchange.CreateConditionOrder(...);
        
        // 4. 保存订单ID并切换到监控状态
        _G('stopLossOrderId', stopLossOrderId);
        _G('takeProfitOrderId', takeProfitOrderId);
        _G('status', 'monitor');
    }
}

// 状态2: 监控止盈止损
if (positionData.status == 'monitor') {
    // 检查条件单状态,处理触发情况
    // ...
}

// 状态3: 交易完成
if (positionData.status == 'finished') {
    _G('status', 'unfinished'); // 重置状态,准备下次交易
}

Преимущества всего процесса

  • Это позволяет контролировать риск отдельных транзакций (через процент собственного капитала).
  • Кроме того, для защиты прибыли и ограничения убытков используются автоматические ордера «стоп-лосс» и «тейк-профит».
  • Весь процесс выполняется программно, что сокращает вмешательство человека и повышает согласованность транзакций.

V. Лучшие практики управления рисками

5.1 Рекомендации по настройке параметров

Коэффициент риска

  • Рекомендация для новичков: 2–3%
  • Опытный: 5-10%
  • Не будьте жадными и не ставьте слишком высокую цену.Установите в соответствии с вашей собственной толерантностью к риску

Коэффициент фиксации прибыли и стоп-лосс

  • Стоп-лосс: 1–3% (регулируйте в зависимости от волатильности валюты)
  • Тейк-профит: 2–6% (обычно в 1,5–2 раза больше стоп-лосса).
  • Его необходимо правильно настроить в соответствии с особенностями различных валют.

5.2 Тестирование и проверка

Полный список тестов

  • ✅ Верна ли рассчитанная величина?
  • ✅ Являются ли цены стоп-лосса и тейк-профита разумными?
  • ✅ Корректно ли срабатывает условный заказ?
  • ✅ Корректно ли происходит переключение состояний?
  • ✅ Адекватно ли реагируют на нестандартные ситуации?

Процесс тестирования

  1. Сначала проверьте всю логику в тестовой среде.
  2. Проводите реальные торговые тесты, используя небольшой капитал.
  3. Инвестируйте официальные средства только после того, как убедитесь в отсутствии проблем.

помнить: Только после тщательного тестирования его можно вводить в реальную торговлю; это основополагающий принцип количественной торговли.


6. Заключение

Итак, на этом завершается сегодняшнее обсуждение размещения ордеров с учётом процента от капитала и настроек стоп-лосса/тейк-профита. Этот рабочий процесс сочетает в себе контроль рисков с автоматическим исполнением, делая нашу торговлю более стандартизированной. Однако стиль торговли и толерантность к риску у всех разные, поэтому не забывайте корректировать параметры в соответствии со своими обстоятельствами. Если у вас возникнут какие-либо проблемы во время использования или у вас возникнут другие вопросы о количественной торговле, пожалуйста, свяжитесь с нами для консультации и обсуждения. Давайте вместе изучать и совершенствоваться.

Ссылка на исходный код: https://www.fmz.com/strategy/516459