Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Build 2
CORRECCIÓN ERRORES
He solucionado algunos errores leves de ejecución que se producían bajo ciertas
circunstancias muy concretas. Esos errores han sido reportados por varios de vosotros.
Uno de esos errores era que cuando el robot crea una orden nueva, una vez que la orden
ya está creada, si por algún motivo luego el robot no puede asignarle un SL y/o TP porque
el bróker no lo permite, entonces el robot avisa del error y elimina la orden creada (en la
versión anterior la orden no se eliminaba y se quedaba abierta sin control). Este problema
no ha ocurrido prácticamente nunca, pero alguna vez puntual ha ocurrido.
Esta solución será añadida en todos mis robots (incluido el Acorralado).
TRAILING STOP
Muchos de vosotros me habéis pedido esta mejora. Consiste en poder indicar al robot si
queremos que cuando se ejecute el TrailingStop de una orden, pues que se elimine o no el
TakeProfit de esa orden. He añadido esta mejora en esta versión del robot.
Donde aparecía la palabra “Profit” ahora aparece “Profit Ciclo” y el dato que muestra es el
mismo de antes, o sea el profit total del ciclo en todo momento (incluyendo todas las
ganancias y pérdidas de todas las órdenes del ciclo, comisiones, swaps etc).
Justo debajo de “Profit Ciclo” he añadido el “Profit Orden”. Cuando haya un ciclo iniciado y
una orden abierta entonces ahí el robot mostrará el profit total de la orden que haya abierta
en ese momento (incluyendo la comisión y swap de la orden).
Esta información sobre los profit es útil porque quizás en algún momento queramos finalizar
un ciclo manualmente sabiendo que ya hemos obtenido alguna ganancia (o que no hemos
perdido nada) y ya no queremos que el ciclo continúe ejecutándose por más tiempo.
En la versión anterior el robot informaba de “CICLO INICIADO” o “NO HAY CICLO”. En esta
nueva versión el robot además también informa de “CICLO PAUSADO”. Un ciclo puede
estar pausado debido al CONTROL MÁXIMO SPREAD o al CONTROL RANGO
TEMPORAL. Ambas son funcionalidades que he añadido nuevas en esta versión y las
cuales explico detalladamente más abajo en este mismo documento.
REDUCCIÓN DE VOLUMEN
Muchos me habéis sugerido que en el Perseguido añadiera la mejora de poder definir un
número máximo de órdenes que se permita ejecutar en un ciclo para evitar que el ciclo
llegue a ejecutar demasiadas órdenes y por tanto se opere con mucho volumen y exista el
riesgo de perder mucho dinero. Esta mejora está incluida en el Acorralado, donde le puedes
incluso decir que solamente ejecute 1 orden (en ese caso ni siquiera se aplicaría cobertura).
Pero en realidad en el Perseguido esa mejora no tiene sentido porque en el Perseguido una
orden nueva dentro de un ciclo lo más probable es que tenga un volumen igual o inferior a
las órdenes anteriores. En el Perseguido a diferencia del Acorralado no siempre que se abre
una orden nueva se aumenta el volumen, de hecho en el Perseguido en cada nueva orden
que se abre lo normal es que el volumen se haya reducido respecto a la orden anterior.
Entonces establecer un nº máximo de órdenes no es lógico en el Perseguido.
Esto es gracias a que en el Perseguido se puede aplicar BreakEven y/o Trailing Stop en
cada orden y eso provoca que se reduzca el lotaje en las nuevas órdenes que se van
creando debido a que no hubo pérdidas en la última orden ejecutada o porque incluso hubo
ganancias, pero el ciclo sigue abierto y ejecutando nuevas órdenes porque aún no se
alcanzó el importe objetivo que se definió en los parámetros del robot.
¿Cómo entonces podemos reducir más el volumen de las órdenes en el Perseguido? Para
reducir aún más el lotaje en el Perseguido he ideado y añadido una mejora al robot para que
de forma muy personalizada cada trader pueda definir opcionalmente si quiere o no aplicar
una reducción de volumen y podrá definirla totalmente a su gusto y bajo su propio criterio.
Cuando un ciclo ya está iniciado y el robot se dispone a abrir la siguiente orden del ciclo, lo
primero que hace el robot es calcular el volumen de esa nueva orden, y para realizar esos
cálculos usa varias cosas, dos de ellas son el IMPORTE OBJETIVO y el TAKEPROFIT. Una
vez que el robot ya sabe el volumen que debería tener la nueva orden entonces es cuando
decide si aplica o no la reducción de volumen. En caso de aplicar la reducción de volumen
lo que hace el robot es calcular de nuevo el volumen de la nueva orden pero esta vez usará
un IMPORTE OBJETIVO y TAKEPROFIT obtenidos de la configuración de los parámetros.
LOTES → Indica el lotaje que debe alcanzar una orden para que se le aplique una
reducción de volumen usando el importe objetivo y/o tics de TakeProfit que están definidos
en los otros dos elementos del mismo grupo.
IMPORTE OBJETIVO → Indica el importe objetivo que se aplicará en los cálculos de
reducción de volumen cuando la orden actual alcanza el lotaje indicado en LOTES.
TAKE PROFIT → Indica el TakeProfit que se aplicará en los cálculos de reducción de
volumen cuando la orden actual alcanza el lotaje indicado en LOTES.
Todos los grupos deben escribirse separados entre sí con el carácter almohadilla → “#”
Puedes definir tantos grupos como quieras.
EJEMPLO:
Supongamos que hemos definido en los parámetros del robot lo siguiente:
[tics_TakeProfit] = 200
[tipoValorImporteObjetivo] = “contiene un importe objetivo exacto”
[valorImporteObjetivo] = 100
Según estos parámetros hemos definido que el importe objetivo de un ciclo es de 100 euros
y que el TakeProfit es de 200 tics. Estos son los valores que por defecto usará el robot en
los cálculos de volumen de todas las órdenes del ciclo.
Lo que siempre hace el robot es que para cada nueva orden calcula su volumen usando el
importe objetivo y TakeProfit definidos en los parámetros genéricos del robot, que en este
ejemplo son 100 euros de importe objetivo y 200 tics de TP. Pero una vez ha calculado el
lotaje de la nueva orden, si resulta que ese lotaje es mayor o igual a alguno de los definidos
en el parámetro [reduccion_volumen_datos] entonces el robot volverá a calcular el lotaje de
la orden aplicando como importe objetivo y TakeProfit los definidos en el parámetro
[reduccion_volumen_datos]. De esta forma es como el robot reduce el volumen.
Aquí abajo explico con más detalle el contenido de los 4 grupos de este ejemplo.
1/40/300 → Con esto le estamos diciendo al robot que si el lotaje calculado para una
orden nueva es mayor o igual a 1.0 lotes entonces debe calcular de nuevo el lotaje de esa
orden pero esta vez usando un importe objetivo de 40 euros y un TakeProfit de 300 tics.
2.5/20/500 → Con esto le estamos diciendo al robot que si el lotaje calculado para una
orden nueva es mayor o igual a 2.5 lotes entonces debe calcular de nuevo el lotaje de esa
orden pero esta vez usando un importe objetivo de 20 euros y un TP de 500 tics.
4/10/600 → Con esto le estamos diciendo al robot que si el lotaje calculado para una
orden nueva es mayor o igual a 4.0 lotes entonces debe calcular de nuevo el lotaje de esa
orden pero esta vez usando un importe objetivo de 10 euros y un TP de 600 tics.
6/0/700 → Con esto le estamos diciendo al robot que si el lotaje calculado para una
orden nueva es mayor o igual a 6.0 lotes entonces debe calcular de nuevo el lotaje de esa
orden pero esta vez usando un importe objetivo de 0 euros y un TP de 700 tics.
A menor importe objetivo menor será el lotaje calculado en una nueva orden.
A mayor número de tics de TP menor será el lotaje calculado en una nueva orden.
Cada trader podrá definir estos datos como quiera. Lo ideal es hacerlo con inteligencia.
El objetivo es intentar reducir el lotaje en caso de que suba.
● Esta funcionalidad solamente se aplica a partir de la segunda orden del ciclo, o sea
que nunca se aplica en la primera orden del ciclo.
● Que el nuevo volumen calculado para una nueva orden sea o no inferior depende de
los datos que definas en el parámetro [reduccion_volumen_datos].
MARGEN POR LOTES
En la funcionalidad de REDUCCIÓN DE VOLUMEN lo que se hace es que según la
configuración indicada en los parámetros a veces se recalcula el volumen de una orden.
Pero otra cosa muy distinta es el tema del MARGEN aplicado al importe objetivo. Estoy
seguro de que muchos de vosotros quizás os vais a liar un poco con estas dos cosas así
que voy a explicarlo para que lo entienda cualquier persona.
Cuando el robot va a calcular el lotaje de una orden nueva lo hace porque la orden anterior
ya se ha cerrado y el robot considera que aún no se ha alcanzado el objetivo económico
deseado y por eso se dispone a abrir una orden nueva. En el cálculo del volumen de esa
nueva orden es donde el robot aplica o no la reducción de volumen. Cuando el robot calcula
el volumen de una nueva orden lo que usa para hacerlo es lo siguiente:
- la pérdida o ganancia acumulada en el ciclo hasta ese momento
- cuál es el importe objetivo aplicado en ese momento
- la distancia en tics en la que se quiere obtener ese objetivo (el TakeProfit)
¿Cuándo y cómo usa el robot el MARGEN del Importe Objetivo? Pues solamente lo tiene en
cuenta cuando una orden se ha cerrado y el robot debe decidir si el ciclo ya finalizó o no, y
en caso de que no haya finalizado pues procede a abrir una orden nueva.
Cuando una orden se cierra lo que hace el robot es mirar 2 cosas:
- el profit total de la orden (teniendo en cuenta su comisión y swap)
- el importe objetivo de ese momento al cual le resta el margen
Si (profit total) del ciclo es mayor o igual que (importe objetivo - margen) entonces el ciclo se
acaba ya que el robot considera que el objetivo se ha alcanzado. En otro caso, el ciclo
continúa y el robot abrirá una nueva orden. El robot usa el margen sólo para esto.
Ejemplo:
Imaginemos que estamos en la orden 6 del ciclo. El importe objetivo que se aplica a esa
orden es de 100 euros, y el margen es de 10 euros → (100 - 10) = 90 euros.
Supongamos que esa orden se ha cerrado con un profit total de 92 euros.
El robot comprueba que 92 es mayor o igual que 90 por tanto considera que se ha
alcanzado el objetivo y el ciclo finaliza. Pero si por ejemplo el profit total de la orden hubiera
sido 89 euros en vez de 90 entonces el ciclo no finaliza y el robot abriría una nueva orden
(el lotaje de esa nueva orden sería muy bajo ya que el objetivo ahora sería de pocos euros).
Otro caso es que si por ejemplo el margen hubiera sido de 5 euros en vez de 10 euros pues
el ciclo tampoco finaliza porque 92 es inferior a 95. Así es como el robot utiliza el margen.
Más ejemplos:
Supongamos que el importe objetivo es 100€ y el margen 90€, entonces al cerrar la orden
con un profit total de solamente 11€ ya se finaliza el ciclo. O supongamos que el importe
objetivo es 100€ y el margen 120€, entonces al cerrar la orden con un profit total de
solamente -19€ ya se finaliza el ciclo (porque 100 - 120 = -20).
Esta es la mejora que he ideado y que he añadido al robot. Se configura fácilmente y de
forma parecida a como se configura el parámetro de datos de la reducción de volumen. Esta
mejora no es muy útil si no se está aplicando BreakEven y TrailingStop en las órdenes.
LOTES → Indica el lotaje que debe alcanzar una orden para que se aplique el margen que
está definido en el otro elemento del grupo.
MARGEN → Indica el margen que se aplicará cuando se cierra la orden actual si ésta
alcanza el lotaje indicado en el elemento LOTES.
Los grupos deben escribirse separados entre sí con el carácter almohadilla → “#”
Puedes definir tantos grupos como quieras.
EJEMPLO:
Supongamos que hemos definido en los parámetros del robot lo siguiente:
[tipoValorImporteObjetivo] = “contiene un importe objetivo exacto”
[valorImporteObjetivo] = 100
[margenImporteObjetivo] = 10
Según estos parámetros hemos definido que el importe objetivo de un ciclo es de 100 euros
y que el margen por defecto es de 10 euros. Estos son los valores por defecto que usará el
robot para saber si se finaliza o no el ciclo en el cierre de todas las órdenes del ciclo.
1/40 → Con esto le estamos diciendo al robot que si el lotaje de una orden es mayor o
igual a 1.0 lotes entonces cuando esa orden cierre y el robot compruebe si el ciclo finaliza o
no, el margen que debe usar el robot es de 40 euros y no el de [margenImporteObjetivo].
1.5/80 → Con esto le estamos diciendo al robot que si el lotaje de una orden es mayor
o igual a 1.5 lotes entonces cuando esa orden cierre y el robot compruebe si el ciclo finaliza
o no, el margen que debe usar el robot es de 80 euros y no el de [margenImporteObjetivo].
2/110 → Con esto le estamos diciendo al robot que si el lotaje de una orden es mayor
o igual a 2.0 lotes entonces cuando esa orden cierre y el robot compruebe si el ciclo finaliza
o no, el margen que debe usar el robot es de 110 euros y no el de [margenImporteObjetivo].
En este ejemplo si la orden que ha cerrado tiene un volumen de 2.0 lotes o más y
obtenemos un profit total de ciclo de al menos -10 euros entonces el ciclo finaliza y ya no se
abren más órdenes. Porque (100 - 110 = -10).
[margenesPorLotes_Orden]
Este parámetro debe ser un número mayor que cero. Simplemente debemos indicar aquí a
partir de qué orden (inclusive) deseamos que el robot tenga en cuenta los márgenes por
lotes que hayamos definido en el parámetro [margenesPorLotes]. Por ejemplo si ponemos
un 2 pues a partir de la segunda orden del ciclo (inclusive) el robot ya tendrá en cuenta los
márgenes que hayamos definido en el parámetro [margenesPorLotes]. Pero para la primera
orden del ciclo no los tendrá en cuenta. Podemos poner un nº mayor que cero.
Esta mejora es muy interesante porque imagina que solamente quieres operar de Lunes a
Viernes de 08:00 a 14:00. Si es Viernes y son más de las 14:00 y la orden actual del ciclo se
cierra entonces el robot ya no creará la siguiente orden hasta el Lunes a partir de las 08:00.
Recuerda que en el rango temporal puedes definir los días de la semana que quieras.
CONTROL MÁXIMO SPREAD
El robot ya incluía en la versión anterior la funcionalidad de controlar el Máximo Spread,
tanto para el inicio de ciclo como para crear una nueva orden dentro de un ciclo ya iniciado.
Esta funcionalidad consiste en que le podemos decir el máximo spread que puede haber en
el momento de iniciarse un ciclo o en el momento de crear una nueva orden dentro de un
ciclo ya iniciado.
Como ya habréis deducido este parámetro no se tiene en cuenta en el inicio de ciclo, ya que
sólo se tiene en cuenta cuando se va a crear una nueva orden dentro de un ciclo iniciado.