Buenas tardes a todos:
Hola MCSoft, como ya comente en mi ultimo post en este tema, lo primero es lo primero.
Una vez que la parte de programacion a terminado el primer prototipo, toca probarlo y cuando digo probarlo, me refiero, a si hace las cosas correctamente, no a sacar buenos resultados o malos resultados.
Lo primero comentarte que le he dado un repaso al codigo y a sus explicaciones y me he atrevido a ordenarlo segun mi criterio, espero que esto cause debate, es decir, por intuicion he colocado los apartados de otro modo a como tu los tenias, espero y ruego no te moleste esto por favor, ahora toca saber si lo he realizado correctamente. Cuando digo que lo ordenado, me refiero a que lo poco que se de codigo, nos dice que aunque la colocacion realmente no es importante a la hora de leerlo la maquina si que influye en rapidez, por lo tanto, he tratado de seguir una logica, espero que me comentes si es coherente la logica que he seguido o no.
A continuacion hice un backtest de prueba, es decir, lanza correctamente las operaciones, te adelanto que por desgracia o estoy equivocado en la logica de la EA o no lo hace correctamente.
Imagen que muestra donde las ha lanzado y donde las deberia de haber lanzado.
Por lo tanto eso es lo primero que debemos de corregir, en el setting de la EA tenia configurado que ejecutase las ordenes a cierre de vela, o lo que es lo mismo, a la apertura de la nueva vela despues de la señal.
Por otro lado tambien hice la siguiente prueba, que desde la logica que yo entiendo de la EA, deberia de funcionar en modo semicontinuo, es decir si Take Profit y Stop Loss = 0, cuando se dan las condiciones de compra, compro y se cerraria la operacion cuando una de las medias no este alineada, lo mismo para las ventas.
Y como puedes comprobar en la imagen no hace nada, adjunto imagen del setting utilizado para esta segunda prueba.
Y ya puestos a pedir, pidamos:
1º Echo de menos un control de spread, que se incluiria en los parametros generales.
2º Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos.
Algo parecido a esto:
Código:
int DecimalPoints, digit, pipMultiplier;
//***********************************************
int OnInit()
{
DecimalPoints = 1;
double x = MarketInfo(Symbol(), MODE_LOTSTEP) * 10;
while (x < 1)
{
x *= 10; DecimalPoints += 1;
}
digit = _Digits;
if (digit==2 || digit==4) pipMultiplier = 1;
if (digit==3 || digit==5) pipMultiplier = 10;
if (digit==6) pipMultiplier = 100;
return(INIT_SUCCEEDED);
}
3º Echo de menos, aunque de momento no es importante, en los parámetros generales un control de que si el Bróker es ECN o no, por el tema de modificación de órdenes.
Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote.
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto.
habilitar_trailing_take_profit = false;
Con este me matas, no lo entiendo, ¿desplazar el take profit según vaya la operación a nuestro favor?¿que valores utiliza para desplazarlo?. No sé si lo que pregunto tiene coherencia pero es lo que me vino a la cabeza.
Espero no ser muy molesto, pero esto es asi.
Un fuerte abrazo.
Y muchas gracias por el gran trabajo que estas realizando.
Hermo.
PD. Adjunto el EA tal y como yo la deje, por favor ruego compruebes que no he metido la pata en nada y espero que no te moleste esta incursion en tu codigo.