WT_Perseguido Versión: 2.4 Build 2
ERROR ASIGNACIÓN TP/SL
El robot cuando crea una orden lo que hace es que primero la crea y luego una vez la orden
está creada, le asigna el SL y el TP. En el supuesto de que al intentar asignarle el SL y el
TP haya algún error por parte del bróker y no permita que el robot le asigne con éxito el SL
y el TP a la orden, entonces el robot procederá a actuar según lo que se configure en el
nuevo parámetro [accionSiErrorAsignarSL_TP]
Que ocurra este problema es prácticamente imposible, de hecho, en más de 1 año,
solamente ha ocurrido 1 vez y fue operando un trader en una cuenta demo, pero aún así y
por si acaso, he querido añadir esta mejora.
Abajo explico los posibles valores del parámetro y cómo actúa el robot en cada caso.
[accionSiErrorAsignarSL_TP]
1) Cerrar orden y ceder control → en este caso el robot cierra la orden y además se para
cediendo el control del ciclo al trader.
2) Cerrar orden → en este caso el robot cierra la orden y no se para ni cede el control, por lo
que intentará crear de nuevo la orden otra vez.
3) Ceder control → en este caso el robot cede el control del ciclo y la orden se queda
abierta y operativa.
La opción 3 es la más arriesgada, porque requiere que gestionéis la orden manualmente.
En los 3 casos el robot siempre genera una alerta.
CADUCIDAD ABONO
Actualmente un abono tiene una duración de 12 meses.He incorporado una mejora al robot
para que podáis indicar en un parámetro con cuántos días de antelación queréis que os
avise el robot de cuándo caduca vuestro abono.
Para esto he creado el parámetro [numDiasAvisoAbonoCaduca]
Si el parámetro vale cero entonces el robot lo ignora y nunca os avisa de cuándo caduca el
abono. Si el parámetro contiene un número mayor que cero (por ejemplo supongamos que
contiene el número 30), pues en ese caso el robot cuando queden 30 días o menos para
que caduque el abono os avisa con una alerta. Por defecto el parámetro vale 15.
COMENTARIO ÓRDENES
Consiste en que podáis indicar un texto en un parámetro del robot para que ese texto sea
incluido en el comentario de todas las órdenes creadas por el robot.
Para esto he creado el parámetro [textoComentario_Ordenes]
Si el parámetro está vacío pues el robot no añade nada a la columna comentario de las
órdenes. Si el parámetro contiene un texto (el que sea) entonces el robot añadirá ese texto
a la columna comentario de todas las órdenes que cree. Podéis ver la columna comentario
en las pestañas OPERACIONES e HISTORIAL DE CUENTAS del Terminal de MetaTrader.
ALTERNAR ÓRDENES TIPO
El robot hasta ahora solamente permitía configurar el parámetro [alternarOrdenesTipo]
como true o false. Si el parámetro era igual a true, entonces el robot SIEMPRE alternaba las
órdenes del ciclo, siendo cada orden nueva del tipo opuesto a la anterior.
Si el parámetro era igual a false entonces el robot NUNCA alternaba las órdenes del ciclo.
Ahora el parámetro [alternarOrdenesTipo] ya no es true o false sino que ahora es un
desplegable que contiene 3 posibles opciones:
1) Nunca → el robot NO alterna el tipo de orden dentro del ciclo, por lo que las
órdenes del ciclo que se abran serán del mismo tipo que la orden anterior.
2) Siempre → el robot SI alterna el tipo de orden dentro de un ciclo, por lo que las
órdenes del ciclo que se abran serán del tipo opuesto que la orden anterior.
3) Sólo si SL(-) → el tipo de una nueva orden dentro del ciclo dependerá de dónde
estaba el SL de la orden anterior cuando esa orden se cerró:
a) si el SL de la orden anterior estaba en zona negativa cuando la orden se
cerró entonces el tipo de la nueva orden del ciclo será opuesto al tipo de la
orden anterior.
b) si el SL de la orden anterior estaba en zona de empate o en zona positiva
(no estaba en zona negativa) entonces el tipo de la nueva orden del ciclo
será el mismo que el tipo de la orden anterior.
La segunda mejora que me habéis pedido relacionado con esto es que a partir de ahora
usando un botón en el panel de pantalla se puede modificar el parámetro
[alternarOrdenesTipo]. Cuando se pulsa ese botón el parámetro se modifica de forma
interna teniendo efecto inmediato a partir de la siguiente orden del ciclo. Lo puedes cambiar
tantas veces como quieras incluso cuando haya un ciclo iniciado. Con el botón, el parámetro
se modifica internamente en el robot pero no se modifica en la ventana de parámetros del
robot (si abres la ventana de parámetros verás el mismo valor que había antes).
REINICIO AUTOMÁTICO DE CICLOS
A partir de ahora, si activais el reinicio automático de ciclos también podéis opcionalmente
decirle al robot cuantos reinicios de ciclo queréis que ejecute como máximo.
Para esto he creado el parámetro [numMaxReiniciosCiclo]
Si el reinicio automático de ciclo está desactivado entonces este nuevo parámetro se ignora.
Si el reinicio automático de ciclo está activado, entonces:
1) si el parámetro vale cero entonces el robot ignora el parámetro y considera que no
hay un número máximo de reinicios (por tanto el número de reinicios es ilimitado)
2) si el parámetro vale un número mayor que cero entonces el robot solamente
ejecutará ese número máximo de reinicios automáticos de ciclo. Una vez se alcance
ese número de reinicios, el robot ya no reiniciará más ciclos.
Si después de alcanzar el número máximo de reinicios, se inicia un nuevo ciclo por alguna
otra causa (manualmente, por una línea LH, etc) entonces el conteo del número de reinicios
de ciclo se resetea y se vuelve a empezar a contar reinicios desde cero.
A partir de ahora usando un botón en el panel de pantalla se puede modificar el parámetro
[reinicioAutomaticoCiclo]. Cuando se pulsa ese botón el parámetro se modifica de forma
interna teniendo efecto inmediato en el funcionamiento del robot. Lo puedes modificar tantas
veces como quieras incluso cuando haya un ciclo iniciado. Con el botón el parámetro se
modifica internamente en el robot pero no se modifica en la ventana de parámetros del robot
(si abres la ventana de parámetros verás el mismo valor que había antes).
Un reinicio de ciclo se ejecutará SOLAMENTE en el caso de que el ciclo anterior haya
cerrado debido a que se aplicó el margen correspondiente y el robot concluyó que ya se
debía cerrar el ciclo. En caso de que el ciclo anterior haya cerrado por otro motivo (como
por ejemplo porque se alcanzó el nº máximo de órdenes por ciclo) pues el reinicio de ciclo
no se tiene en cuenta y no se ejecuta. Lo del nº máximo de órdenes por ciclo es una mejora
de esta versión y está explicada más abajo en este documento.
Cuando se reinicia un ciclo automáticamente, en el nuevo ciclo que se crea, el tipo de la
primera orden del ciclo es SIEMPRE el mismo tipo que el de la última orden del ciclo que
recién se acaba de cerrar, incluso aunque el ciclo cerrado haya generado pérdidas (lo cual
puede ocurrir si se aplicó un margen por lotes para cerrar con pérdidas.
PAUSAS AUTOMÁTICAS CONDICIONADAS
[pausaMaxLotaje]
Desde ahora el robot podrá ponerse en pausa automática debido a que se alcanzó un lotaje
máximo definido. Para esto he creado el parámetro [pausaMaxLotaje]
Si el parámetro vale cero entonces el robot lo ignora, pero si el parámetro contiene un lotaje
definido, entonces cuando el robot calcula el lotaje de una nueva orden del ciclo, si el lotaje
de dicha orden es igual o superior al definido en este parámetro, entonces el robot NO crea
la nueva orden y se pone en pausa. Una vez pausado el robot, solamente podrás TOMAR
EL CONTROL ya que en ningún caso el robot te permitirá continuar con el ciclo porque la
próxima orden supera el lotaje definido en este parámetro.
Este parámetro el robot no lo tiene en cuenta para la creación de la primera orden del ciclo,
sólo se aplica a partir de la segunda orden del ciclo (inclusive).
[pausaMaxPerdida]
Desde ahora el robot podrá ponerse en pausa automática debido a que se alcanzó una
pérdida máxima definida. Para esto he creado el parámetro [pausaMaxPerdida]
Si el parámetro vale cero entonces el robot lo ignora, pero si el parámetro contiene un
importe definido, entonces cuando se cierra una orden del ciclo, si la pérdida total
acumulada del ciclo en ese momento es igual o superior al importe definido en este
parámetro, entonces el robot NO crea la siguiente orden del ciclo y se pone en pausa. Una
vez pausado el robot, podrás finalizar la pausa de la manera que prefieras.
Este parámetro el robot no lo tiene en cuenta para la creación de la primera orden del ciclo,
sólo se aplica a partir de la segunda orden del ciclo (inclusive).
El importe que indiques en el parámetro NO debe ser negativo, por ejemplo si queremos
que el robot se quede en pausa cuando el profit total de un ciclo tenga una pérdida de 100
euros o más, entonces en el parámetro hay que poner 100.
El parámetro incluso puede valer 1, en ese caso, si el ciclo lleva una pérdida de 1 euro o
más, pues el robot se pausa y queda en espera de que tú finalices la pausa como quieras.
MEJORA INTERNA EN HORARIOS
Desde ahora el Perseguido ya no tendrá en cuenta el TimeFrame de las velas para mirar
cuándo se cumple alguna hora de inicio programada, por lo que desde ahora ya no importa
el TimeFrame en el que esté el gráfico de velas.
Por ejemplo, puedes programar como hora de inicio las 09:37 y no importa si el TimeFrame
del gráfico es H1, porque justo a las 09:37 el robot ejecutará la acción configurada.
Lo mismo ocurre cuando el robot va a crear una orden y comprueba el rango temporal,
desde ahora el robot lo comprueba mirando la fecha/hora del servidor del broker (que es el
mismo horario del gráfico). El robot no tiene en cuenta el TimeFrame de las velas, así el
control de rango será mucho más exacto y estará mejor controlado y podrás usar el
TimeFrame que quieras en el gráfico.
NO PERMITIR LOTAJES INFERIORES AL DE LA ORDEN 1
Si alguna orden nueva del ciclo va a tener un lotaje bajo (menor incluso que el lotaje de la
primera orden del ciclo) pues opcionalmente podéis indicarle al robot que cree esa nueva
orden con el mismo lotaje que el de la orden 1 del ciclo.
Para esto he creado el parámetro [minimoLotajeIgualOrden1]
Si el parámetro vale false entonces el robot lo ignora y no tiene ningún efecto.
Si el parámetro vale true entonces el mínimo lotaje de una orden dentro del ciclo debe ser al
menos igual al de la orden 1 del ciclo. Entonces cuando el lotaje de una nueva orden del
ciclo es inferior al de la orden 1, el robot crea la orden con el mismo lotaje de la orden 1.
Ejemplo:
Cuando se usa TraillingStop y el SL avanzó en zona de ganancia, entonces puede que eso
provoque que la siguiente orden tenga un lotaje muy bajo, pero esto quizás no interesa
porque apenas se consigue profit, entonces con esta opción si queremos, podemos hacer
que el robot a esa nueva orden le asigne al menos el mismo lotaje que el de la orden 1, así
el profit será como el de la orden 1 y será como haber iniciado un nuevo ciclo, lo cual es
interesante sobre todo para a los que les gusta el reinicio automático de ciclo. Y también es
interesante porque se aumenta el profit total del ciclo.
LÍNEAS LHMADRE
He añadido al robot unas nuevas líneas a las que he llamado LÍNEAS LHMADRE.
Para esto he creado un botón llamado [INSERTAR LH MADRE] . Al pulsarlo el robot inserta
una línea horizontal azul, la cual puedes mover y colocar donde quieras. Puedes añadir
tantas líneas LHMADRE como quieras. Al igual que ocurre con las líneas LH de siempre,
para que las líneas LHMADRE tengan efecto debes fijarlas al gráfico haciendo doble click,
porque si no las fijas entonces el robot las ignora. ¿Qué es una línea LHMADRE?
Cuando NO hay ningún ciclo iniciado, si el precio alcanza o toca una línea LHMADRE
entonces lo que hace el robot es crear por arriba del precio actual una línea LHBUY y por
debajo del precio actual una línea LHSELL, ambas a la misma distancia (se usa la distancia
indicada en el parámetro [tics_Distancia_LH_ATM] el cual ya existía de antes).
Esto es muy útil para muchos casos, por ejemplo si detectas una zona de precio donde
sabes que el precio va a reaccionar, quizás ahí prefieres una LHMADRE en vez de una
LHBUY y/o una LHSELL. Una vez que el robot ha creado las líneas LH BUY/SELL a partir
de la línea LHMADRE (porque el precio alcanzó a la línea LHMADRE), entonces si no hay
un ciclo iniciado y el precio alcanza una de esas dos líneas LH, entonces se inicia un ciclo
(con un BUY o un SELL según cuál haya sido la LH alcanzada) y se elimina la otra línea LH.
Por ejemplo, si la línea LH que alcanza el precio es la LHBUY entonces se inicia un ciclo
con un BUY y se borra la línea LHSELL.
NÚMERO MÁXIMO DE ÓRDENES
Desde ahora se le puede indicar al robot el número máximo de órdenes por ciclo.
Para esto he creado el parámetro [numMaxOrdenesCiclo]
Si el parámetro es igual a cero entonces se ignora y no existe límite de órdenes por ciclo.
Pero si el parámetro contiene un número mayor que cero entonces ese será el número
máximo de órdenes que el robot ejecute por ciclo.
Por ejemplo si en el parámetro ponemos un 3, entonces cuando se cierre la tercera orden
del ciclo el robot no abrirá la orden 4 y cederá el control al trader.
Esta mejora te permitirá lo siguiente:
1) Podrás usar el Perseguido para que sólo ejecute 1 orden cada vez, así funcionará
como un robot normal (como un robot que ejecuta 1 sola orden a la que le pone el
TP y SL indicados en los parámetros) y aparte opcionalmente podrás usar
BreakEven y TrailingStop, Control de Spread, Rango Temporal, líneas LH, LT,
LHMADRE, botones BUY/SELL, etc, o sea todo el potencial del robot. Y cuando la
orden se cierra el robot no ejecuta ninguna otra, ni aumenta lotaje ni nada de nada.
2) Podrás usar el Perseguido indicando un número máximo de órdenes (mayor que 1).
Si no usas BreakEven ni TrailingStop entonces puede ser útil usar esto, pues de
esta manera pones un tope al número de órdenes perdidas.
Si un ciclo se finaliza porque se alcanzó el nº máximo de órdenes, entonces aunque el
reinicio de ciclo esté activo NO SE TENDRÁ EN CUENTA. Ya que el reinicio automático de
ciclo solamente se tiene en cuenta cuando el ciclo anterior cerró aplicando el margen e
importe objetivo correspondientes y el robot consideró que ya se podía cerrar el ciclo.
BOTONES PAUSA
He cambiado el texto de los botones de pausa de pantalla. Ya no se llaman INI PAUSA MANUAL y
FIN PAUSA MANUAL, ahora se llaman INICIAR PAUSA y FINALIZAR PAUSA.
BOTONES EN PRUEBA DE ESTRATEGIA
Consiste en que a partir de ahora, todos los botones del robot son visibles en la prueba de
estrategia y además puedes usarlos exactamente igual que si estás operando en directo.
Esto te va a permitir poder testear a fondo el robot no solamente en modo 100% automático,
sino también en modo semiautomático y en modo manual, usando y aplicando en cada
momento todas las cosas que el robot te ofrece con los botones, incluyendo las líneas LH,
las líneas LT, las líneas LHMADRE, los nuevos botones de cambio de parámetros, etc.
Y por supuesto también podrás usar las pausas manuales, para que así puedas testear a
fondo cualquier estrategia que quieras, pausando el robot tras abrir manualmente una orden
en base a las condiciones de tu estrategia (en el vídeo explicativo de esta versión lo explico)
MARGEN POR LOTES MEJORADO
En el margen por lotes, desde siempre se han podido poner márgenes superiores al importe
objetivo. Voy a explicar cómo funcionaba antes el margen por lotes y cómo funciona ahora.
Supongamos que el importe objetivo es → 100 euros .
Supongamos que el margen por lotes es → 1/40#1.5/80#2/130#3/200
Supongamos que el margen por lotes se debe aplicar a partir de la 4ª orden del ciclo.
Supongamos que hay un ciclo abierto en ejecución y que acaba de cerrarse la 6ª orden del
ciclo, y que esa orden tenía un lotaje de 2.4 lotes, y supongamos que en ese momento el
profit total del ciclo tiene una pérdida de 35 euros .
¿qué hace el robot?
Como la orden que ha cerrado es la 4ª orden o más, y el lotaje de la orden era de 2.4 lotes,
entonces el robot aplica el margen por lotes. En este caso debe aplicar un margen de 130.
El robot hace la siguiente resta → 100 - 130 = -30
LO QUE HACÍA ANTES EL ROBOT:
El robot tomaba el resultado de la resta (sin tener en cuenta si la resta daba o no un
resultado negativo) y lo comparaba con el profit total actual del ciclo (sin tener en cuenta si
el profit total del ciclo es una pérdida o una ganancia). Y hacía lo siguiente:
El robot solamente CERRABA CICLO si el profit del ciclo es matemáticamente mayor o
igual que el resultado de la resta.
Para este ejemplo, el profit total del ciclo es -35 euros, entonces ¿es -35 matemáticamente
mayor que -30? La respuesta es NO, entonces el robot NO cerraba el ciclo.
LO QUE HACE AHORA EL ROBOT:
El robot toma el resultado de la resta y lo compara con el profit total actual del ciclo:
● Si el resultado de la resta es mayor o igual a cero , entonces el robot interpreta
que buscas cerrar con empate o con alguna ganancia . El robot solamente CIERRA
CICLO si el profit del ciclo es mayor o igual que el resultado de la resta, o sea si el
profit del ciclo es una GANANCIA igual o mejor que la del resultado de la resta.
● Si el resultado de la resta es menor que cero , entonces el robot interpreta que
buscas cerrar en caso de tener una pérdida igual o peor que la que se obtiene como
resultado de la resta. El robot solamente CIERRA CICLO si el profit del ciclo es
menor que el resultado de la resta, o sea si el profit del ciclo es una PÉRDIDA igual
o peor que la del resultado de la resta.
Según el ejemplo indicado más arriba, el profit total del ciclo es una pérdida de 35 euros,
entonces como es una pérdida mayor que 30 entonces el robot CIERRA EL CICLO.
IMPORTANTE
El margen por lotes, en caso de usarlo para evitar tener pérdidas, debe usarse pensando
más en el lotaje que en la pérdida acumulada. Porque puedes tener una pérdida acumulada
y en realidad el lotaje de las órdenes en el ciclo sigue siendo bastante soportable, por lo que
a lo mejor seguir operando no es malo ni es arriesgado, porque aún tienes mucho marge..
El riesgo realmente existe en caso de que el lotaje aumente hasta volúmenes que puedan
afectar a tu cuenta, pero mientras tu cuenta soporte sobradamente el lotaje con el que se
estás operando entonces no es arriesgado seguir operando. Cuanto mayor sea la pérdida
acumulada pues más irá subiendo el lotaje.
IMPORTANTE (Reducción de Volumen)
Cuando se aplica la reducción de volumen para calcular el lotaje de una nueva orden del
ciclo, si esa reducción de volumen incluía aplicar un importe objetivo, entonces ese es el
importe objetivo que se usará cuando esa orden cierre y se aplique el margen (y el margen
a aplicar será el general o el margen por lotes si fuera el caso).
Ejemplo : Supongamos que se acaba de cerrar una orden, a la que se le aplicó la reducción
de volumen, y en esa reducción de volumen se estableció un importe objetivo de 80 euros.
Entonces, al aplicar el margen que corresponda para saber si el ciclo finaliza o no (ya sea o
no el margen por lotes), el importe objetivo que se usa es 80 y no otro.