DEV Community

Gueta Quant
Gueta Quant

Posted on

El precio de entrada cambia el lotaje calculado en MT5

Si dibuja un stop loss a 15 pips del Bid y simula una compra al Ask, los 15 pips corresponden al tramo entre el Bid y el stop. Con un spread de 1,2 pips, la distancia desde la entrada para el cálculo de lotaje es 16,2 pips. En el ejemplo de este artículo, redondear con los 15 pips del gráfico produce una pérdida estimada de USD 32,40 frente a un presupuesto hipotético de USD 30.

Aviso SFC (Decreto 2555 de 2010 y Ley 964 de 2005): Fines exclusivamente educativos y de simulación algorítmica. No constituye asesoría financiera, intermediación ni recomendación de inversión.

Antes de dividir, fije dos precios

El calculador web de lotaje de Gueta Quant recibe una distancia de stop. Este es el cálculo del lote bruto en su código.

const lossPerStandardLot = slDistance * pipValueInCurrency;
let rawLots = (lossPerStandardLot > 0 && riskMoney > 0) ? (riskMoney / lossPerStandardLot) : 0;
Enter fullscreen mode Exit fullscreen mode

La interfaz recibe la distancia como un valor ya calculado. Al trasladar un nivel desde el gráfico, mida esa distancia desde el precio de entrada que quiere simular. En el ejemplo usamos las reglas habituales del Forex OTC en MT5. Una compra abre al Ask y el stop de una posición larga se evalúa con el Bid. Una venta abre al Bid y el stop de la posición corta se evalúa con el Ask. Para otros instrumentos conviene verificar las reglas del símbolo y del proveedor. Principios de ejecución de MetaTrader 5

Dato ficticio de EUR/USD Valor
Bid observado al preparar el escenario 1,10000
Ask utilizado como entrada hipotética 1,10012
Nivel del stop de la posición larga 1,09850
Tamaño de un pip 0,00010
Tamaño del contrato por lote 100.000 EUR
Paso de volumen 0,01 lotes
Presupuesto del escenario USD 30,00

El contrato de este ejemplo pierde USD 10 por pip y por lote. Desde el Bid del gráfico hasta el stop hay 15 pips. Desde el Ask de entrada hasta el mismo stop hay 16,2 pips. Esa segunda resta ya incluye el spread de la entrada observada. Sumarle otra vez los 1,2 pips duplicaría ese costo dentro del escenario.

Una prueba para detectar el error

Este programa usa aritmética decimal y un contrato ficticio de Forex cotizado en USD, con cuenta en USD. Puede ejecutarlo con python3 sin instalar paquetes. El redondeo hacia abajo reproduce la lógica de paso de lote para este ejemplo, donde ambos volúmenes cumplen los límites supuestos del símbolo.

from decimal import Decimal as D, ROUND_FLOOR

bid, ask = D("1.10000"), D("1.10012")
stop = D("1.09850")
pip = D("0.00010")
contract = D("100000")
budget, step = D("30"), D("0.01")


def volume_at_distance(distance):
    loss_per_lot = distance * contract
    steps = (budget / loss_per_lot / step).to_integral_value(
        rounding=ROUND_FLOOR
    )
    return steps * step


chart_volume = volume_at_distance(bid - stop)
quoted_volume = volume_at_distance(ask - stop)
chart_loss = chart_volume * (ask - stop) * contract
quoted_loss = quoted_volume * (ask - stop) * contract

assert (ask - stop) / pip == D("16.2")
assert chart_volume == D("0.20") and chart_loss == D("32.40")
assert quoted_volume == D("0.18") and quoted_loss == D("29.16")

exit_with_slippage = stop - pip
stress_loss = quoted_volume * (ask - exit_with_slippage) * contract
assert stress_loss == D("30.96")

print(f"Desde el gráfico: {chart_volume:.2f} lotes, USD {chart_loss:.2f}")
print(f"Desde la entrada: {quoted_volume:.2f} lotes, USD {quoted_loss:.2f}")
print(f"Con 1 pip adverso al salir: USD {stress_loss:.2f}")
Enter fullscreen mode Exit fullscreen mode
Cálculo Volumen Pérdida estimada
Distancia tomada del gráfico y evaluada desde la entrada 0,20 USD 32,40
Distancia medida desde la entrada hipotética 0,18 USD 29,16
Mismo volumen con un pip adverso al salir 0,18 USD 30,96

El último renglón cambia solo el precio de salida. Es una prueba de sensibilidad, sin comisiones ni financiación. Una brecha de precio, otro spread o un precio de entrada distinto también cambian el resultado.

Cómo contrastar el escenario dentro de MT5

  1. Consulte SymbolInfoTick() y conserve juntos el Bid, el Ask y la hora de esa cotización. Para una posición ya abierta, use su precio de ejecución observado como entrada. Referencia de SymbolInfoTick
  2. Compruebe que el nivel del stop esté del lado adverso y sea compatible con el tamaño de tick y la distancia mínima del símbolo. El paso de volumen es otra propiedad. Confirme también el volumen mínimo y máximo. Propiedades del símbolo en MQL5
  3. Pase el tipo de operación, el volumen válido y los dos precios explícitos a OrderCalcProfit(). El terminal estima el resultado en la moneda de la cuenta según el símbolo y las condiciones de cálculo disponibles. Si falla o el resultado tiene un signo inesperado para ese escenario, deje el cálculo como no disponible y revise los datos. Usar abs() antes de comprobar el signo puede ocultar que el stop quedó del lado favorable. Referencia de OrderCalcProfit

Para repetir la comprobación en otro escenario, guarde junto al resultado el lado de la operación, el precio de entrada, la salida supuesta y la unidad de la distancia.

Top comments (0)