De rebote me comentaron acerca del trading algorítmico y la verdad es que me ha encandilado y ya estoy haciendo un EA en mql5.
La cuestión es que despues de estar varios dias leyendo y aprendiendo en este foro, el cual estoy muy agradecido a todos los participantes que, de manera altruista están compartiendo gran parte de su conocimiento, voy a preguntar un par de cuestiones que se me escapan, por mi propia inexperiencia.
El problema viene que mi EA no coge bien el apalancamiento, y por lo tanto cuando hago una compra, a veces me dice que no tiene dinero para hacer esa operación. En este caso el apalancamiento es de 1:100 y creo que me coge 1:30, de esto no estoy completamente seguro, ya que la información que me da el broker a traves del EA es de 1:100. El broker que estoy usando ahora mismo es FTMO que me permite comprar de 1 accion hasta 10.000
La funcion que se encarga de coger el estocaje es esta:
Código: Seleccionar todo
double calcularLotajeSegunRiesgo(double pRiesgo, double precioSL, double pAsk)
{
long apalancamiento = AccountInfoInteger(ACCOUNT_LEVERAGE);
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
double maxVolumen = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
double minVolumen = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
uint numeroDecimales = getDecimales(minVolumen);
double riesgoPermitido = balance / 100 * pRiesgo;
double pips = (pAsk - precioSL);
double tamanoLote = (riesgoPermitido / pips);
if(tamanoLote > maxVolumen) // Si el tamaño de lote es superior al lotaje maximo del broker pues lo igualamos para que no de error.
{
Print("Lote original: ", tamanoLote);
tamanoLote = maxVolumen;
}
/*
if(balance < (tamanoLote * pAsk)) // si el precio de las acciones que vamos a comprar es superior al balance que tenemos, pues compramos las máximas que podemos
{
tamanoLote = balance / pAsk;
}
*/
Print("Balance: ", balance, " Riesgo: ", riesgoPermitido, " Pips: ", pips , " Tamaño del lote: ", NormalizeDouble(tamanoLote, numeroDecimales), " Numero Decimales: ", numeroDecimales, " Volumen mínimo: ", minVolumen, " Precio Accion: ", pAsk, " Apalancamiento: ", apalancamiento);
return NormalizeDouble(tamanoLote, numeroDecimales);
}
Código: Seleccionar todo
double lotaje = calcularLotajeSegunRiesgo(porcentajeRiesgo, sl, ask);
trade.Buy(lotaje, _Symbol, ask, sl, tp, NULL);
tradeTicket = trade.ResultOrder();
Espero que no os sangren los ojos al ver el código, sinceramente no se qué estoy haciendo mal y despues de leer y ver videos los cuales creo que muchos de ellos los han creado sin comprobarlo, porque no funciona nada de lo que dicen, pues aqui estoy fruto de mi ignorancia y desesperacion, porque llevo ya una semana con esto y no me lo saco de encima.
Ojalá alguien me pueda hechar un cable o referirme con algún enlace donde pueda encontrar información para poder formarme y solucionar el problema