1. はじめに
みなさんこんにちは。最近、ワークフローの使用法について友人から多くのフィードバックを受け取っていますが、最もよく聞かれる質問は...権利の割合そしてストップ・ストップ設定の問題に関して、多くの人が「リスク管理が必要なのは分かっていますが、口座資金に基づいて注文数量を正確にどのように計算すればよいのでしょうか?また、ポジションを開いた後にストップロス注文とテイクプロフィット注文を自動的に設定して、システムがリスクを管理できるようにするにはどうすればよいでしょうか?」と尋ねます。
今日は、これらの実際的なニーズに対処し、Inventors Quantification Platform の実際のコードを使用して、これら 2 つのコア機能を実装する方法を詳しく説明します。
II. 株式保有比率に基づく注文発注の詳細説明
2.1 株式比率注文とは何ですか?
権利の割合つまり、注文数は固定ではなく、アカウント内の総資金の一定の割合に基づいて計算されます。
例えば:
- アカウントには10,000 USDTがある
- リスク比率を 5% (riskRatio = 0.05) に設定します。
- システムはポジションを開くために 500 USDT の割り当てを使用します。
コアとなる利点:
- リスクはコントロールできますリスクは、口座残高に関係なく、取引ごとに一定の割合で発生します。
- 高い資本稼働率アカウント資金が変更されると、注文数量は自動的に調整されます。つまり、資金が増えると注文数量は増加し、資金が減るとそれに応じて注文数量は減少します。
- 適応性が高いさまざまな資本規模に適した口座
2.2 完全な計算ロジックとコード実装
ステップ1: アカウント情報を取得する
javascript
// 1. 获取账户信息
const accountInfo = exchange.GetAccount();
if (!accountInfo) {
return [{
json: {
success: false,
error: "获取账户信息失败"
}
}];
}
const availBalance = accountInfo.Balance; // 可用余额
Log("账户可用余额:", availBalance);
要点:Balanceこのフィールドは計算の基礎となる利用可能な残高を表します。
ステップ2:市場情報の入手
javascript
// 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: 現在の価格を取得する
javascript
// 3. 获取当前价格
const ticker = exchange.GetTicker(symbol);
if (!ticker) {
return [{
json: {
success: false,
error: "获取价格信息失败"
}
}];
}
const currentPrice = ticker.Last; // 最新成交价
Log("当前价格:", currentPrice);
ステップ4: 契約数を計算する
javascript
// 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: 制限事項を確認する
javascript
// 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 条件付き単一パラメータの詳細な説明
発明者プラットフォームでは、CreateConditionOrderストップロスとテイクプロフィットのレベルを設定する機能:
現在、FMZ プラットフォームはライブ取引で CreateConditionOrder 条件付き注文をサポートしていますが、バックテストではまだサポートされていません。
- CreateConditionOrder(symbol, side, amount, condition)
- GetConditionOrder(id)
- GetConditionOrders(symbol)
- CancelConditionOrder(id)
- GetHistoryConditionOrders(symbol, since, limit)
javascript
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利益確定
-
トリガー価格この価格に達したら注文を有効にします。
-
**注文価格(執行価格)**アクティベーション後、この価格で取引が完了します。
**知らせ:**現在、条件付き注文はライブ取引でのみサポートされており、カストディアンを更新する必要があります。
3.3 ストップロス価格とテイクプロフィット価格の計算
コードでは、開く方向に基づいて動的に計算します。
javascript
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 条件文の管理と監視
条件文を設定したら、それらを管理および監視する必要もあります。
javascript
// 查询条件单状态
const slOrder = exchange.GetConditionOrder(stopLossOrderId);
const tpOrder = exchange.GetConditionOrder(takeProfitOrderId);
Log("止损单状态:", slOrder.Status);
Log("止盈单状态:", tpOrder.Status);
Log("状态说明: 0=活跃, 1=已触发, -1=不存在");
状態処理ロジック:
javascript
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 トランザクションステータス管理
サンプル ワークフローでは、ステート マシンを使用してトランザクション サイクル全体を管理します。
javascript
const savestatus = _G('status');
// 初始化状态
if (!savestatus) {
_G('status', 'unfinished');
}
3つの州:
- unfinishedまだポジションは開かれていません。ポジションを開くプロセスを完了する必要があります。
- monitorポジションが開かれ、ストップロスと利益確定の注文が設定され、現在は監視段階にあります。
- finishedトランザクションが完了しました。ステータスをリセットする準備をしています。
4.2 取引プロセスを完了する
株式パーセンテージ注文をストップロス注文およびテイクプロフィット注文と統合することで、完全な取引ワークフローが実現します。
フローチャート:
计算下单数量 → 执行开仓 → 设置止盈止损 → 监控持仓 → 交易完成
コードの実装:
javascript
// 状态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 テストと検証
完全なテストリスト:
- ✅ 計算された数量は正しいですか?
- ✅ ストップロスとテイクプロフィットの価格は妥当ですか?
- ✅ 条件付き注文は正しくトリガーされていますか?
- ✅ 状態の切り替えは正しいですか?
- ✅ 異常事態への対応は適切ですか?
テストプロセス:
- まず、テスト環境ですべてのロジックを検証します。
- 少額の資本を使用してライブ取引テストを実施します。
- 問題がないことを確認した上で正式な資金のみを投資してください。
覚えて: 徹底的にテストした後にのみ実際の取引に投入する必要があります。これは定量取引の基本原則です。
VI. 結論
さて、本日は株式比率注文の発注と損切り/利益確定の設定について説明しました。このワークフローはリスク管理と自動執行を組み合わせることで、取引の標準化を実現します。ただし、取引スタイルやリスク許容度は人それぞれ異なるため、ご自身の状況に合わせてパラメータを調整することを忘れないでください。ご利用中に問題が発生したり、クオンツ取引についてご質問がある場合は、お気軽にお問い合わせください。ご相談・ご説明いたします。一緒に探求し、改善していきましょう。
ソースコード参照: https://www.fmz.com/strategy/516459
- 1


