Quand Alpha Arena, le système de trading basé sur l’IA, est sorti, il a vraiment fait sensation. Les débutants ont trouvé que c’était une bonne opportunité de quantifier leur entrée, mais les plus expérimentés ont trouvé que c’était simple et ont voulu essayer.
Mais avec le marché baissier, tout s’est calmé. Les amis qui partageaient les bénéfices tous les jours ont baissé le ton, on pense qu’ils ont vécu ce qu’on appelle “une perte que l’IA ne peut pas sauver”.
Après un certain temps, le problème s’est révélé:
Le problème le plus important est que le stop loss n’est pas déclenché à temps. La stratégie de la version originale ne fait qu’un contrôle toutes les 3 minutes. Dans la chute rapide de la monnaie, 3 minutes suffisent pour que vous passiez d’une petite perte à une grande perte.
Qu’il s’agisse d’une monnaie relativement stable comme le BTC ou de toute sorte de pièces volatiles, le système utilise le même ensemble de paramètres et n’est pas du tout ciblé.
Le système n’apprend rien des transactions passées. Si vous perdez sur une devise aujourd’hui, vous devrez utiliser la même stratégie pour la revendre demain, sans aucune modification.
Les utilisateurs ne voient que des signaux d’achat et de vente, mais ils ne connaissent pas du tout la logique de jugement de l’IA et ne savent pas comment l’ajuster en cas de problème.
Les idées d’optimisation Toutes les logiques de la version originale sont compressées dans un déclencheur de 3 minutes, y compris l’analyse des données, la génération de signaux, l’exécution des transactions et la surveillance des risques. Cela entraîne une dépendance totale du contrôle des risques par rapport au cycle de la stratégie principale, avec un retard de réaction important.
La solution est de diviser le système en deux déclencheurs indépendants:
Le code-clé:
// 风控触发器的核心逻辑
function monitorPosition(coin) {
// 获取实时价格和持仓信息
const pos = exchange.GetPositions().find(p => p.Symbol.includes(coin));
const ticker = exchange.GetTicker();
const currentPrice = ticker.Last;
// 检查止盈止损条件
const exitPlan = _G(`exit_plan_${coin}_USDT.swap`);
if (exitPlan?.profit_target && exitPlan?.stop_loss) {
const shouldTP = isLong ? currentPrice >= exitPlan.profit_target : currentPrice <= exitPlan.profit_target;
const shouldSL = isLong ? currentPrice <= exitPlan.stop_loss : currentPrice >= exitPlan.stop_loss;
// 立即执行平仓
if (shouldTP || shouldSL) {
return closePosition(coin, pos, shouldTP ? "止盈" : "止损");
}
}
}
Cette amélioration a permis de réduire le délai de contrôle des risques de 3 minutes à 1 minute, ce qui a permis de réduire considérablement les pertes de points de glissement dans les environnements de forte volatilité.
Les idées d’optimisation La version originale est une transaction “amnésique” pour chaque monnaie, qui ne se souvient pas du tout de la performance historique. La nouvelle version établit un système d’analyse de l’historique des transactions complet, permettant à l’IA d’apprendre et d’optimiser à partir de l’expérience passée.
La conception de base comprend:
Le code-clé:
// 历史表现驱动的风险调整
function calculateRiskAllocation(baseRisk, performance, confidence) {
let finalRisk = baseRisk;
// 基于历史表现调整
if (performance.totalTrades >= 10) {
if (performance.winRate > 70 && performance.profitLossRatio > 1.5) {
finalRisk *= 1.3; // 表现优秀,增加30%资金
} else if (performance.winRate < 40 || performance.profitLossRatio < 1.0) {
finalRisk *= 0.6; // 表现较差,减少40%资金
}
}
// 基于方向偏好调整
const historicalBias = calculateDirectionBias(performance);
if (goingWithBias) finalRisk *= 1.1;
else if (goingAgainstBias) finalRisk *= 0.8;
return Math.max(200, Math.min(1500, finalRisk));
}
Les idées d’optimisation La version précédente utilisait un stop loss fixe de 1 à 2%, ce qui était peu efficace pour les différentes devises volatiles. La nouvelle version a introduit l’indicateur ATR, qui calcule la distance de stop loss en fonction de la dynamique de la volatilité réelle du marché.
Le code-clé:
// ATR动态止损计算
function calculateDynamicStop(entryPrice, isLong, marketData) {
const atr14 = marketData.longer_term_4hour.atr_14;
const currentPrice = marketData.current_price;
const atrRatio = atr14 / currentPrice;
// 动态调整止损距离
let stopDistance = Math.max(0.025, atrRatio * 2); // 最小2.5%
if (atrRatio > 0.05) stopDistance = Math.min(0.05, atrRatio * 2.5); // 高波动放宽
return isLong ? entryPrice * (1 - stopDistance) : entryPrice * (1 + stopDistance);
}
Les idées d’optimisation La version précédente ne traitait qu’une seule devise, la nouvelle version prend en charge l’analyse parallèle multi-devise, la distribution intelligente des fonds et la gestion des risques. Le système analyse simultanément toutes les devises, en fonction de la performance historique et des signaux techniques pour la hiérarchisation et la répartition des risques.
Le code-clé:
// 多币种决策处理
function processMultipleCoins(coinList, marketDataMap, performanceMap) {
const decisions = [];
coinList.forEach(coin => {
const performance = performanceMap[coin] || { totalTrades: 0 };
const technicalSignal = analyzeTechnicals(marketDataMap[coin]);
// 综合历史表现和技术分析
const decision = {
coin: coin,
signal: technicalSignal.signal,
confidence: technicalSignal.confidence,
risk_usd: calculateRiskAllocation(baseRisk, performance, technicalSignal.confidence),
historical_bias: performance.longWinProfit > performance.shortWinProfit * 1.5 ? "LONG" :
performance.shortWinProfit > performance.longWinProfit * 1.5 ? "SHORT" : "BALANCED",
justification: `技术面:${technicalSignal.reason};历史:${performance.winRate || 0}%胜率`
};
decisions.push(decision);
});
return decisions;
}
Les idées d’optimisation La version originale du processus décisionnel est entièrement noire, la nouvelle version établit un tableau de bord multidimensionnel, comprenant une table d’analyse des signaux d’IA, une surveillance des positions en temps réel, des statistiques de performance historique et des indicateurs stratégiques globaux, etc., afin que toutes les informations soient affichées avec transparence.
L’effet de l’optimisation des pertes:
Les effets de l’apprentissage de l’histoire
La transparence dans la prise de décision:
L’optimisation a principalement résolu les problèmes les plus fondamentaux de la version originale: le retard de blocage, le manque de capacité d’apprentissage et la non-transparence des décisions. Bien que cela ne soit pas encore parfait, cela a au moins permis au système d’évoluer d’un simple exécuteur d’indicateurs techniques à un assistant de négociation qui apprend et optimise.
Il s’agit avant tout de prouver une idée: trouver des problèmes, les analyser, les résoudre. Dans un marché en évolution rapide, les systèmes capables d’amélioration continue sont les plus précieux.