Alerta en el indicador. ¿Cómo insertar una alerta y una flecha en el indicador?
Mercado MQL5. Problemas y errores con la instalación de Expert Advisor y soluciones
Descripción
En este artículo, explicaré mis métodos para calcular el tamaño del lote basado en un porcentaje (Riesgo en %) de Margen Libre en diferentes pares de divisas y varios tipos de depósitos. Autolot o Lote Dinámico a partir del saldo. RiskManager. Te mostraré mi código Autolot.
Empecemos:
Conceptos Básicos:
Primero, vamos a destacar algunos conceptos utilizados en este cálculo:
Margen Libre ( AccountFreeMargin() ) – fondos que no se utilizan como garantía en posiciones abiertas. El Margen Libre se calcula utilizando la fórmula: Margen Libre = Saldo Actual del Depósito – Margen Requerido para las Posiciones Abiertas. Este indicador determina el número de transacciones que pueden ser abiertas en el momento actual.
Ask es el precio al cual compras una cierta cantidad de un instrumento financiero del broker. El broker te lo vende a este precio. Al operar en el mercado Forex, encontrarás este tipo de precio en todas partes: desde el terminal de trading hasta los informes de acciones y artículos analíticos sobre mercados financieros.
Bid es el precio al cual vendes una cierta cantidad de un instrumento financiero a tu broker. El broker lo compra de ti a este precio. Al operar en el mercado Forex, encontrarás este tipo de precio dondequiera que ocurran discusiones sobre el mercado Forex internacional: desde el terminal de trading y las tasas de cambio en el sitio web de tu broker hasta informes de acciones y artículos analíticos sobre mercados financieros internacionales.
Apalancamiento es la relación entre la cantidad de garantía y el monto prestado. Al seleccionar inicialmente el apalancamiento, eliges el tamaño del apalancamiento, que indica el multiplicador por el cual el depósito del Cliente será incrementado para llevar a cabo operaciones de trading en el mercado Forex. El Cliente puede seleccionar un apalancamiento de 1:1 a 1:500, lo que significa que el Cliente puede operar solo con sus propios fondos o solicitar un aumento en su depósito hasta 500 veces para ingresar al mercado con esa cantidad. El Apalancamiento, como la relación entre la cantidad con la que un trader ingresa al mercado y el tamaño de su depósito, juega un papel crucial en el proceso de trading porque permite que un trader incremente significativamente su capital.
Par de Divisas es la designación de dos monedas que juntas forman una tasa de cambio. El par de divisas sirve como objeto para transacciones financieras. Un par de divisas se denota por las designaciones sucesivas de las dos monedas que componen el par, escritas juntas o separadas por una barra en la siguiente forma: moneda base / moneda cotizada. La moneda base es la primera moneda que se compra y se vende, y la moneda cotizada se utiliza para expresar el precio de la moneda base. Un par de divisas es el concepto fundamental del mercado de divisas, presente en todas partes siempre que se refiera a este mercado: desde informes de mercado hasta el terminal de trading.
Tamaño del Lote – el volumen de la moneda base, materia prima o el número de acciones especificado en la especificación del contrato. El tamaño del lote depende de la cantidad de moneda especificada en el contrato y es una unidad de medida para determinar el tamaño del contrato de trading. Un lote tiene un tamaño específico, que se utiliza para determinar la cantidad de moneda utilizada para transacciones financieras en el mercado Forex. Para ejecutar una transacción, el Cliente determina el tamaño de la transacción, expresado en el número de lotes. El volumen de una transacción de trading indica cuánta moneda compondrá la transacción. Un lote es el tamaño del contrato, una cantidad fija de moneda utilizada en el trading Forex.
La tasa de cambio entre dos monedas está determinada por la interacción de oferta y demanda en un momento específico.
Este proceso se conoce como cotización de divisas, y las cotizaciones pueden ser directas o invertidas.
Una cotización directa refleja el precio de una moneda extranjera en unidades de la moneda nacional.
La mayoría de las tasas de cambio se expresan como cotizaciones directas del dólar estadounidense contra las monedas de varios países.
Por ejemplo, USD/UAH—30.70 significa que un dólar estadounidense vale 30.70 hryvnias ucranianas,
y USD/CHF—1.0850 indica que un dólar estadounidense equivale a 1.0850 francos suizos.
También existe el concepto de tasa de cambio cruzada, donde el dólar estadounidense no es ni la moneda base ni la moneda cotizada.
Ejemplos incluyen EUR/JPY, GBP/CHF y EUR/GBP.
Aspecto Técnico
- NormalizeDouble – Redondea un número de punto flotante a la precisión especificada.
- MODE_LOTSIZE – Tamaño del contrato en moneda base del instrumento.
- MODE_LOTSTEP – El paso para cambiar el tamaño del lote.
- AccountCurrency – Devuelve el nombre de la moneda para la cuenta actual.
- MathFloor – La función devuelve el entero más grande menor o igual a x.
Esencial: Para asegurar que todos los cálculos sean precisos, activa todos los símbolos en el panel “Market Watch” :
Mi Fórmula de Cálculo para la Moneda de la Cuenta
Mi fórmula de cálculo es la siguiente:
Depósito USD
Depósito USD Cotización Directa ()
Lot = Margen Libre * Riesgo * Apalancamiento / 100 / Tamaño del Contrato
Depósito USD Cotización Inversa()
Lot = Margen Libre * Riesgo * Apalancamiento / Ask / 100 / Tamaño del Contrato
Depósito USD Tasa de Cambio Cruzada:
Opción 1: Si hay un precio actual de la moneda base + USD (por ejemplo, si el par de liquidación es AUDCAD, entonces el precio actual de la moneda base = AUDUSD)
Lot = Margen Libre * Riesgo * Apalancamiento / (Precio Actual de la Moneda Base + USD) / 100 / Tamaño del Contrato
Opción 2: Si no hay un precio actual de la moneda base + USD (por ejemplo, CADJPY)
Lot = Margen Libre * Riesgo * Apalancamiento / 100 / Tamaño del Contrato
Depósito EUR
Depósito EUR Cotización Directa
Lot = Margen Libre * Riesgo * Apalancamiento / 100 / Tamaño del Contrato
Depósito EUR Tasa de Cambio Cruzada:
Precio actual = EUR + moneda cotizada (por ejemplo, si el par de liquidación es AUDCAD, entonces el precio actual es moneda cotizada = EURAUD)
Lot = Margen Libre * Riesgo * Apalancamiento / (precio actual EUR + moneda cotizada) / 100 / Tamaño del Contrato
Depósito UAH y Otros
Depósito UAH Cotización Inversa (por ejemplo, USDUAH)
Lot = MathFloor(Margen Libre * Riesgo * Apalancamiento / 100 / Precio Actual / Tamaño del Contrato / Paso del Lote / 20) * Paso del Lote
Depósito UAH Tasa de Cambio Cruzada (ej., EURGBP)
Precio actual = MarketInfo(StringSubstr(Symbol(), 0, 3) + UAH + StringSubstr(Symbol(), 6), MODE_BID);
if(pr != 0) Lot2 = MathFloor(Margen Libre * Riesgo * Apalancamiento / Precio Actual / 100 / Tamaño del Contrato / Paso del Lote) * Paso del Lote;
else Lot = MathFloor(Margen Libre * Riesgo * Apalancamiento / 100 / Tamaño del Contrato / Paso del Lote) * Paso del Lote;
El orden de estas funciones fue determinado calculando los parámetros en diferentes depósitos.
Si tienes sugerencias para estos cálculos, por favor, comparte tus funciones Autolot al solicitar programación.
O Freelance: Programación Personalizada en MetaTrader y MQL! Terminar?
Variables Externas Función de Cálculo Autolot:
Lots | Lote fijo para abrir una posición. |
RiskLotType TypeAutolot | Tipo de Cálculo Autolot: BALANCE (Riesgo desde el Saldo) – Autolot se calcula a partir del saldo actual. El cálculo del Lote se basa en el saldo de la cuenta. Si hay posiciones abiertas en la cuenta, el próximo lote será aproximadamente el mismo porque el saldo no disminuye con el número de posiciones abiertas actuales! FREEMARGIN (Riesgo desde la Margen Libre) – El cálculo estándar del Lote a partir de la margen libre actual es que cuantas más posiciones abiertas en la cuenta, menor será el lote calculado para la próxima posición. Esto se debe a que al abrir una posición, la margen libre disminuye, por lo que cada nueva posición abierta tiene un lote más pequeño al calcular el Autolot. Tipo de Cálculo de Riesgo para la Opción RiskLot: Modos disponibles: RiskLotType = 0, // Riesgo desde la Margen Libre RiskLotType = 1, // Riesgo desde el Saldo |
DynamicLot | Un lote dinámico, Autolot, para una posición abierta. Puedes activar el cálculo de lote dinámico como un porcentaje de la margen libre y otros factores. Cálculo de Nuestro Autolot: Fórmula y código: https://expforex.com/es/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | Riesgo desde SL – Calcula el lote automático, teniendo en cuenta el Stop Loss. La pérdida máxima como un porcentaje del saldo al cerrar una operación en Stop Loss. Al calcular el lote, nuestro Expert Advisor considera el stop loss en el momento de abrir la operación. Si la operación se cierra en Stop Loss, la pérdida de esta operación será igual a un porcentaje del saldo en el momento de abrir la operación. ¡Importante! Si tu stop loss se modifica después de abrir la operación, el tamaño del lote de la operación no puede ser modificado. Al cerrar la operación, la pérdida puede ser mayor o menor. ¡Importante! Si utilizas un Trailing Stop, el Stop Loss de la operación cambia en cada tick, pero el tamaño del lote no puede ser modificado. Fórmula y código: https://expforex.com/es/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Porcentaje para Autolot. El porcentaje para la función de lote dinámico (Autolot). Si RiskLot = 0, entonces el LOT de la operación (Volumen) será calculado de acuerdo con el parámetro Lot. Si RiskLot es diferente de 0, entonces una operación en el terminal del cliente se abrirá con un lote como un porcentaje de la margen libre del cliente (Autolot). |
RiskRate | La tasa de tu moneda contra el dólar (o la moneda de tu cuenta). Por defecto, RiskRate = 0, lo que significa que el Expert Advisor intentará encontrar la tasa correcta en la Market Review. Para que Autolot funcione bien con todos los pares de divisas, necesitas activar “Mostrar Todos los Pares de Divisas” en el Market Watch. |
MaxLot | El lote máximo que un Expert Advisor puede abrir al calcular un Autolot y Martingale para la primera posición principal. |
Martin | Martingale. La multiplicación estándar del lote de la última posición cerrada con pérdida. Si Martin = 1, entonces el martingale no se activa (Lots Fijos). Si Martin = 0, entonces el Expert Advisor no puede abrir la siguiente posición. Si Martin = 2, entonces el primer lote = 0.1, el segundo lote = 0.2, y así sucesivamente: 0.4 – 0.8 – 1.6 – 3.2 – 6.4….. Si Martin = 0.5, entonces el primer lote = 1, el segundo lote = 0.5, y así sucesivamente: 0.25 – 0.125. |
¿Necesitas un código?
Cálculo Autolot Función de Código:
input double Lots=0.01; //Lots --> Lote fijo de posiciones y órdenes abiertas
input bool DynamicLot=false; //DynamicLot --> Cálculo del lote desde el margen libre
input bool DynamicLotStopLoss=false; //DynamicLotStopLoss --> Cálculo del lote desde el StopLoss y el margen libre
input double LotBalancePercent=1; //LotBalancePercent --> Porcentaje para el cálculo del lote
extern double RiskRate=0; //RiskRate --> Tasa de cambio del símbolo a la moneda de depósito para el cálculo del lote
input double MaxLot=999; //MaxLot --> Lote máximo al abrir posiciones
double GetSizeLot(double ll=1) // La función devuelve el tamaño del lote
{
string Author = "Autor del template de la función: www.expforex.com";
string lotcalc;
double pr;
string Valdepo = AccountCurrency();
// Si MM está habilitado, determina el tamaño del lote
double Lot2, MinLots, MaxLots;
int lotdig;
if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1;
if (Valdepo == "USD")
{
if (StringSubstr(Symbol(), 0, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else if (StringSubstr(Symbol(), 3, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}
if (Valdepo == "EUR")
{
if (StringSubstr(Symbol(), 0, 3) == "EUR")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo("EUR" + StringSubstr(Symbol(), 0, 3), MODE_BID);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() * pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}
if (Valdepo == "UAH")
{
if (StringSubstr(Symbol(), 0, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else if (StringSubstr(Symbol(), 3, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}
MinLots = MarketInfo(Symbol(), MODE_MINLOT);
MaxLots = MaxLot;
lotcalc = "Autolot=" + Lot2;
if (!DynamicLot) Lot2 = Lots;
if (Lot2 < MinLots) Lot2 = MinLots;
if (Lot2 > MaxLots) Lot2 = MaxLots;
lotcalc = lotcalc + " MinLots=" + MinLots + " LOT=" + NormalizeDouble(Lot2, lotdig);
Print(lotcalc);
return (NormalizeDouble(Lot2, lotdig));
}
Función de Cálculo Stoploss Autolot:
Si deseas agregar la funcionalidad de stop loss Autolot a tu EA, puedes descargar nuestro código:
StopLosssd = Stop Loss en puntos
Variables Externas:
Lots = 0.1; // Lote fijo
DynamicLotStopLoss = // true/false
LotBalancePcnt (RiskLot) = 20; // % de margen libre
Función:
double GetSizeLotStopLoss(double StopLosssd=1) // La función devuelve el tamaño del lote { string Author = "Autor del template de la función: www.expforex.com"; string Valdepo = AccountCurrency(); // Si MM está habilitado, determina el tamaño del lote double MinLots; int lotdig; if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1; double Free = AccountFreeMargin(); double LotVal = MarketInfo(Symbol(), MODE_TICKVALUE); // Costo de 1 pip para 1 lote double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT); double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT); double Step = MarketInfo(Symbol(), MODE_LOTSTEP); double Lot = MathFloor((Free * LotBalancePcnt / 100) / (StopLosssd * LotVal) / Step) * Step; MinLots = MarketInfo(Symbol(), MODE_MINLOT); if (Lot < MinLots) Lot = MinLots; return (NormalizeDouble(Lot, lotdig)); }
¿Preguntas?
Si tienes alguna pregunta, por favor, hazla. No vendemos un cerdo en un saco.
Cada uno de nuestros productos puede ser probado antes de la compra.
Agradecemos tu interés y apoyo a nuestros productos y nos esforzamos por mantener altos estándares de calidad.
¡Gracias por estar con nosotros!
¿Tienes una pregunta?
2 responses to “Mis secretos de Autolot. Lote Dinámico o Autolot.”
-
I want to be able to double whatever lot size that is being copied from the master onto the client.. How do I do that with settings… so no matter what every new position the client with be 2x that.. master opens a trade of .03, then it will be copied to client as .06.
This post is also available in: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어
Leave a Reply