Tuesday, 8 September 2020

OK

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.

No comments:

Post a Comment