Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
Money Fixed Margin - Asesor Experto para MetaTrader 5
- Visualizaciones:
- 1009
- Ranking:
- Publicado:
- 2017.04.27 16:30
- Actualizado:
- 2018.02.22 13:43
- ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Ejemplo de cálculo del tamaño del lote con un nivel fijo de margen. Es decir, si establecemos un 10%, se abrirá un tamaño del margen que será el 10% del margen libre.
Parámetros de entrada:
- StopLoss (in pips) — nivel de StopLoss
- % risk — tamaño del margen de la posición, en tanto por ciento del margen libre
Para la simulación comercial se ha organizado el siguiente ciclo:
if(count%980==0) // we pass 980 tics
{
//--- getting lot size for open long position (CMoneyFixedMargin)
El valor inicial count=-21 se establece únicamente para el "calentamiento" del simulador de estrategias. A continuación, se calcula el resto de la división de la variable count por el número 980 (una cifra tomada al azar). En otras palabras, cada 980 ticks se realiza la pasada en el ciclo de cálculo del lote teniendo en cuenta los riesgos de la transacción.
El propio ciclo de cálculo de lote dependiendo del riesgo de la transacción (cálculo para la posición Buy) representa:
Primer paso
double sl=0.0;
double check_open_long_lot=0.0;
//--- variant #1: StopLoss=0.0
sl=0.0;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
Print("sl=0.0",
", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
//--- variant #2: StopLoss!=0.0
sl=m_symbol.Bid()-ExtStopLoss;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
Print("sl=",DoubleToString(sl,m_symbol.Digits()),
", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
if(check_open_long_lot==0.0)
return;
en la variable check_open_long_lot con la ayuda del método CheckOpenLong de la clase CMoneyFixedMargin obtenemos el tamaño calculado del lote para la posición Buy teniendo en cuenta el StopLoss:
En el diario de expertos se imprimen estos parámetros: el StopLoss, el tamaño calculado del lote dependiendo del riesgo de la transacción, el balance de la cuenta comercial en el momento del cálculo, la cantidad de recursos en la cuenta en el momento del cálculo, el tamaño de los recursos reservados como fianza en el momento del cálculo.
Si el cálculo ha retornado el valor "0.0", salimos:
return;
Segundo paso
En la variable chek_volime_lot con la ayuda del método CheckVolume de la clase CTrade obtenemos el tamaño del lote para la posición Buy, para la que nos bastarán los recursos. Aquí rehacemos estos parámetros: m_symbol.Name() nombre del símbolo, check_open_long_lot volumen de la posición que queremos abrir (este parámetro lo hemos calculado con anterioridad):
double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);
Tercer paso
Si el método CheckVolume ha retornado algo diferente a "0.0", tenemos que comprobar la condición: no tenemos suficientes recursos para abrir una posición del lote calculado teniendo en cuenta el riesgo.
if(chek_volime_lot>=check_open_long_lot)
m_trade.Buy(chek_volime_lot,NULL,m_symbol.Ask(),m_symbol.Bid()-ExtStopLoss,m_symbol.Bid()+ExtStopLoss);
else
Print("CMoneyFixedRisk lot = ",DoubleToString(check_open_long_lot,2),
", CTrade lot = ",DoubleToString(chek_volime_lot,2));
Si hay recursos suficientes, abrimos las posiciones, si no los hay, en el diario de expertos se registrará el tamaño del lote calculado teniendo en cuenta el riesgo de la transacción (DoubleToString(check_open_long_lot,2)) y el tamaño de lote para el que hay recursos suficientes (DoubleToString(chek_volime_lot,2)).
Ejemplo de apertura de posición Buy, con un 10% de riesgo en el margen libre:
En este caso, se registrará en el diario:
Money Fixed Margin (EURUSD,M1) 2016.11.28 00:03:24 sl=1.05792, CheckOpenLong: 0.28, Balance: 3000.00, Equity: 3000.00, FreeMargin: 3000.00
Trade 2016.11.28 00:03:31 instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 (1.06042 / 1.06076 / 1.06042)
Trades 2016.11.28 00:03:31 deal #2 buy 0.28 EURUSD at 1.06076 done (based on order #2)
Trade 2016.11.28 00:03:31 deal performed [#2 buy 0.28 EURUSD at 1.06076]
Trade 2016.11.28 00:03:31 order performed buy 0.28 at 1.06076 [#2 buy 0.28 EURUSD at 1.06076]
Money Fixed Margin (EURUSD,M1) 2016.11.28 00:03:31 CTrade::OrderSend: instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 [done at 1.06076]
Preste atención a que al calcular el lote dependiendo del riesgo de margen libre, el StopLoss no importa.
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/17282
Volúmenes Buy y sell.
Corr velocityIndicador Velocity "corregido" (Momentum suavizado).
RSI EA - comercio con los niveles de sobrecompra/sobreventa según el indicador iRSI (Relative Strength Index, RSI).
MA ReverseComercio con Moving Average. Comprobando si hay fondos suficientes.