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

Процентная доля правЭто означает, что количество заказов не фиксировано, а рассчитывается на основе фиксированного процента от общей суммы средств на счете.
Например:
Основные преимущества:
// 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. 获取当前价格
const ticker = exchange.GetTicker(symbol);
if (!ticker) {
return [{
json: {
success: false,
error: "获取价格信息失败"
}
}];
}
const currentPrice = ticker.Last; // 最新成交价
Log("当前价格:", currentPrice);
// 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. 检查限制
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);
Распространенные ошибки новичков:
Если указанные выше настройки неверны, появится уведомление о сбое заказа. Новичкам следует обратить на это особое внимание.

Многие путаются в направлении фиксации прибыли и стоп-лосса. Давайте проясним это:
| Тип холдингов | Операция по получению прибыли | Операция стоп-лосс |
|---|---|---|
| Несколько заказов | Продавайте, чтобы закрыть позиции, когда цены растут | Продавайте, чтобы закрыть позиции, когда цены падают. |
| Короткая позиция | Покупайте, чтобы закрыть позиции, когда цены падают | Покупайте, чтобы закрыть позицию, когда цены вырастут |
Ключевые моментыИ фиксация прибыли, и стоп-лоссЗакрытие операцииНаправление должно быть противоположно направлению позиции.
На платформе Inventor используйтеCreateConditionOrderФункции установки уровней стоп-лосса и тейк-профита:
В настоящее время платформа FMZ поддерживает условные ордера CreateConditionOrder в реальной торговле, но бэктестинг пока не поддерживает их.
exchange.CreateConditionOrder(
symbol, // 交易对
closeDirection, // 平仓方向:closebuy 或 closesell
positionSize, // 平仓数量
{
"ConditionType": ORDER_CONDITION_TYPE_SL, // 止损类型
"SlTriggerPrice": stopLossPrice, // 触发价格
"SlOrderPrice": executionPrice // 执行价格
},
"止损单" // 订单备注
);
Описание параметров:
Тип операции(closeDirection):
closebuyclosesellConditionType:
ORDER_CONDITION_TYPE_SLСтоп-лоссORDER_CONDITION_TYPE_TPТейк-профитTriggerPriceАктивируйте заказ при достижении этой цены.
OrderPrice (Цена исполнения)После активации транзакция будет завершена по этой цене.
Уведомление:В настоящее время условные ордера поддерживаются только в режиме реальной торговли, и необходимо обновить кастодиан.
В коде мы динамически рассчитываем на основе направления открытия:
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);
После настройки условных операторов нам также необходимо управлять ими и контролировать их:
// 查询条件单状态
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Для функции в качестве входных данных требуется только номер заказа.Примечания:
В демонстрационном рабочем процессе мы используем конечный автомат для управления всем циклом транзакции:
const savestatus = _G('status');
// 初始化状态
if (!savestatus) {
_G('status', 'unfinished');
}
Три штата:
Благодаря интеграции ордеров на процентное соотношение капитала с ордерами стоп-лосс и тейк-профит мы получаем полноценный торговый процесс:
блок-схема:
计算下单数量 → 执行开仓 → 设置止盈止损 → 监控持仓 → 交易完成
Реализация кода:
// 状态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'); // 重置状态,准备下次交易
}
Преимущества всего процесса:
Коэффициент риска:
Коэффициент фиксации прибыли и стоп-лосс:
Полный список тестов:
Процесс тестирования:
помнить: Только после тщательного тестирования его можно вводить в реальную торговлю; это основополагающий принцип количественной торговли.
Итак, на этом завершается сегодняшнее обсуждение размещения ордеров с учётом процента от капитала и настроек стоп-лосса/тейк-профита. Этот рабочий процесс сочетает в себе контроль рисков с автоматическим исполнением, делая нашу торговлю более стандартизированной. Однако стиль торговли и толерантность к риску у всех разные, поэтому не забывайте корректировать параметры в соответствии со своими обстоятельствами. Если у вас возникнут какие-либо проблемы во время использования или у вас возникнут другие вопросы о количественной торговле, пожалуйста, свяжитесь с нами для консультации и обсуждения. Давайте вместе изучать и совершенствоваться.
Ссылка на исходный код: https://www.fmz.com/strategy/516459