
みなさんこんにちは。最近、ワークフローの使用法について友人から多くのフィードバックを受け取っていますが、最もよく聞かれる質問は…権利の割合そしてストップ・ストップ設定の問題に関して、多くの人が「リスク管理が必要なのは分かっていますが、口座資金に基づいて注文数量を正確にどのように計算すればよいのでしょうか?また、ポジションを開いた後にストップロス注文とテイクプロフィット注文を自動的に設定して、システムがリスクを管理できるようにするにはどうすればよいでしょうか?」と尋ねます。
今日は、これらの実際的なニーズに対処し、Inventors Quantification Platform の実際のコードを使用して、これら 2 つのコア機能を実装する方法を詳しく説明します。

権利の割合つまり、注文数は固定ではなく、アカウント内の総資金の一定の割合に基づいて計算されます。
例えば:
コアとなる利点:
// 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);
初心者が犯しがちな間違い:
上記の設定が間違っていると、注文失敗の通知が表示されます。これは初心者が特に注意する必要がある点です。

多くの人が利益確定と損切りの方向について混乱しています。ここで明確にしておきましょう。
| 保有資産の種類 | 利益確定操作 | ストップロス操作 |
|---|---|---|
| 複数注文 | 価格が上昇したらポジションをクローズするために売る | 価格が下がったらポジションをクローズするために売ります。 |
| ショートポジション | 価格が下落したときにポジションをクローズするために購入する | 価格が上昇したらポジションを閉じるために買う |
要点利益確定と損切りはどちらも閉鎖操作方向は位置の方向と反対にする必要があります。
発明者プラットフォームでは、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利益確定トリガー価格この価格に達したら注文を有効にします。
注文価格(執行価格)アクティベーション後、この価格で取引が完了します。
知らせ:現在、条件付き注文はライブ取引でのみサポートされており、カストディアンを更新する必要があります。
コードでは、開く方向に基づいて動的に計算します。
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');
}
3つの州:
株式パーセンテージ注文をストップロス注文およびテイクプロフィット注文と統合することで、完全な取引ワークフローが実現します。
フローチャート:
计算下单数量 → 执行开仓 → 设置止盈止损 → 监控持仓 → 交易完成
コードの実装:
// 状态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