2
konzentrieren Sie sich auf
319
Anhänger

Workflow in der Praxis: Einfache Verwaltung von Equity Percentage Orders und automatisierten Take-Profit- und Stop-Loss-Orders

Erstellt in: 2025-11-12 10:58:07, aktualisiert am: 2025-11-15 12:45:08
comments   0
hits   219

Workflow in der Praxis: Einfache Verwaltung von Equity Percentage Orders und automatisierten Take-Profit- und Stop-Loss-Orders

1. Einleitung

Hallo zusammen, ich habe in letzter Zeit viel Feedback von Freunden zur Workflow-Nutzung erhalten, und die am häufigsten gestellte Frage lautet…Prozentsatz der AnsprücheUndStopp-Stopp-VerlustViele fragen sich bezüglich der Einrichtung: „Ich weiß, dass ich das Risiko kontrollieren muss, aber wie genau berechne ich die Ordermenge basierend auf dem Kontoguthaben? Und wie kann ich nach dem Eröffnen einer Position automatisch Stop-Loss- und Take-Profit-Orders setzen, damit das System das Risiko für uns managen kann?“

Heute werden wir auf diese praktischen Anforderungen eingehen und anhand des tatsächlichen Codes der Inventors Quantification Platform detailliert erklären, wie diese beiden Kernfunktionen implementiert werden können.


II. Detaillierte Erläuterung der Auftragserteilung basierend auf dem Eigenkapitalanteil

Workflow in der Praxis: Einfache Verwaltung von Equity Percentage Orders und automatisierten Take-Profit- und Stop-Loss-Orders

2.1 Was ist die prozentuale Beteiligung an der Auftragserteilung?

Prozentsatz der AnsprücheDies bedeutet, dass die Anzahl der Aufträge nicht festgelegt ist, sondern auf Basis eines festen Prozentsatzes des Gesamtguthabens auf dem Konto berechnet wird.

Zum Beispiel

  • Das Konto verfügt über 10.000 USDT.
  • Das Risikoverhältnis wird auf 5 % festgelegt (Risikoverhältnis = 0,05).
  • Das System verwendet ein Kontingent von 500 USDT, um eine Position zu eröffnen.

Kernvorteile

  1. Risiken sind zu kontrollierenDas Risiko beträgt für jede Transaktion einen festen Prozentsatz, unabhängig vom Kontostand.
  2. Hohe KapitalauslastungsrateBei Änderungen des Kontoguthabens wird die Bestellmenge automatisch angepasst – die Bestellmenge erhöht sich bei steigendem Guthaben und verringert sich entsprechend bei sinkendem Guthaben.
  3. Äußerst anpassungsfähigKonten, die für unterschiedliche Kapitalgrößen geeignet sind

2.2 Vollständige Berechnungslogik und Code-Implementierung

Schritt 1: Kontoinformationen einholen

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

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

Wichtigste PunkteBalanceDas Feld stellt das verfügbare Guthaben dar, das die Grundlage für die Berechnung bildet.


Zweiter Schritt: Marktinformationen beschaffen

// 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}` 
        } 
    }];
}

Kernparameterbeschreibung

  • CtValNominalwert des Kontrakts (z. B. beträgt der Nominalwert eines ETH-Perpetual-Kontrakts 0,01 ETH)
  • MinQtyMindestbestellmenge
  • MaxQtyMaximale Bestellmenge
  • AmountPrecisionMengengenauigkeit
  • PricePrecisionPreisgenauigkeit

Besondere AufmerksamkeitPrüfen Sie unbedingt, ob die Währung, die Sie handeln möchten, an der Börse verfügbar ist.


Schritt 3: Ermitteln Sie den aktuellen Preis

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

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

Schritt 4: Berechnen Sie die Anzahl der Verträge.

// 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);

Zusammenfassung der Berechnungsformeln

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

Schritt 5: Beschränkungen prüfen

// 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);

Häufige Fehler von Anfängern

  • ❌ Die Nichtbeachtung der Mindestbestellmenge führte zum Scheitern der Bestellung.
  • ❌ Unsachgemäße Handhabung führt zur Ablehnung der Bestellung durch die Börse.
  • ❌ Der Nennwert des Vertrags wurde nicht berücksichtigt, Berechnungsfehler.

Sind die oben genannten Einstellungen fehlerhaft, erscheint eine Benachrichtigung über einen fehlgeschlagenen Auftrag. Anfänger sollten dies besonders beachten.


III. Detaillierte Erläuterung der Gewinnmitnahme- und Stop-Loss-Einstellungen

Workflow in der Praxis: Einfache Verwaltung von Equity Percentage Orders und automatisierten Take-Profit- und Stop-Loss-Orders

3.1 Die Kernlogik von Gewinnmitnahmen und Stop-Loss-Orders

Viele Anleger sind bezüglich der Richtung von Gewinnmitnahmen und Stop-Loss-Orders verunsichert. Lassen Sie uns das klären:

Art der Beteiligungen Gewinnmitnahme Stop-Loss-Operation
Mehrere Bestellungen Verkaufen Sie, um Positionen zu schließen, wenn die Kurse steigen. Verkaufen Sie, um Positionen zu schließen, wenn die Kurse fallen.
Short-Position Kaufen Sie, um Positionen zu schließen, wenn die Kurse fallen. Kaufen Sie, um die Position zu schließen, wenn die Kurse steigen.

Wichtigste PunkteSowohl Gewinnmitnahmen als auch Stop-Loss-Orders sindSchließvorgangDie Richtung sollte der Richtung der Position entgegengesetzt sein.


3.2 Detaillierte Erläuterung bedingter Einzelparameter

Auf der Erfinderplattform verwendenCreateConditionOrderFunktionen zum Festlegen von Stop-Loss- und Take-Profit-Niveaus:

Aktuell unterstützt die FMZ-Plattform bedingte Aufträge vom Typ CreateConditionOrder im Live-Handel, jedoch noch nicht im Backtesting.

  • 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             // 执行价格
    },
    "止损单"          // 订单备注
);

Parameterbeschreibung

  • Operationsart(closeDirection):

    • Wird zum Schließen von Long-Positionen verwendetclosebuy
    • Wird zum Schließen von Short-Positionen verwendetclosesell
  • ConditionType

    • ORDER_CONDITION_TYPE_SLStop-Loss
    • ORDER_CONDITION_TYPE_TPGewinnmitnahme
  • AuslöserpreisAktivieren Sie den Auftrag, sobald dieser Preis erreicht ist.

  • Orderpreis (Ausführungspreis)Die Transaktion wird nach der Aktivierung zu diesem Preis abgeschlossen.

Beachten:Derzeit werden bedingte Aufträge nur im Live-Handel unterstützt, und der Depotverwalter muss aktualisiert werden.


3.3 Berechnung von Stop-Loss- und Take-Profit-Preisen

Im Code berechnen wir dynamisch basierend auf der Öffnungsrichtung:

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 Verwaltung und Überwachung bedingter Anweisungen

Nachdem die bedingten Anweisungen eingerichtet sind, müssen wir sie auch verwalten und überwachen:

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

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

Logik zur Zustandsverwaltung

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("⏳ 止盈止损单都活跃,继续监控");
}

Wichtige Funktionen

  • Die Erfinderplattform bietetGetConditionOrderDiese Funktion ermöglicht es Ihnen, den aktuellen Status aller bedingten Aufträge einzusehen.
  • Wird auf der einen Seite ein Take-Profit- oder Stop-Loss-Auftrag ausgelöst, sollte der bedingte Auftrag in der entgegengesetzten Richtung umgehend storniert werden.
  • Es kann verwendet werdenCancelConditionOrderDie Funktion benötigt lediglich die Bestellnummer als Eingabe.

Hinweise

  • Es wird empfohlen, den Status bedingter Aufträge regelmäßig zu überprüfen, um sicherzustellen, dass sie ordnungsgemäß funktionieren.
  • Manchmal erfolgen die Marktschwankungen zu schnell, sodass bedingte Aufträge möglicherweise nicht rechtzeitig ausgeführt werden können. In diesem Fall ist eine manuelle Bearbeitung erforderlich.

IV. Integration des gesamten Arbeitsablaufs

4.1 Transaktionsstatusverwaltung

Im Demonstrationsablauf verwenden wir einen Zustandsautomaten, um den gesamten Transaktionszyklus zu verwalten:

const savestatus = _G('status');

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

Drei Staaten

  1. unfinishedEs ist noch keine Stelle ausgeschrieben; der Prozess zur Stellenausschreibung muss noch abgeschlossen werden.
  2. monitorPositionen wurden eröffnet und Stop-Loss- sowie Take-Profit-Orders wurden gesetzt; befinden sich nun in der Überwachungsphase.
  3. finishedTransaktion abgeschlossen, Status wird zurückgesetzt.

4.2 Vollständiger Transaktionsprozess

Durch die Integration von Equity-Prozent-Orders mit Stop-Loss- und Take-Profit-Orders verfügen wir über einen vollständigen Handelsworkflow:

Flussdiagramm

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

Code-Implementierung

// 状态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'); // 重置状态,准备下次交易
}

Vorteile des gesamten Prozesses

  • Dies kontrolliert das Risiko einzelner Transaktionen (über den Eigenkapitalanteil).
  • Darüber hinaus werden automatisierte Stop-Loss- und Take-Profit-Orders eingesetzt, um Gewinne zu sichern und Verluste zu begrenzen.
  • Der gesamte Prozess wird programmatisch ausgeführt, wodurch menschliche Eingriffe reduziert und die Konsistenz der Transaktionen verbessert werden.

V. Bewährte Verfahren zur Risikokontrolle

5.1 Empfehlungen zur Parametereinstellung

Risikoverhältnis

  • Vorschlag für Anfänger: 2-3 %
  • Erfahren: 5-10%
  • Sei nicht gierig und setze ihn nicht zu hoch an.Legen Sie die Werte entsprechend Ihrer eigenen Risikotoleranz fest.

Gewinnmitnahme- und Stop-Loss-Verhältnis

  • Stop-Loss: 1-3% (an die Währungsvolatilität anpassen)
  • Gewinnmitnahme: 2-6% (üblicherweise das 1,5- bis 2-fache des Stop-Loss).
  • Es ist notwendig, die Einstellungen entsprechend den Eigenschaften der verschiedenen Währungen anzupassen.

5.2 Testen und Verifizieren

Checkliste für den vollständigen Test

  • ✅ Stimmt die berechnete Menge?
  • ✅ Sind die Stop-Loss- und Take-Profit-Preise angemessen?
  • ✅ Wird die bedingte Order korrekt ausgelöst?
  • ✅ Ist der Zustandswechsel korrekt?
  • ✅ Ist der Umgang mit Ausnahmesituationen angemessen?

Testprozess

  1. Zuerst sollte die gesamte Logik in der Testumgebung überprüft werden.
  2. Führen Sie Live-Trading-Tests mit einem geringen Kapitaleinsatz durch.
  3. Investieren Sie offizielle Gelder erst, nachdem Sie sichergestellt haben, dass keine Probleme bestehen.

erinnernErst nach gründlichen Tests sollte es im Live-Handel eingesetzt werden; dies ist ein Grundprinzip des quantitativen Handels.


VI. Fazit

Okay, damit ist unsere heutige Diskussion über die Platzierung von Equity-Prozent-Orders und die Einstellungen für Stop-Loss und Take-Profit abgeschlossen. Dieser Workflow kombiniert Risikokontrolle mit automatisierter Ausführung und standardisiert so unser Trading. Da jedoch jeder Trader einen anderen Stil und eine andere Risikotoleranz hat, denken Sie bitte daran, die Parameter an Ihre individuellen Gegebenheiten anzupassen. Sollten Sie während der Anwendung auf Probleme stoßen oder weitere Fragen zum quantitativen Trading haben, kontaktieren Sie uns gerne für eine Beratung. Lassen Sie uns gemeinsam Neues entdecken und uns verbessern.

Quellcode-Referenz: https://www.fmz.com/strategy/516459