
Xin chào mọi người, gần đây tôi nhận được rất nhiều phản hồi từ bạn bè về cách sử dụng quy trình làm việc và câu hỏi thường gặp nhất là…Tỷ lệ phần trăm quyền lợiVàStop LossVề vấn đề thiết lập, nhiều người thắc mắc: “Tôi biết mình cần kiểm soát rủi ro, nhưng chính xác thì làm thế nào để tính toán khối lượng lệnh dựa trên số dư tài khoản? Ngoài ra, làm thế nào để tự động đặt lệnh cắt lỗ và chốt lời sau khi mở vị thế để hệ thống có thể quản lý rủi ro cho chúng tôi?”
Hôm nay, chúng tôi sẽ giải quyết những nhu cầu thực tế này và giải thích chi tiết cách triển khai hai chức năng cốt lõi này bằng cách sử dụng mã thực tế từ Nền tảng định lượng của nhà phát minh.

Tỷ lệ phần trăm quyền lợiĐiều này có nghĩa là số lượng lệnh không cố định mà được tính toán dựa trên tỷ lệ phần trăm cố định của tổng số tiền trong tài khoản.
Ví dụ:
Ưu điểm cốt lõi:
// 1. 获取账户信息
const accountInfo = exchange.GetAccount();
if (!accountInfo) {
return [{
json: {
success: false,
error: "获取账户信息失败"
}
}];
}
const availBalance = accountInfo.Balance; // 可用余额
Log("账户可用余额:", availBalance);
Những điểm chính:BalanceTrường này biểu thị số dư khả dụng, là cơ sở để tính toán.
// 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}`
}
}];
}
Mô tả tham số cốt lõi:
CtValGiá trị thực của hợp đồng (ví dụ: giá trị thực của hợp đồng ETH vĩnh viễn là 0,01 ETH)MinQtySố lượng đặt hàng tối thiểuMaxQtySố lượng đặt hàng tối đaAmountPrecisionĐộ chính xác về số lượngPricePrecisionĐộ chính xác của giáSự chú ý đặc biệtHãy kiểm tra xem loại tiền tệ bạn muốn giao dịch có tồn tại trên sàn giao dịch hay không.
// 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);
Tóm tắt các công thức tính toán:
合约张数 = (账户余额 × 风险比例 ÷ 当前价格) ÷ 合约面值
// 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);
Những sai lầm thường gặp của người mới bắt đầu:
Nếu các thiết lập trên không chính xác, thông báo đơn hàng không thành công sẽ xuất hiện. Đây là điều mà người mới bắt đầu cần đặc biệt lưu ý.

Nhiều người còn mơ hồ về hướng chốt lời và dừng lỗ. Chúng ta hãy cùng làm rõ vấn đề này:
| Loại hình nắm giữ | Hoạt động thu lợi nhuận | Hoạt động dừng lỗ |
|---|---|---|
| Nhiều đơn hàng | Bán để đóng vị thế khi giá tăng | Bán để đóng vị thế khi giá giảm. |
| Vị thế bán khống | Mua để đóng vị thế khi giá giảm | Mua để đóng vị thế khi giá tăng |
Những điểm chínhCả chốt lời và dừng lỗ đềuHoạt động đóng cửaHướng phải ngược với hướng của vị trí.
Trên nền tảng nhà phát minh, hãy sử dụngCreateConditionOrderChức năng thiết lập mức dừng lỗ và chốt lời:
Hiện tại, nền tảng FMZ hỗ trợ lệnh có điều kiện CreateConditionOrder trong giao dịch trực tiếp, nhưng tính năng kiểm tra ngược vẫn chưa hỗ trợ.
exchange.CreateConditionOrder(
symbol, // 交易对
closeDirection, // 平仓方向:closebuy 或 closesell
positionSize, // 平仓数量
{
"ConditionType": ORDER_CONDITION_TYPE_SL, // 止损类型
"SlTriggerPrice": stopLossPrice, // 触发价格
"SlOrderPrice": executionPrice // 执行价格
},
"止损单" // 订单备注
);
Mô tả tham số:
Loại hoạt động(closeDirection):
closebuyclosesellConditionType:
ORDER_CONDITION_TYPE_SLDừng lỗORDER_CONDITION_TYPE_TPChốt lờiTriggerPriceKích hoạt lệnh khi đạt đến mức giá này.
OrderPrice (Giá thực hiện)Giao dịch sẽ được hoàn tất ở mức giá này sau khi kích hoạt.
Để ý:Hiện tại, lệnh có điều kiện chỉ được hỗ trợ trong giao dịch trực tiếp và người giám sát cần phải được cập nhật.
Trong mã, chúng tôi tính toán động dựa trên hướng mở:
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);
Sau khi thiết lập các câu lệnh có điều kiện, chúng ta cũng cần quản lý và theo dõi chúng:
// 查询条件单状态
const slOrder = exchange.GetConditionOrder(stopLossOrderId);
const tpOrder = exchange.GetConditionOrder(takeProfitOrderId);
Log("止损单状态:", slOrder.Status);
Log("止盈单状态:", tpOrder.Status);
Log("状态说明: 0=活跃, 1=已触发, -1=不存在");
Logic xử lý trạng thái:
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("⏳ 止盈止损单都活跃,继续监控");
}
Chức năng quan trọng:
GetConditionOrderChức năng này cho phép bạn xem trạng thái hiện tại của tất cả các lệnh có điều kiện.CancelConditionOrderChức năng này chỉ yêu cầu nhập số đơn hàng.Lưu ý:
Trong quy trình trình diễn, chúng tôi sử dụng máy trạng thái để quản lý toàn bộ chu kỳ giao dịch:
const savestatus = _G('status');
// 初始化状态
if (!savestatus) {
_G('status', 'unfinished');
}
Ba tiểu bang:
Bằng cách tích hợp các lệnh phần trăm vốn chủ sở hữu với các lệnh dừng lỗ và chốt lời, chúng ta có quy trình giao dịch hoàn chỉnh:
biểu đồ dòng chảy:
计算下单数量 → 执行开仓 → 设置止盈止损 → 监控持仓 → 交易完成
Triển khai mã:
// 状态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'); // 重置状态,准备下次交易
}
Ưu điểm của toàn bộ quá trình:
Tỷ lệ rủi ro:
Tỷ lệ chốt lời và dừng lỗ:
Danh sách kiểm tra đầy đủ:
Quy trình thử nghiệm:
nhớ:Chỉ sau khi thử nghiệm kỹ lưỡng mới nên đưa vào giao dịch trực tiếp; đây là nguyên tắc cơ bản của giao dịch định lượng.
Vậy là buổi thảo luận hôm nay về đặt lệnh tỷ lệ phần trăm vốn chủ sở hữu và thiết lập lệnh dừng lỗ/chốt lời đã kết thúc. Quy trình làm việc này kết hợp kiểm soát rủi ro với thực hiện tự động, giúp giao dịch của chúng ta được chuẩn hóa hơn. Tuy nhiên, phong cách giao dịch và khả năng chịu rủi ro của mỗi người là khác nhau, vì vậy hãy nhớ điều chỉnh các thông số cho phù hợp với hoàn cảnh của bạn. Nếu bạn gặp bất kỳ vấn đề nào trong quá trình sử dụng hoặc có bất kỳ câu hỏi nào khác về giao dịch định lượng, vui lòng liên hệ với chúng tôi để được tư vấn và thảo luận. Hãy cùng nhau khám phá và cải thiện.
Mã nguồn tham khảo: https://www.fmz.com/strategy/516459