2
Suivre
319
Abonnés

Flux de travail en pratique : Gérez facilement les ordres de pourcentage d’actions et les mesures automatisées de prise de profit et de stop-loss

Créé le: 2025-11-12 10:58:07, Mis à jour le: 2025-11-15 12:45:08
comments   0
hits   219

Flux de travail en pratique : Gérez facilement les ordres de pourcentage d’actions et les mesures automatisées de prise de profit et de stop-loss

1. Introduction

Bonjour à tous, j’ai récemment reçu de nombreux retours d’amis concernant l’utilisation des flux de travail, et la question la plus fréquemment posée est…Pourcentage des droits et intérêtsetArrêt de l’arrêtConcernant les problèmes de configuration, beaucoup se demandent : « Je sais que je dois maîtriser les risques, mais comment calculer précisément la quantité de l’ordre en fonction des fonds disponibles sur mon compte ? De plus, comment paramétrer automatiquement les ordres stop-loss et take-profit après l’ouverture d’une position afin que le système gère les risques pour nous ? »

Aujourd’hui, nous allons aborder ces besoins pratiques et, en utilisant le code réel de la plateforme de quantification des inventeurs, expliquer en détail comment mettre en œuvre ces deux fonctions essentielles.


II. Explication détaillée du placement des ordres en fonction du pourcentage de participation

Flux de travail en pratique : Gérez facilement les ordres de pourcentage d’actions et les mesures automatisées de prise de profit et de stop-loss

2.1 Qu’est-ce que le placement d’ordres en pourcentage de capitaux propres ?

Pourcentage des droits et intérêtsCela signifie que le nombre d’ordres n’est pas fixe, mais calculé en fonction d’un pourcentage fixe du solde total du compte.

Par exemple

  • Le compte dispose de 10 000 USDT
  • Fixez le ratio de risque à 5 % (riskRatio = 0,05).
  • Le système utilisera un quota de 500 USDT pour ouvrir une position.

Avantages fondamentaux

  1. Les risques sont maîtrisésLe risque correspond à un pourcentage fixe pour chaque transaction, quel que soit le solde du compte.
  2. Taux d’utilisation du capital élevéLorsque les fonds du compte changent, la quantité commandée est automatiquement ajustée : elle augmente lorsque les fonds augmentent et diminue en conséquence lorsque les fonds diminuent.
  3. Très adaptableDes comptes adaptés à différentes tailles de capital

2.2 Logique de calcul complète et implémentation du code

Étape 1 : Obtenir les informations du compte

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

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

Points clésBalanceCe champ représente le solde disponible, qui sert de base au calcul.


Deuxième étape : Obtenir des informations sur le marché

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

Description des paramètres principaux

  • CtValValeur nominale du contrat (par exemple, la valeur nominale d’un contrat perpétuel ETH est de 0,01 ETH)
  • MinQtyquantité minimale de commande
  • MaxQtyQuantité maximale de commande
  • AmountPrecisionPrécision quantitative
  • PricePrecisionPrécision des prix

Attention particulièreAssurez-vous de vérifier si la devise que vous souhaitez échanger est disponible sur la plateforme.


Étape 3 : Obtenir le prix actuel

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

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

Étape 4 : Calculer le nombre de contrats

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

Résumé des formules de calcul

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

Étape 5 : Vérifier les restrictions

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

Erreurs courantes commises par les débutants

  • ❌ Le défaut de vérification de la quantité minimale de commande a entraîné l’échec de la commande.
  • ❌ Une gestion de précision incorrecte entraîne le rejet de l’ordre par la bourse.
  • ❌ Valeur nominale du contrat non prise en compte, erreur de calcul.

Si les paramètres ci-dessus sont incorrects, une notification d’échec de commande s’affichera. Les débutants doivent y prêter une attention particulière.


III. Explication détaillée des paramètres de prise de bénéfices et de stop loss

Flux de travail en pratique : Gérez facilement les ordres de pourcentage d’actions et les mesures automatisées de prise de profit et de stop-loss

3.1 La logique fondamentale de la prise de bénéfices et du stop-loss

Beaucoup de personnes sont confuses quant à la signification des ordres de prise de bénéfices et des ordres stop-loss. Clarifions cela :

Type de participations Opération de prise de bénéfices Opération stop loss
Commandes multiples Vendre pour clôturer les positions lorsque les prix augmentent Vendre pour clôturer les positions lorsque les prix baissent.
Position courte Achetez pour clôturer vos positions lorsque les prix baissent. Achetez pour clôturer la position lorsque les prix augmentent.

Points clésLes prises de bénéfices et les ordres stop-loss sont tous deuxOpération de fermetureLa direction doit être opposée à celle de la position.


3.2 Explication détaillée des paramètres uniques conditionnels

Sur la plateforme Inventor, utilisezCreateConditionOrderFonctions permettant de définir les niveaux de stop-loss et de take-profit :

Actuellement, la plateforme FMZ prend en charge les ordres conditionnels CreateConditionOrder en trading réel, mais les tests rétrospectifs ne les prennent pas encore en charge.

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

Description des paramètres

  • Type d’opération(closeDirection):

    • Utilisé pour clôturer les positions longuesclosebuy
    • Utilisé pour clôturer les positions courtesclosesell
  • ConditionType

    • ORDER_CONDITION_TYPE_SLStop Loss
    • ORDER_CONDITION_TYPE_TPPrenez vos bénéfices
  • Prix ​​de déclenchementActivez l’ordre lorsque ce prix sera atteint.

  • Prix ​​de l’ordre (Prix d’exécution)La transaction sera effectuée à ce prix après activation.

Avis:Actuellement, les ordres conditionnels ne sont pris en charge qu’en conditions de négociation réelles, et le dépositaire doit être mis à jour.


3.3 Calcul des prix de stop-loss et de take-profit

Dans le code, nous effectuons des calculs dynamiques en fonction de la direction d’ouverture :

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 Gestion et suivi des déclarations conditionnelles

Après avoir défini les instructions conditionnelles, nous devons également les gérer et les surveiller :

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

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

logique de gestion d’état

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

Fonctions clés

  • La plateforme Inventor fournitGetConditionOrderCette fonction vous permet de consulter l’état actuel de toutes les commandes conditionnelles.
  • Si un ordre de prise de profit ou un ordre stop-loss est déclenché d’un côté, l’ordre conditionnel dans la direction opposée doit être annulé immédiatement.
  • Il peut être utiliséCancelConditionOrderCette fonction ne nécessite que le numéro de commande en entrée.

À noter

  • Il est recommandé de vérifier régulièrement le statut des ordres conditionnels afin de s’assurer de leur bon fonctionnement.
  • Parfois, les fluctuations du marché sont trop rapides et les ordres conditionnels peuvent ne pas être exécutés à temps, auquel cas un traitement manuel est nécessaire.

IV. Intégration du flux de travail complet

4.1 Gestion de l’état des transactions

Dans le flux de travail de démonstration, nous utilisons une machine à états pour gérer l’ensemble du cycle de transaction :

const savestatus = _G('status');

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

Trois États

  1. unfinishedAucun poste n’est encore ouvert ; le processus d’ouverture des postes doit être terminé.
  2. monitorLes positions ont été ouvertes et les ordres stop-loss et take-profit ont été définis ; nous sommes actuellement en phase de surveillance.
  3. finishedTransaction terminée, préparation de la réinitialisation du statut.

4.2 Processus de transaction complet

En intégrant les ordres de pourcentage de capitalisation aux ordres stop-loss et take-profit, nous obtenons un flux de travail de trading complet :

organigramme

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

Implémentation du code

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

Avantages de l’ensemble du processus

  • Cela permet de contrôler le risque des transactions individuelles (par le biais du pourcentage de fonds propres).
  • De plus, des ordres automatisés de stop-loss et de take-profit sont utilisés pour protéger les profits et limiter les pertes.
  • L’ensemble du processus est exécuté de manière automatisée, réduisant ainsi l’intervention humaine et améliorant la cohérence des transactions.

V. Meilleures pratiques en matière de contrôle des risques

5.1 Recommandations relatives au paramétrage

Rapport de risque

  • Suggestion pour débutants : 2 à 3 %
  • Expérimentés : 5 à 10 %
  • Ne soyez pas gourmand et ne le fixez pas trop haut.Définissez-le en fonction de votre propre tolérance au risque

Ratio de prise de bénéfices et de stop-loss

  • Seuil de perte : 1 à 3 % (à ajuster en fonction de la volatilité des devises)
  • Objectif de profit : 2 à 6 % (généralement 1,5 à 2 fois le stop loss).
  • Il est nécessaire de le paramétrer correctement en fonction des caractéristiques des différentes devises.

5.2 Tests et vérification

Liste complète des tests

  • ✅ La quantité calculée est-elle correcte ?
  • ✅ Les prix des ordres stop-loss et take-profit sont-ils raisonnables ?
  • ✅ L’ordre conditionnel est-il déclenché correctement ?
  • ✅ Le changement d’état est-il correct ?
  • ✅ La gestion des situations anormales est-elle adéquate ?

Processus de test

  1. Tout d’abord, vérifiez toute la logique dans l’environnement de test.
  2. Effectuez des tests de trading en conditions réelles avec un petit capital.
  3. N’investissez des fonds officiels qu’après vous être assuré qu’il n’y a pas de problèmes.

souviens-toiCe n’est qu’après des tests approfondis qu’il convient de le mettre en pratique en conditions réelles de trading ; il s’agit d’un principe fondamental du trading quantitatif.


VI. Conclusion

Voilà qui conclut notre discussion d’aujourd’hui sur le placement d’ordres en pourcentage de capital et la configuration des stops et take-profits. Ce processus combine la maîtrise des risques et l’exécution automatisée, ce qui standardise nos transactions. Cependant, chaque trader a son propre style et sa propre tolérance au risque ; n’oubliez donc pas d’adapter les paramètres à votre situation. Si vous rencontrez des difficultés lors de l’utilisation ou si vous avez des questions sur le trading quantitatif, n’hésitez pas à nous contacter pour obtenir des conseils et en discuter. Approfondissons ensemble nos connaissances.

Référence du code source : https://www.fmz.com/strategy/516459