{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}再过10个月

2026年8月5日1 次浏览来源:Dev.to阅读原文

正文保留英文原文(机翻易破坏代码与排版),标题/摘要已提供中文

Casi todo bot de trading tiene una línea que decide cuánto comprar.

Suele parecer trivial: si arriesgo el 1% de mi saldo y mi stop está a 1000 dólares de distancia, la cantidad sale de una división.

El cálculo es de primaria.

Lo que no es de primaria es hacer que ese número quepa en las restricciones del exchange.

Ahí es donde se pierde dinero, y de formas que no aparecen en los logs.

El patrón que multiplica tu riesgo Esto está en incontables bots, y estuvo en uno mío: La intención es defensiva: "que nunca salga cero".

El efecto es el contrario.

Si la cantidad teórica sale contratos, la trunca a , y entonces la fuerza a uno.

Acabas de abrir una posición diez veces más grande que la que autorizaste.

Con números concretos: saldo de 500 USD, riesgo del 1% (5 USD), entrada en 50 000, stop en 45 000, contratos de 0.01.

El riesgo real de ese contrato único es de 50 USD — diez veces el presupuesto.

Y ocurre en silencio: la orden se acepta, el bot sigue, no hay excepción que capturar.

Lo peor es que no es un caso raro.

Pasa siempre que el saldo es pequeño o el stop es ancho, es decir, exactamente cuando menos margen tienes para equivocarte.

Los otros dos que cuestan dinero Ignorar el nocional mínimo.

El exchange rechaza la orden por valor mínimo, el bot lo registra como error de red, y nadie se entera de que esa señal nunca se operó.

El backtest la contó; la cuenta no.

No reservar para comisiones.

Con un stop ajustado, las comisiones de ida y vuelta pueden ser la mitad del riesgo real.

Si dimensionas contra la distancia al stop y nada más, arriesgas sistemáticamente más de lo que crees.

Cómo lo resolví Saqué el cálculo del bot y lo publiqué como librería: (Apache-2.0, sin dependencias).

Con no hace falta escribir la a mano: Dos decisiones que importan más que el código , no , y redondeo siempre hacia abajo.

El bug nace de un truncamiento accidental.

Con decimal y redondeo explícito, la dirección deja de ser un accidente del tipo y pasa a ser una decisión — y la decisión correcta es hacia abajo, porque el error es asimétrico: pasarse del presupuesto se paga con dinero, quedarse corto solo cuesta un poco de rendimiento.

Función pura: recibe una , no un exchange.

Se prueba sin red, sirve para cualquier exchange y —lo que más importa— calcula igual en backtest que en producción.

Un backtest que asume posiciones fraccionarias que el mercado jamás habría aceptado infla el retorno; usando la misma función en ambos lados, esa mentira desaparece. (De eso va otro artículo.) Negarse a operar también es un resultado Cuando la cantidad mínima del mercado no cabe en el presupuesto de riesgo, la librería no opera.

Pero no se limita a devolver : dice cuánto saldo haría falta para que cupiera.

Un te obliga a reconstruir el porqué leyendo el código seis meses después.

Un motivo con la cifra dentro se lee en el log y se actúa.

Rechazar está bien; rechazar explicando está mejor.

Qué NO hace Dimensiona órdenes.

No decide cuándo operar, ni dónde poner el stop, ni en qué dirección.

Es aritmética sobre restricciones de exchange, no una estrategia.

Esa frontera es deliberada: la parte que da ventaja no se publica, pero la fontanería que todos reescribimos mal, sí.

Si tu bot tiene un en el camino de la orden, revísalo hoy.

分享