1. Introducción

Scala es un asesor experto para MT4, creado inicialmente para la ejecución de forma automática de diversas estrategias cuantitativas definidas en el “Curso gratis Interactivo de Estrategias Cuantitativas” impartido por Fernando Martinez Gómez Tejedor.

En este manual no se pretende dar explicación detallada a ninguna técnica, para eso está el curso anteriormente mencionado, sino como poder configurar scala para ejecutarla.

La funcionalidad de Scala tampoco cubre todas las técnicas cuantitativas, si bien está en constante evolución ampliando la funcionalidad constantemente.

Scala no solo tiene la capacidad de ejecutar técnicas aisladas, sino que tiene la capacidad de combinar multiples técnicas y encadenar unas u otras en función de reglas y resultados previos.

 

 

Descargar Scala v9.12

Descargar Scala Analyzer v9.12

 

Descargar Scala Manual v9.00

 

Licencia gratuita durante 1 mes para cuentas creadas a partir de este enlace: Roboforex

 

2. Ordenes, series y sistemas

 

Es importante saber que son ordenes, series y sistemas, ya que es la base de para poder configurar scala:

  • Órden: una orden es la unidad básica de operación en scala, prácticamente se corresponde con lo que es una órden en mt4. Scala tiene implementado un gestor de órdenes, y según la configuración o evolución de las órdenes creadas, puede traducir una orden de scala en una orden de mt4, pero también puede agrupar varias ordenes de scala en una sola orden de MT4 compactandolas, o hacer al revés, una orden de scala en varias de MT4 (ejemplo claro si tienes una orden de 60 lotes cuando MT4 te permita 50, scala maneja una sola orden y el gestor lo traduce en las necesarias para completar los lotes necesarios).
  • Serie: una serie es un conjunto de órdenes. En función del tipo de serie se crearan unas ordenes u otras. Salvo cierto tipo de series, una serie termina cuando se cierran todas sus órdenes. Las excepciones son series que crean constantemente órdenes.
  • Sistema: Un sistema es una concatenación de series. Un sistema no solo se encarga de ejecutar series una detrás de otra, sino que se la puede dotar de cierta lógica para ejecutar una serie u otra, a la vez que modificar el lotaje en función de la pérdida acumulada y resultado de la serie previa. Scala sabe cuando ha entrado en ganancias y debe reestablecer el lotaje. En scala se pueden crear múltiples sistemas que funcionarían de forma independiente unos de otros, cada sistema sabe gestionar sus ganancias y sus perdidas, analizar las reglas definidas en el y ejecutar una serie u otra sin que le afecte el resultado de otros sistemas, y todos corren concurrentemente.

Por encima de órdenes, series y sistemas, scala tiene un control sobre todo lo abierto para, según se tenga configurado, aplicar Stop Loss, Take Profit o Trailing Stop globales

La configuración de scala para definir las distintas series y reglas de cada sistema es bastante complejo, con una sintaxis bastante concreta, y de ahí la necesidad de la creación de dicho manual.

 

3. Interfaz de Usuario

Una vez arrancado el asesor experto, se muestra un panel de gestión del propio asesor experto, que tiene el siguiente aspecto:

En la zona superior, se indican valores globales, y tambien se tienen funciones globales. Concretamente se muestra:

  • Correct License, cuando la licencia es correcta, u otro mensaje indicando el motivo por el que no lo es
  • Spread: Es el spread del símbolo
  • Systems: Número total de sistemas ejecutándose
  • Sets: Número total de series ejecutándose
  • Orders: Número de ordenes abiertas:
  • Profit Closed: Beneficios ganados de órdenes cerradas
  • Floating Profit: Beneficio flotante de órdenes abiertas
  • Profit: Es la diferencia entre el Profit Closed y Floating Profit.
  • Botón "Stop": Para el asesor experto, Al pulsarlo donde ahora mismo se ve Running, se habilita un botón "Start" para hacer de nuevo que scala comience de nuevo a funcionar.
  • Botón "Finish All", cierra todas las ordenes abiertas, y en consecuencia, las series que han abierto dichas órdenes. Si el robot sigue "Running", al cerrar todo volverán a abrirse nuevas ordenes, con lo que en caso de que no se quieran reabrir, previamente habrá que haber parado el robot con el botón "Stop"

En la zona inferior, aparecen todos los sistemas definidos en el robot, pudiendo acceder a cada uno a través del scroll:

  • System: Se indica que sistema es el que se está viendo en cada momento, indicando la serie y regla ejecutada actulamente
  • Current Set Profit: Ganancias actuales de la serie en curso.
  • Losses Accumulated: Perdidas acumuladas en el sistema. Es el valor que luego se tiene en cuenta, en caso de aumentar lotaje trás pérdidas, para reestablecer el lotaje inicial
  • Multiplier Lot: Lotaje multiplicador sobre el defnido en las series. Este lotaje se va recalculando en función del capital riesgo y aumento de lotajes por pérdidas acumuladas.
  • Price Unit: Unidad Precio que se tiene en cuenta en el sistema. El valor 1 equivale a 1 pip.
  • Orders BUY, Orders SELL: Indica las ordenes BUY y SELL abiertas en el momento actual
  • Lots BUY, Lots SELL, indica los lotes BUY y SELL abierttos en el momento actual.
  • Etqueta Running: Indica que el sistema se está ejecutando. En función de los botones pulsados va cambiando de valor.
  • Botón "Lock Sys": Bloquea el sistema, inpidiendo tener ningún control del sistema sobre las series, y por tanto sobre las órdenes. Se excluye en este control a los controles genéricos de SCALA, ya sean TP o SL globales, etc.
  • Botón "Pause". Deja que termine la serie actual, pero para la ejecución de nuevas series
  • Botón "Close Orders": Cierra las ordenes abiertas del sistema. Si el sistema no está bloqueado o pausado, el sistema evaluará si tiene que ejecutar la siguiente serie y volver a crear nuevas órdenes
  • Botón "Fihish Set": Finaliza la serie actual cerrando sus órdenes y evalua la siguiente regla.
  • Botón "Fihish Sys": Finaliza el sistema, cerrando las órdenes abiertas. El sistema ya no se podrá volver a ejecutar, ya no se vuelve a evaluar ninguna regla del mismo.

 

4. Generación de sistemas

 

Cuando se arranca scala, lo que se hace es revisar que sistemas hay definidos, y que tipo de sistema hay configurado. Hay 4 tipos de generación de sistemas:

  • UNIDAD_PRECIO: En este caso, los sistemas configurados se ejecutan solo una vez (si bien, como ya se verá, no tienen por que terminar nunca, y aun estando vivos, no tienen porque estar ejecutando series si no se dan las condiciones configuradas). En este caso, hay otro campo donde se indican los pips que tiene una UNIDAD_PRECIO, que a la postre es lo que se configura luego en las series. Para que se entienda un poco mejor, podría tener definidas 2 sistemas uno con una serie 10,20,30 de compra, y otro con una serie 10,20,30 de venta, que cuando termine cada serie la vuelva a ejecutar.
  • FIBO: Hay una lógica para identificar Fibos, pudiendo por configuración indicar la mínima distancia en pips que tiene que tener un Fibo y el % de retroceso para considerar que hemos alcanzado un PHI0 o PHI6. Si bien quizás no sea la mejor forma de identificar un fibo, es la que hay implementada al menos hasta la versión 8.00. En este caso, cada vez que se identifique un PIBO nuevo, se lanzan todos los sistemas que haya definidos. Dado que según vaya cambiando el precio se van a ir identificando Fibos nuevos, hay que tener en cuenta que si se hacen sistemas que no finalicen, estos se van a ir multiplicando por cada Fibo, no pareciendo una configuración muy correcta. Se podría  por ejemplo definir un sistema que ejecute una serie 10,20,30 de compras y finalice una vez finalice la propia serie, y otro sistema con una serie de 10,20,30 de ventas que igualmente finalice. Por cada nuevo Fibo se lanzara de nuevo un sistema de cada.
  • NIVELES DINAMICOS: Si bien no hay nada en el Curso de Programación Cuantitativa al respecto, esto es una variante que trabaja con Gráficos Renko. Al igual que en los Fibo, cuando se identifica una vela Renko nueva se lanzan todos los sistemas.
  • MANUAL: En realidad, el scala manual pretende poder crear series únicamente con unas facilidades gráficas para indicar el tipo de serie y en que punto se crearán las órdenes, y tendrá un manual específico.

 

5. Configuraciones Comunes

 

Desde los parámetros de configuración, se pueden indicar ciertas configuraciones comunes a todas las órdenes, a todas las series, o a todos los sistemas. Principalmente son los siguientes:

  • Cálculo de Lotes:
    • Agrupar Ordenes: Cuando se crean distintas ordenes en el mismo precio, se puede indicar a Scala que las agrupe y mande solo una al bróker. Si bien es cierto, se pueden definir series que regeneren dichas ordenes posteriormente y, aunque sea en el mismo precio, en MT4 no hay hedging y estas siguientes serian ordenes independientes. Como se decía en apartados previso, Scala sabe gestionar las ordenes internas y las que envía al bróker.
    • Tipo Lotes Iniciales: Si bien en cada serie se indica que lotaje tiene cada orden, si este campo es FIJOS, iniciará la primera serie con el lotaje indicado, pero si es LOTES_RIESGO, en base a los parámetros “Cálculo Base” y “Cántidad Cálculo Base” ajustara dicho lote. Por poner un ejemplo, si el Cálculo Base es Balance, y la Cantidad Cálculo Base son 1000 euros, si tienes 10000 euros en la cuenta multiplicará esos lotes definidos en las series por 10. De esta forma, según aumente el balance de la cuenta aumentará el lote de las órdenes. También relacionado con esto está el “Capital Fuera Reinversión”. En el ejemplo anterior, si tienes 5000 euros fuera de la reinversión, descontaría esto de los 10000 euros que tienes, y multiplicaría el lote por 5 en este caso. En caso dar valor al parámetro "Capital Fuera Reinversion Porcentaje Calculo Base (1=100%, 0=0%)", se calcula el porcentaje sobre el cálculo base, es decir, balance, equidad, menor o mayor de ellos según se haya configurado, y se descuenta el mayor entre ambos parámetros de capital fuera de reinversión.
    • Ganancias para reiniciar lotaje: El lote va aumentando y disminuyendo según parámetros que se explicaran más adelante. Este parámetro vale para volver al lotaje inicial una vez alcanzadas ciertas ganancias.
    • Pérdidas para reiniciar lotaje: Igual que el anterior, pero en este caso por haber alcanzado ciertas pérdidas. Esto evita que perdidas consecutivas eleven tanto el lotaje que quemen la cuenta.
  • Max/Min Lotaje: Configuraciones para limitar el lotaje, tanto máximo como mínimo
  • Aumento Lotaje Órdenes: Entre serie y serie de un mismo sistema, se tiene en cuenta el resultado positivo, negativo o neutro de cada orden para multiplicar por un factor en función del resultado. Por ejemplo, si se tiene que incremente el lote en 1.5 cada orden que haya perdido, así lo hará en la siguiente serie
  • Aumento Lotaje Series: En este caso se contabiliza el resultado de la serie completa para multiplicar por un factor u otro todas las ordenes de la siguiente serie. Esto es complementario con el Aumento de Lotaje de Órdenes, es decir, si se define en la de órdenes que multiplique en 1.5, y en las series que multiplique por 2, las ordenes que a su vez hayan perdido de la serie anterior las multiplicará por 3.

A tener en cuenta con los lotajes e incrementos  que scala no tiene límites de decimales de las ordenes, de modo que incrementar en 1.1 un lote de 0.01 (es decir, 0.01 x 1.1 = 0.011), una vez que el lote gestionado por scala supere 0.015, al bróker ya le mandará 0.02.

  • Descartar Histórico: En caso de cerrar Scala, al volverlo a arrancar puede continuar con las órdenes que había creado previamente en caso de que valga false (no descartar histórico). A tener en cuenta que esas órdenes pueden haberse cerrado ya, que el precio sea muy dispar a cuando se cerró scala, o incluso que la configuración de series no fuera la misma. Esto está pensado para cierre accidental del gráfico donde está desplegado scala, un cierre de MT4, etc. En cualquier otro caso, lo aconsejado es tener el valor a true para descartar el histórico.
  • TP y SLs virtuales: Scala tiene la opción de no poner el TP o SL en las órdenes para que el bróker no lo vea, pero cuando llegue el precio scala cierre la orden. Ahora bien, si los TP y SLs son virtuales, para que se ejecuten tiene que estar corriendo scala.
  • Tiempo de cierre automatico de orden (segundos): Es el tiempo de vida que tendrá una orden. Al llegar a ese tiempo, scala la cerrará como esté, ya sea en pérdidas o en ganancias
  • Trailing Stop: Hay 4 tipos de trailing stop, uno de órdenes, otro de series, otro de sistemas, y otro global. En el de órdenes se puede hacer o bien por pips o bien por ganancias de la órden.  Como se verá más adelante, hay series que son infinitas, creando a su vez cada vez más series SE. En este tipo de series, si se quiere hacer un trailing stop al conjunto de ellas, hay que configurar el trailing stop de sistema. El Trailing stop se define en cada caso con 3 parámetros:
    • Disparo: Precio a alcanzar para activar el Trailing Stop
    • Distancia: Una vez activado el Trailing Stop, a la distancia en ganancias a la que se eliminará la orden/serie/sistema/todos los sistemas
    • Salto: Incremento de ganancias para volver a mover el Stop Loss a la distancia indicada en el parámetro anterior

Como ejemplo, podemos configurar un disparo a los 100 euros de ganancia, 80 de distancia, y 10 de salto. Una vez que se alcancen los 100 euros de ganancia, el Stop Loss se pondrá a 80 euros sobre dicha ganancia, es decir, te aseguras 20 euros (100-80). Cuando el precio se mueva 10 euros (el salto definido), es decir, alcanzamos una ganancia de 110 euros, el stop loss se muevo a 80 euros de dicha ganancia, asegurando 30 euros (110-80).

Aplicación del trailing stop:

    • Ordenes: Se aplica el Trailing Stop de forma individual a cada orden abierta en ese momento por Scala.
    • Series: Se aplica el Trailing Stop a la ganancia de todas las ordenes abiertas por cada serie. Se podrán tener ordenes en ganancia o en pérdida, lo que scala considera es la suma de las ganancias de todas ellas
    • Sistema: Se aplica el Trailing Stop a la ganancia de todas las series creadas en dicho sistema. Un Sistema no puede tener varias series abiertas concurrentemente, con lo que tiene en cuenta las ganancias de la serie actual junto a la de series ya terminadas
    • Global: En scala no hay límite en la configuración de número de sistemas. Los sistemas si se ejecutan concurrentemente, y el trailing stop aplicaría a todos los sistemas abiertos de forma global.
  • SL, TP Global: Si se alcanzan unas ganancias (TP) o pérdidas (SL) a nivel global, se cierran todas los sistemas. Si a su vez el parámetro “Parar Scala al alcanzar SL, TP o TS global” es true, scala no lanzará nuevos sistemas.
  • Inicio de Vela: En scala se pueden usar indicadores. Si bien en cada indicador se debe indicar sobre que vela aplicarlo, se puede definir una estrategia a vela cerrada y evaluar los indicadores solo a vela cerrada. El timeframe también es configurable en  el parámetro “TimeFrame considerado para el inicio de vela”.
  • Resultados Pantalla: Scala saca una ventana con diversa información y pinta líneas en función de cada tipo de serie. Se puede indicar si mostrarlos o no.
  • Magic Number: Si se quieren tener varios scala activos sobre el mismo símbolo, el tener un magic number distinto haría que cada uno guarde su propio histórico de resultados y órdenes en caso de que haya que reiniciar scala (parámetro “Descartar resultados Historicos”). También puede ser útil para sistemas externos como myfxbook, y saber que orden corresponde a que instancia de scala.

 

6. Configuraciones ESPECÍFICAS DE SERIES

 

En todas las series existentes en scala, las cuales se detallarán en posteriores apartados, se puede indicar de forma específica como aumentará el lotaje de la serie o de las órdenes de la serie en función del resultado de la serie anterior. Los parámetros en este sentido son los siguientes:

  • ASP: Aumento Serie con Pérdidas, multiplicará el lotaje por el valor de este parámetro si la serie anterior terminó en pérdidas.
  • ASG: Aumento Serie con Ganancias, multiplicará el lotaje por el valor de este parámetro si la serie anterior terminó con ganancias
  • ASN: Aumento Serie Neutra, multiplicará el lotaje por el valor de este parámetro si la serie termino neutra, con ganancias 0.
  • AOP: Aumento Orden con Pérdidas, multiplicará la orden que ocupe el mismo orden en la siguiente serie que terminó con pérdidas.
  • AOG: Aumento Orden con Ganancias, multiplicará la orden que ocupe el mismo orden en la siguiente serie que terminó con ganancias.
  • AON: Aumento Orden Neutra, multiplicará la orden que ocupe el mismo orden en la siguiente serie que terminó con ganancias 0.

Al igual que la configuración general, si hay tanto aumento de órdenes como aumento de series, aplicará ambas.

En caso de no existir estos parámetros en la serie usará los comunes en scala para este cometido.

La forma de aplicar esta configuración en las series se entenderá mejor una vez se vea la sintaxis de cada una, pero añadir a la configuración particular de cada serie el parámetro que se quiera usar. Por ejemplo, si en una serie se quiere aumentar el lotaje en 1.5 si la serie anterior terminó con pérdidas, seria añadir ASP=1.5

 

 

7. Sistemas y Reglas

 

Un sistema es un conjunto de series, y una serie es un conjunto de órdenes. En realidad, esto es cierto en las primeras versiones, con la evolución de scala existen series que no tienen órdenes pero realizan ciertas acciones, como se irá detallando en los siguientes apartados.

Scala también ha evolucionado a poner definir una lógica para ejecutar una serie u otra. Si bien en las primeras versiones se iban ejecutando una serie después de terminar la anterior, ahora son las reglas las que indican que serie es la que se ejecuta en cada momento.

En la configuración de scala, hay una serie de parámetros Sistema 1, Reglas 1, Sistema 2, Reglas 2, etc, que permiten configurar 20 sistemas. Si bien pudieran parecer suficientes, no hay limitación, salvo la de rendimiento al ejecutar demasiados sistemas, ya que en el parámetro “Fichero de Sistemas. De existir, solo usa esos sistemas”, donde se definen los sistemas y reglas en un fichero externo.

También existe la limitación por la plataforma MT4, en la que el número de caracteres de un parámetro es limitado, y esta limitación queda solucionada también si los sistemas y reglas se cargan por fichero. En dicho fichero vendrán en líneas alternas el sistema y las reglas.

La sintaxis a la hora de definir Sistemas y Reglas es muy estricta, si algo está mal definido scala no interpretará correctamente lo que debe ejecutar y no ejecutará nada. Si bien hay algunas validación de sintaxis, esta es muy básica y es el usuario de scala el que debe tener cuidado al definirla correctamente.

7.1 Configuracion de sistemas

La sintaxis de la configuración de un sistema es la siguiente:

[{serie1}&{serie2}&{serie3}&…&{serieN}]

El sistema debe empezar y terminar por corchetes […], se pueden definir tantas series como se quiera las cuales deben ir entre llaves {…} y cada serie debe ir separada por el símbolo &.

7.2.Configuracion de Reglas

Las reglas se configuran indicando en el T sub x que debe ejecutar, siendo esto una serie o una regla, y deben definirse de forma consecutiva, si hay 10 reglas la primera debe ser T1 y la última T10.

En las reglas, cada serie esta representada por una ese mayúscula “S” y el orden en el que está definida dentro del sistema.

Por ejemplo, T1=S1 sería una regla que ejecuta la serie 1. Si en este mismo ejemplo no hay más reglas, una vez termine S1 se acabó el sistema, para volver a ejecutarlo habría que volver a desplegar scala.

Es muy importante tener en cuenta que los parametro SL y TP tienen distintas interpretaciones:

  • Si el tipo de sistema es Fibo, indican el nivel PHI del fibo en el que se esté lanzando el sistema
  • Si es de unidad_precio y es un valor numérico, indica el número de Us
  • Si es de unidad_precio pero contiene indicadores, indicará el precio de mercado. Por ejemplo SL=IMA(60,1,9,0,1,0)

  El parámetro TP, a parte de admitir valores numéricos, tambien admite funciones de las reglas, tal como LOTS=ILOTSBUY

7.3.Cargar Sistemas de Fichero Externo

Si el sistema o serie a definir sobrepasa los limites de MT4 en cuanto a longitud de línea, o si se desean crear más de 20 sistemas, la alternativa es cargándolo en un fichero externo. El fichero externo deberá tener en lineas alternas la definicion del sistema y las reglas oportunas, con el prefijo sistema= o reglas= en función de si se define un sistema o sus reglas. Por ejemplo, el contenido del fichero puede ser:

sistema=[{ORD=3;TYPE=BUY;LOTS=0.01,0.01,0.01;TP=30,30,30;SL=10,20,30}]
reglas=T1=S1;T2=GOTO(1)
sistema=[{ORD=3;TYPE=SELL;LOTS=0.01,0.01,0.01;TP=30,30,30;SL=10,20,30}]
reglas=T1=S1;T2=GOTO(1)

El fichero se ha de colocar en el directorio files. Si bien la ventana de operación de MT4 y la simulación lo coge de directorios distintos, habrá que tener en cuenta que en caso de opearar en demo/real, el directorio donde hay que ponerlo es en  ...\MQL4\files, y pare realzar pruebas de estrategia en ...\tester\files.

A dicho fichero se le da un nombre, y ese nombre es el que se indica en el parámetro "Fichero de Sistemas. De existir, solo usa esos sistemas".

8. Tipos de Series

Las series en scala tratan de abarcar distintas estrategias cuantitativas. En este manual se explicará cómo configurar cada serie sin entrar en detalle estadístico sobre cada una.

En la version 9.2 se incorpora un parametro para todas, el FIX_LOT=1, que significa que el lote que se usa es el definido en la serie, no se aplica la modeficación del lote en funcion del lote riesgo o del aumento de lote por perdidas. Esto es aplicable a crear una serie de cobertura donde se calculan los lotes en función de la serie a cubrir, y que este lotaje no se multiplique por ningun otro factor calculado por scala

En todas las series se puede configurar el parámetro COM=Comentario, SCALA pondrá el comentario de las ordenes de dicha seríe en vez del comentario global.

 

8.1 Serie SE

La serie SE es la más esencial de todas, crea una serie de órdenes en el mismo precio, cada del tipo (BUY/SELL) lote, TP y SL indicados.

Esta tipo de serie sirve para configurar una 10,20,30, aunque no tiene restricciones, al igual que el resto de series, en número de órdenes y resto de parámetros de la serie.

Ejemplo de definición de un sistema con esta serie:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=0.01;TP=30;SL=10,20,30}]

En este ejemplo, se crean 3 ordenes BUY, de 0.01 lotes, todas con TP=30 y SL 10 la primera, 20 la segunda y 30 la tercera.

Cada orden tendrá definido su lote, su TP y su SL, pero si varias órdenes van a tener el mismo valor, cogerá el último que haya configurado en cada apartado. Para ayudar a comprender esto, la misma serie podría definirse (se resalta la diferencia):

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=0.01,0.01,0.01;TP=30,30,30;SL=10,20,30}]

Hay que prestar atención a que los valores indicados en TP y SL se multiplican por los pips definidos en el paremetro “U” (Unidad Precio). En el ejemplo, si U valiera 1, el TP de todas sería 30 pips, es decir 300 puntos (en caso de brokers con 3 y 5 decimales)

El TYPE, en esta y resto de reglas, admite los valores BUY y B para largos y SELL y S para cortos

Para que scala ejecute la serie, hay que definir también las reglas, en este caso:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=0.01;TP=30;SL=10,20,30}]

Reglas1 ==> T1=S1

Se pueden combinar también BUYS y SELLS, y las combinaciones que se quieran con los parámetros de la serie. Por ejemplo, una BUY de 0.01 lote, una SELL de 0.02 y otra BUY de 0.03:

Sistema1 ==> [{ORD=3;TYPE=BUY,SELL,BUY;LOTS=0.01,0.02,0.03;TP=30;SL=10,20,30}]

 

En la imagen se vería en azul el precio de entrada, en morado los TPs en el mismo sitio y en color claro los SL

 

8.2 Serie DEMO

Una serie DEMO es una serie que no lanza órdenes a mercado. Aunque no lance órdenes a mercado, scala dibuja las líneas de apertura, TP y SL de las órdenes ficticias y las cierra cuando el precio los alcanza.

Esta serie finaliza cuando se den un número de series consecutivas en pérdidas, dicho número indicado en el parámetro DEMO.

La sintaxis de esta serie es la siguiente:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;DEMO=2}]

Si se combina con una serie SE de Ventas detrás de una DEMO de Compras:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;DEMO=2}&{ORD=3;TYPE=SELL;LOTS=0.01;TP=30;SL=10,20,30}]

Reglas 1 ==> T1=S1;T2=S2

 

8.3 Serie DEMOC

Una serie DEMOC es una serie DEMO Completa, deben perder todas sus ordenes. Se diferencia con la serie DEMO que esta debía tener un resultado negativo, pero alguna de sus órdenes ficticias podían haber acabado en ganancias.

La sintaxis de esta serie es la siguiente:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;DEMOC=2}]

8.4 Serie DEMOINV

Una serie DEMOINV es una serie DEMO INVERSA, es decir, termina cuando haya el número de series indicadas consecutivas en ganancias.

La sintaxis de esta serie es la siguiente:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;DEMOINV=2}]

8.5 Serie DEMOINVC

Una serie DEMOINC es una serie DEMO INVERSA COMPLETA, es decir, termina cuando haya el número de series indicadas consecutivas en ganancias en las que ganan todas sus órdenes.

La sintaxis de esta serie es la siguiente:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;DEMOINVC=2}]

8.6 Serie TI

Una serie TI es una serie de tiempo, deben pasar X pips para activarse la serie. Al igual que el SL y el TP, esa cantidad de pips también va definido en Us

La sintaxis es la siguiente:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;TI=1}]

En este ejemplo, el precio debe retroceder 1U para crear la serie. TI puede ser tanto positivo como negativo, si es positivo el precio debe retroceder teniendo en cuenta el tipo de la primera orden de la serie. Es decir, si la primera orden es BUY, retroceder significa que el precio debe bajar antes de crear la serie, y si fuera SELL, retroceder significa que el precio debe subir.

En esta serie aplican a su vez 2 parámetros mas:

  • TO: Trailing Open: En caso de estar definida, el precio de entrada va siguiendo al precio. Si el precio en vez de retroceder, avanza lo indicado en TO (medido en Us), ajusta el TI en función de hasta donde llegue el precio. De esta forma, una vez que retroceda el precio, pero ya no desde donde se lanzó la serie, sino desde donde alcanzó el precio, comienza a generar las órdenes.
  • PD: Precio de Descarte: Si el precio en vez de retroceder avanza, si el PD (medido en Us) está definido, al alcanzarlo, anula la serie. El precio de descarter siempre debe ser positivo, ya que se descarta una serie solo si el precio va en sentido contrario a donde se debe crear la orden.

 

Ejemplo de TI con TO y PD:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;TI=1;TO=1;PD=3}]

En este ejemplo, si el precio retrocede de inicio 1U crea las ordenes. Por el contrario si avanza, una vez que avance 1U provoca que si a partir de ese precio vuelve a retroceder otra U crea las órdenes. Si el precio sigue subiendo, siempre algo menos que 3U, en cuanto retroceda 1U crea las ordenes. Si el precio avanza 3 Us sin haber creado ninguna orden, anula la serie.

8.7 Serie OTI

Una serie OTI es una serie de tiempo entre órdenes, se define la distancia en Us a la que se ejecuta cada orden.

Los valores que se indican en el parámetro OTI van referenciados siempre al precio de comienzo de la serie, por ejemplo si quiero que la primera orden se ejecute al crear la serie, la segunda a 1U de la primera, y la segunda a 1U de la segunda, hay que pensarlo siempre referenciado al punto inicial, es decir, la primera a 0Us, la segunda a 1Us y la tercera a 2Us.

La sintaxis seria la siguiente:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;OTI=1,2,3;TO=1;PD=3}]

Como se aprecia, la serie OTI también admite los parámetros TO y PD, aunque aquí el PD, si hay órdenes creadas pero falta alguna, en vez de cancelar la serie, dejará que terminen las órdenes abiertas pero no abrirá nuevas.

Las órdenes se crearán en orden, es decir, hasta que no se crea la primera no se podrá crear la segunda. En el siguiente ejemplo se define un OTI que crea un BUY si retrocede 3Us, crea un SELL si vuelve al precio de entrada y vuelve a crear otro BUY si de nuevo retrocede 3Us:

Sistema1 ==> [{ORD=3;TYPE=BUY,SELL,BUY;LOTS=1,3,9;TP=3;SL=1;OTI=3,0,3;TO=1;PD=1}]

 

Esto sería un ejemplo de OTI, donde se ven en azul donde se abriría cada orden, en morado donde tendrían los TPs y en color claro los SL

8.8 Serie OTIC

Una serie OTIC es una OTI Condicionada. Se crea la siguiente orden si la primera fue ganadora, o lo va siendo si aún sigue abierta.

La sintaxis es similar a la OTI:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1;OTIC=1,0,-1;TO=1;PD=3}]

En este ejemplo creará un BUY si el precio retrocede 1U. Si el precio sigue retrocediendo y la orden sale por SL, aunque vuelva a subir el precio al que había al comenzar la serie, ya no creará la segunda y sucesivas órdenes por haber cerrado en pérdidas la primera.

Si todo va bien, retrocedería 1U, y el precio avanzaría creando dos nuevas compras mas arriba.

8.9 Serie OTIR

Una serie OTIR es una serie OTI Random, se crean todas las órdenes pendientes al comienzo de la ejecución de la serie y así no llevar un orden a la hora de ejecutar las órdenes.

En este tipo de serie se usan 2 precios de descarte, uno superior PDU y otro inferior PDD. A tener en cuenta que ambos parámetros están referenciados al precio de comienzo de la serie. Por tanto, el PDU deberá tener un valor positivo y el PDD un valor negativo, de modo que según comience la serie no se haya alcanzado un Predio de Descarte.

Ejemplo de sintaxis:

Sistema1 ==> [{ORD=4;TYPE=BUY,BUY,SELL,SELL;LOTS=1;TP=3;SL=1;PDU=7;PDD=-6;OTIR=-1,2,-3,4}]

8.10 Serie OTIRR

Una serie OTIR es una serie OTI Random Recursiva. Se calcula el precio de apertura de cada orden y se crea siempre una nueva orden cuando el precio pase por dicho precio. Si una orden se cierra y el precio vuelve a pasar por el precio de apertura de dicha orden, se vuelve a crear otra orden igual.

Al igual que en la serie anterior, aquí también aplican los parámetros PDU y PDD

El sentido del precio en vez de venir determinado por el tipo de la primera orden, tiene un parámetro específico, SENT, que si vale 1 es hacia arriba y -1 hacia abajo.

Ejemplo de sintaxis:

Sistema1 ==> [{ORD=4;TYPE=BUY,BUY,SELL,SELL;LOTS=1;TP=3;SL=1;PDU=7;PDD=-6;OTIRR=-1,2,-3,4;SENT=1}]

8.11 Serie BS

Una serie BS es una serie balanceada, la cual crea varias series SE separadas según indique en el parámetro BS.

La sintaxis básica sería algo así:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=1;TP=3;SL=1,2,3;BS= 1}]

En este ejemplo, crearía una serie SE cada 1U según avance el precio hacia arriba. El número de series a crear lo determina el mayor valor de TP y SL. En el ejemplo el mayor coincide tanto el SL y el TP que es 3, y como crea series cada 1, crearía 3 series (3 entre 1).

El resultado de la serie BS es el resultado de todas las órdenes creadas por todas las series.

 

A la hora de que scala gestione una serie BS, hasta que no termine de ejecutarse por completo con todas las subseries internas, no la dará por terminada. Por tanto la decisión de modificación del lotaje en función de la pérdida o ganancia de la serie será una vez termine por completo, momento también en el cual analizará la siguiente regla.

Una BS admite también los parámetros TI, TO y PD, y el valor de BS puede ser , puede ser – o - en función de si se quiere que las series se creen en sentido progresión del precio (si la primera orden es BUY y BS es , las series las creará hacia arriba, y si la primera orden es SELL y BS es , las series las creará hacia abajo. Si la primera orden es BUY y BS es -, la siguiente serie la creará hacia abajo y si la primera orden es SELL y BS es -, la siguiente serie la creará hacia arriba), o hacia ambos lados.

El que una serie BS tenga el parámetro TI, implica que la primera serie la crea a la distancia indicada en TI. Si a su vez tiene TO, irá persiguiendo el precio, y abrirá cuando retroceda lo indicado en TI, explicado en apartados anteriores.

 

8.12 Serie BSI

Una serie BSI es una serie balanceada infinita, la cual crea varias series SE separadas según indique en el parámetro BSI, y es una serie que no termina nunca. Aún así, tiene en cuenta los ciclos en los que se crea de nuevo un BS para recalcular el lotaje en función de las pérdidas.

Entre BS y BS, aunque recalcule el lotaje de referencia de la siguiente BS, la anterior no tiene por que haber terminado, lo que implica que hace el cálculo en base al resultado de las órdenes cerradas, y la ganancia que tengan en ese momento las abiertas.

Una serie BSI admite los parámetros TI, TO y PD. El valor de BSI también puede ser , puede ser –, o puede ser - al igual que las BS.

Ejemplo de sintaxis:

Sistema1 ==> [{ORD=3;TYPE=BUY;LOTS=0.1;TP=3;BSI= -1;SL=1,2,3;TI=3;TO=1}]

8.13 Serie BSICL

Una serie BSICL es una BSI con Lotaje Controlado, crea las ordenes igual que el BSI, pero por arriba siempre va con el lotaje mínimo, y por debajo lo calcula en función del mayor lotaje de las ordenes abiertas

Ejemplo de sintaxis:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=0.01;TP=1;SL=0;BSICL= 1}]

8.14 Serie BSISP

Una serie BSISP es una BSI Scalping Pending, que es como una serie BSI con órdenes pendientes donde se recrean aquellas órdenes que ya se hayan cerrado. En esta serie se indica desde que precio se quiere empezar (PC, precio de comienzo), y que precios abarcará por arriba y por abajo, (PFH, precio fin high, y PFL, precio fin low). También tiene el parámetro NS, que es el número de series abiertas por arriba y por abajo.

Esta serie tiene la opción de cambiar el lotaje de una serie que haya sido regenerada, es decir, que se hayan cerrado sus ordenes y el precio vuelva de nuevo al precio de comienzo, y se pueden cambiar los lotes de las órdenes de esa serie regenerada con los parámetros AOG, AOP y AON;

En el parametro BSISP se indica cada cuantas Us se quiere crear una nueva serie SE, pudiendo hacer series con precio ascendente si se indica como primer caracter el signo menos, descendente si no se indica nada o se indica el signo más, y ambas si se indican ambos -.

Ejemplo de sintaxis:

Sistema1 ==> [{BSISP= -1;ORD=1;TYPE=BUY;LOTS=0.01;TP=1;SL=0;PC=1.00000;PFH=1,20000;PFL=0.98000;NS=10}]

 

8.15 Serie MBSI

Una serie MBSI es una multi serie balanceada infinita, crea un BSI cada X distancia. Para que se entienda esto la siguiente imagen muestra como se comporta un BSI tras otro, duplicando lotaje en la segunda BSI

 

UN MBSI, crearía un nuevo BSI desde el principio en el momento que el primer BSI crea el segundo ciclo de BS y así sucesivamente. En la siguiente imagen se ve como se formaría el segundo BSI:

 

La sintaxis de un MBSI es la siguiente:

Sistema1 ==> [{ORD=1;TYPE=BUY;LOTS=1;TP=10;SL=0;MBSI= -1;MBSI_INT= 10 }].

En cada orden de cada BSI se calcula el lote que debe tener teniendo en cuenta el resultado que tendria dicha serie si se cierran las órdenes en el peor de los casos, es decir, cerrando en su SL. De modo que la primera orden tendra como lote el indicado en LOTS, y las siguientes se calcularan según el parámetro genérico "Aumento lotaje tras perdidas" o, en caso de estar definida en la serie, el valor de ASP.

En esta serie se puede usar también el parámetro ADSI (aumento distancia Serie interior), que lo que hace es aumentar la distancia progresivamente en cada serie, para que en tendencias largas ponga las series cada vez más lejos. Lo que hace es aumentar la distancia lo que indique este parámetroen Us. A partir de la version 9.08 pasa de ser un valor fijo que va aumentando según la nueva serie a crear, a tomar valores separados por comas, de modo que sea configurable la separación de series en función de la serie a crear.Por ejemplo, ADSI=1,1,1,2,2,2,3 lo que haría seria aumentar la distancia en 1U al crear las 3 primeras ordenes (posteriores a la primera creada), en 2U las 3 siguientes, y en 3U a partir de la siguiente. Hay que tener en cuenta que lo que hace es aumentar y no definir la distancia donde debe crearse la siguiente serie. Es decir, si la separacion entre series son 5U, y el ADSI de la siguiente serie vale 1U, se creara a 5 1=6U.

El parámetro PD (precio de descarte) también su puede utilizar en las series MBSI para descartar la serie si sobrepasa dicho precio.

También se puede usar el parámetro CS (Cierre Serie)  para cerrar un BSI en cuanto cierre un BS y el computo del BSI termine en ganancias. De esta forma, si volviera el precio donde comenzó dicho BSI volvería a crearse otro con lotaje inicial, pero en otro caso ya se quedaría terminado y no generaría mas BSs.

Ejemplo de sintaxis:

Sistema1 ==> [{ORD=1;TYPE=BUY;LOTS=1;TP=10;SL=0;MBSI= -1;MBSI_INT= 10;ADSI=1;CS=1}]

A partir de la version 8.3, se incorlopran los siguientes parámetros:

  • SPU: Stop Profit Us: Una vez que la última orden de una BSI alcance lo indicado en este parámetro de ganancias en Us, si además la serie en su conjunto tiene beneficios, se cierra dicha BSI. Este campo admite varios valores separados por comas, que para cada orden creada se pueda definir un SPU distinto
  • SPM: Stop Profit Money: Una vez que la serie BSI en su conjunto alcance el beneficio indicado en este parámetro, se cierra la serie BSI
  • SPB: Stop Profit Balnace: Una vez que la serie BSI en su conjunto alcance la ganacia en % del balance indicado en este parámetro (valores de 0 a 1, siendo 0 el 0% y 1 el 100%).

  Si están definidos SPM y SPB, se coge el menor valor de ambos. Si el beneficio de una BSI alcanza dicho valor, se cierra. Si además está definido el SPU, se cierra si la última orden alcanza esas Us de ganancia y el beneficio de la serie es positivo. No tiene por que llegar al SPU o SPB, aunque si estos están definidos y se cumplen antes, cerrara la serie.

  Pongamos como ejemplo una MBSI que lo que hace es que cada U crea una nueva serie BSI (MBSI= -1), y cada BSI crea una nueva orden cada 5 Us (MBSI_INT=5). Queremos que cada nueva orden de cada BSI duplique el lote (ASP=2), y si la ultima orden llega al precio de la anterior se cierre la BSI entera. En este ejemplo, para que la ultima orden llegue al precio de la anterior tiene que recorrer 5 Us que es la distancia entre cada orden (SPU)5). Con estas premisas, la configuración quedaria de la siguiente forma

Sistema1 ==> [{ORD=1;TYPE=BUY;LOTS=0.01;TP=0;SL=0;MBSI= -1;MBSI_INT= 5;ASP=2;SPU=5}]

Si en vez de poner el TP=0 se pone a TP=5, pero no se pone el parámetro SPU, cuando una orden llega a su TP cerraría dicha orden pero no cerraria la BSI.

Una vez que se cierra una BSI, si el precio llega de nuevo al precio donde se inició, creará de nuevo otra BSI

Por otro lado también se ha añadido en la version 8.03 y trailing stop particular para cada BSI, ya sea definido en dinero o definido en % de balance. Los parametros en los que se indica dinero serian:

  • TSD: TS Disparo, es dedir, las ganancias que tiene que tener el BSI para activar el TS
  • TSP: TS Proteccion, es decir, la distancia en dinero en la que se cerrará el BSI sobre el máximo alcanzado, el cual se actualiza en función del siguiente parametro TSS.
  • TSS: TS Salto. Cuando el TS está activado, la protección se mueve cuando se incrementen las ganancias segun el salto.

Como ejemplo, si queremos que la serie se empiece a proteger cuando lleve 100 euros de ganancia, se indica TSD=100. Si en ese momento queremos que la serie al menos gane 20 euros, se define la proteccion como TSP=80, es decir, se permite que las ganancias bajen hasta 80 euros antes de cerrarla, ganando 20 euros en ese momento. Y si queremos que se vaya moviendo esa ganancia asegurada cada 10 euros, cuando la ganancia llegue a 110 ya se aseguran 30, cuando se llegue a 120 se aseguran 40, es decir, se mantienen los 80 euros de distancia.

De igual forma se puede indicar la ganancia según el balance:

  • TSBD: TS Balance Disparo, que indica el % del balance en valores entre 0 y 1 en el que comienza el TS
  • TSBP: TS Balance Proteccion
  • TSBS: TS Balance Salto

Ejemplo de sintaxis de ambos tipos de TS:

Sistema1 con TS à [{ORD=1;TYPE=BUY;LOTS=0.01;TP=0;SL=0;MBSI= -1;MBSI_INT= 5;ASP=2;TSD=1000;TSP=1000;TSS=100}]

Sistema1 con TSB à [{ORD=1;TYPE=BUY;LOTS=0.01;TP=0;SL=0;MBSI= -1;MBSI_INT= 5;ASP=2;TSBD=0.01;TSBP=0.001;TSBS=0.001}]

A partir de la version 8.05 de scala, se introducen 2 nuevos parámetros:

  • POH (Precio Operacion High)
  • POL (Precio Operacion Low).

Si POH está definido, si el precio de mercado supera su valor, no se crearán nuevas BSIs, y cuando termine la última, se da por terminada la MBSI. Si POL está definico, si el precio de mercado baja de su valor, tampoco se crerán nuevos BSIs y se dará por terminada la serie MBSI cuando ya no tenga ordenes abiertas. La utilidad de POH y POL es, por ejemplo, deinir un MBSI de compras si el mercado esta muy bajo (por debajo de POH), o de ventas si está muy alto (por encima de POL). Claro está que esto tiene sentido si hay definido un Stop Profit y que no solo dejen de crearse nuevos BSIs, sino que los BSIs actuales terminen.

En la versión 8.10 de scala, se introducen 2 nuevos parámetros

  • POHU (Precio Operacion High Medido en Us)
  • POLU (Precio Operacion Low Medido en Us).

Los parametros POHU y POLU, que tienen preferencia sobre POH y POL, indican las Us a las que está el Precio de Operacion High y Precio Operacoin Low sobre el precio de comienzo de la serie. Ambos toman valores positivos (el POLU indica las Us por debajo de precio)

 

Por ejemplo, en el VIX, se puede definir un MBSI de compras si está en la zona baja y de ventas si está en la zona alta:

Sistema1 ==> [{ORD=1;TYPE=BUY;LOTS=1;TP=0;SL=0;MBSI= -10;MBSI_INT= 10;ASP=2;SPU=10;POH=20}]

Sistema2 ==> [{ORD=1;TYPE=SELL;LOTS=10;TP=0;SL=0;MBSI= -10;MBSI_INT= 10;ASP=2;SPU=10;POL=30}]

En la version 9.00 se incorporan los siguientes parametros:

  • FIN=1: Una vez que terminen las órdenes que tiene abiertas, se finaliza el sistema
  • OITF=TimeFrame: Solo se crean ordenes al inicio del time frame indicado, en minutos
  • MAXO=#: Se indica el número máximo de series (por lo general las series se crean de una orden) dentro de un MBSI_INT que se pueden crear. Al ir a crear la siguiente, se cierra el MBSI_INT asumiendo las pérdidas.
  • MAXOC=1: Si vale 1 se cierran el MBSI al alcanzar el numero maximo de ordenes. En otro caso se mantienen abiertas

En la version 9.03 se incorpora el siguiente parámetro:

  • UPEND=#, Usar Pendientes. Si se define este parámetro, se crearan las ordenes pendientes indicadas y se pondrá TP a las órdenes

En la version 9.12:

  • SPUP=0. Si SPUCP (Stop Profit U Positive). Aplica a MBSI y MBSI_SCSV, si vale 0 no tiene porque estar en gannacias el MBSI para cerrar. Por defecto vale 1

 

8.16 Serie PREPRO

Una serie PREPRO es una serie de órdenes preprogramadas. La idea de este tipo de serie es indicar en rango de precios puede operar y que pérdida máxima se puede generar, y scala calculará cuantas órdenes creará y con que lotaje. Tambíen habrá 2 formas de configurarlo en función de los parámetros usados, con precios fijos de mercado, con precios relativos al precio de mercado medidos en Us.

Los parámetros comunes a ambas configuraciones son los siguientes:

  • PREPRO: dinero máximo de pérdida. Parámetro obligatorio que es el que va a identificar que se trata de una serie PREPRO.
  • PBLANCE: Pocentaje de balance máximo de pérdida. Los valores van de 0 a 1, siendo 0 un 0% y 1 un 100%, y en caso de estar defiinido, la pérdida máxima se calculara de esta forma, no hará caso a lo indicado en el parámetro PREPRO, aunque siga siendo obligatorio indicarlo.
  • TYPE: Tipo de órdenes, puede tomar los valores BUY o SELL
  • MOTI: Separación mínima entre órdenes. Al calcular cuantas ordenes crear y en que precios, se mantendrá una distancia mínima entre órdenes indicada en este parámetro, medido en Us
  • AL: Aumento de lotaje entre la primera y la última órden. En función de la pérdida definida y el rango de mercado indicado, se tratará de que la última orden sea superior respecto a la primera según este parámetro. Si no se define, el valor por defecto es 10, es decir, si scala decide que la primera orden vale 0.01 lotes, la última valdría 0.1

Parámetros de precios fijos de mercado:

  • PC: Precio de comienzo, que es donde se creará la primera orden
  • PF: Precio de fin, que es donde se crerá la última orden
  • PPT: Precio de pérdida total, que es donde se fijará el SL de todas las órdenes
  • PS: Precio de salida, que es donde se fijará el TP de todas las órdenes
  • PD: Predio de descarte. Si se alcanza dicho precio de mercado, se cancela la serie

Parámetros de precios relativos al precio de mercado, medidos en Us. Estos parámetros se definen con valor positivo si supera al precio de mercado y negativo si es inferior al precio de mercado.

  • PCU: Precio de comienzo. Por ejemplo, si vale 1, el precio de comienzo es una U por encima del precio de mercado y si vale -1, sería una U por debajo del precio de mercado
  • PFU: Precio de fin, medido en Us
  • PPTU: Precio de pérdida total, medido en Us.
  • PSU: Precio de salida, medido en Us
  • PDU: Precio de descarte, medido en Us. Si el precio alcanza el precio de descarte, ya no se crearía la serie. Un ejemplo de uso es que si se quiere defnir una serie PREPRO BUY, pero el precio en vez de bajar sube, se puede definir un PDU=3, y si el precio de mercado sube 3Us ya no crearía la serie.
  • TO: Trailing open, que de estar definido debe indicarse igual a 1 (TO=1), y que si el precio de mercado va en contra del precio de comienzo, mueve todos los precios indicados según se mueva el mercado. Por ejemplo, si se quiere hacer una PREPRO BUY, y el precio de comienzo se define 1U por debajo del precio actual. Si el precio sube 2U, la PREPRO comenzará 1U por debajo respecto de esa subida de 2U.

Ejemplo de sintaxis con precios de mercado:

Sistema1 ==>  [{PREPRO=1000;TYPE=BUY;PC=1.17;PF=1.12;PPT=1.10;PS=1.20;MOTI=1;AL=5}]

Ejemplo de sintaxis con precios relativos a U, con órdenes BUY, donde los valores de comienzo, fin y perdida total son negativos, y el de salida y descarte positivos:

Sistema1 ==> [{PREPRO=1000;TYPE=BUY;PCU=-1;PFU=-10;PPTU=-12;PSU=2;MOTI=0.1;PDU=5;TO=1;PBALANCE=1}]

Ejemplo de sintaxis con precios relativos a U, con órdenes SELL, donde los valores de comienzo, fin y perdida total son positivos, y el de salida y descarte negativos:

Sistema ==>  [{PREPRO=5000;TYPE=SELL;PCU=1;PFU=20;PPTU=50;PSU=-4;MOTI=0.01;TO=1;AL=20}]

 

8.17 Serie SCSV

Una serie SCSV es una serie de Simplemente Comprar y Simplemente Vender, a partir de un precio hacia arriba hace solo compras, y a partir de un precio hacia abajo hace solo ventas.

Este tipo de serie se puede configurar para que lance a su vez nuevos SCSV a otro precio sin que la primera serie haya terminado.

Los parámetros de esta orden son SCSV, donde se indica la separación de la creación de las primeras ordenes BUY por arriba y SELL por abajo, como siempre medido en Us. SO sería la separación entre órdenes. LOTS el lotaje de la primera orden. AL el aumento de Lotaje, es un multiplicador que por defecto en caso de no definirse sería 1. MULT indica si se generan multiples SCSV a distintas distancias, indicando justo la distancia en este parámetro. TP es el dinero ganado en el cual se cierra la serie. TPP es el porcentaje de dinero ganado respecto al balance de la cuenta en el que se cierra la serie. SL el dinero perdido para que se cierre la serie.

En la versión 9.06 se incorpora el parámetro SCSV_MAXO, que indica el número máximo de ordenes en cada lado que puede crear. Es decir, si vale 10, solo puede crear 10 BUYS y 10 SELLS. En caso de crear 10 BUYS y 10 SELLS cierra el SCSV en perdidas
 

Ejemplo de sintaxis:

Sistema1 ==> [{SCSV=2;SO=1;LOTS=0.01;AL=1.2;MULT=1;TP=1000;SL=100}]

8.18 Serie SCSV_PEND

Una serie SCSV_PEND es una serie de Simplemente Comprar y Simplemente Vender que crea las órdenes pendientes en vez de crearlas a mercado según avanza el precio. En este caso hay que indicar cuantas órdenes se van a crear., a partir de un precio hacia arriba hace solo compras, y a partir de un precio hacia abajo hace solo ventas.

Los parámetros son SCSV_LIMIT que indica donde activar la serie (Us sumadas al precio actual), ORD que indica el número de órdenes, OPEN la distancia de apertura de la primera orden, SO la separación entre órdenes, TPO el TP de las ordenes respecto a OPEN, TP el take profit en dinero de la serie, SL el stop loss en dinero de la serie.

8.19 Serie CLOSE

Una serie CLOSE es un tipo de serie atípico que no crea ordenes, y que a su vez afecta a todos los sistemas que en ese momento estén corriendo. Esta clase cierra órdenes abiertas de todos los sistemas, y admite distintos valores para cerrar unas órdenes u otras:

  • ALL: Cierra todas las órdenes de todos los sistemas y además finaliza las series. Esto último es importante, porque puede haber series que aun tenga órdenes pendientes de crear, o series infinitas. También reinicia el lotaje multiplicador , es decir, la siguiente serie comienza por el lote que tenga definido sin aplicar los aumentos de lote previos.
  • BUY: Cierra todas las órdenes BUY que haya creadas hasta ese momento
  • SELL: Cierra todas las órdenes SELL que haya creadas hasta ese momento
  • BE_BUY: En vez de cerrar, pone en Break Even las ordenes BUY que haya en ese momento, y claro está, que vayan ganando.
  • BE_SELL: Pone en break even las ordenes SELL que haya en ese momento
  • WIN_BUY: Cierra las órdenes BUY que vayan ganando en ese momento
  • WIN_SELL: Cierra las órdenes SELL que vayan ganando en ese momento
  • SYSTEM: Cierra las ordenes de un sistema. Se tendria que indicar el sistema tambien en un nuevo parametro SYSTEM. La sintaxis en este caso seria {CLOSE=SYSTEM;SYSTEM=1}

En la version 9.02 se añade el parámetro RESET_LOSS, que hace que el sistema comience con el lote base. Solo es aplicable para ALL o SYSTEM, y tiene sentido cuando se usa lote riesgo o cuando se amplia lotaje por pérdida de serie. Si se quiere usar, se debe indicar de la siguiente forma: RESET_LOSS=1, por ejemplo: {CLOSE=ALL;RESET_LOSS=1}

La sintaxis de la serie es:

Sistema1 ==> {CLOSE=ALL}

8.20 Serie CHANGEU

Una serie CHANGEU, al igual que la CLOSE, tampoco crea órdenes y afecta a todos los sistemas, y lo que hace es cambiar la U (Unidad Precio). Hay varias formas de cambiar la U, cada una con una sintaxis distinta porque necesita de parámetros distintos:

  • [{CHANGEU=FIX;U=20}]: Cambia la U a un valor fijo
  • [{CHANGEU=MULTIPLY;FACTOR=1.5;MAX=50;MIN=10}]: Multiplica la U anterior por "x", Si MAX y MIN están definidos no superará esos valores.
  • [{CHANGEU=ZIGZAG;TF=60;DEPTH=12;DEVIATION=6;BACKSTEP=3;PORC=10;MAX=50;MIN=10}]: Para usar este método es necesario que se tenga instalado el indicador “ZigZag”. TF sería el TimeFrame en minutos, DEPTH, DEVIATION y BACKSETP son los parámetros de entrada del indicador ZigZag. Con estos parámetros se busca el máximo y mínimo previo al precio, y se calcula la U como esa distancia aplicándole el porcentaje indicado en el parámetro PORC (que debe tomar valores enteros, usualmente del 1 al 100). También admite los parámetros MAX y MIN para poner unos límites al valor de U.
  • [{CHANGEU=CANDLES;TF=60;N_CANDLES=50;PORC=10;MAX=50;MIN=10}]: Calcula el High y el Low del número de velas indicado en el parámetro N_CANDLES en el TimeFrame TF,  y  le aplica a la diferencia entre ellos el porcentaje indicado en PORC (número entero, usualmente entre 1 y 100). También admite los parámetros MAX y MIN para poner unos límites al valor de U.
  • [{CHANGEU=RESET}]: Cambia la U al valor configurado inicialmente en scala.

8.21 Serie LOCK

Una serie CLOSE es un tipo de serie atípico que no crea ordenes, sino que bloquea un sistema, es decir, no ejecuta las condiciones de control para poder crear nuevas órdenes, cerrarlas, etc.. En función del valor de LOCK, puedeo bien bloquear el sistema, bien desbloquearlo. Los parámetros son:

  • LOCK: Valores posibles 1 para bloquear, 0 para desbloquear
  • SYSTEM: Sistema a bloquear o desbloquear

La sintaxis de la serie es:

Sistema2:  {LOCK=1;SYSTEM=1}

Sistema3:  {LOCK=0;SYSTEM=1}

 

8.22 Serie WAIT

Una serie WAIT tampoco crea órdenes, simplemente deja esperar sin hacer nada. Los parámetros son:

  • WAIT, que puede tomar los valores:
    • CANDLES: Espera un número de velas (necesario indicar el parámetro TF)
    • INI_CANDLE: Espera hasta el inicio de vela (necesario indicar el parámetro TF)
    • HOUR_INTERVAL: Espera a que la hora del broker este en el intervalo horario definido
    • SECONDS: Espera los segundos indicados en el parámetro SECONDS
    • RND: Espera un numero de segundos aleatorio entre MIN y MAX
  • TF: TimeFrame en minutos

Ejemplos de la sintaxis de la serie es:

  • [{WAIT=CANDLES;TF=60;NCANDLES=8}] TF seria el Timeframe en minutos, y NCANDLES el numero de velas que el sistema estara sin operar
  • [{WAIT=INI_CANDLE;TF=60}] TF seria el TimeFrame en minutos
  • [{WAIT=HOUR_INTERVAL;HI=08:00;HF=20:00}] HI es la hora inicial y HF la hora final, ambos en formato hh:mm. En el ejemplo el sistema espera hasta que la hora del broker este entre las 8 horas y las 20 horas.
  • [{WAIT=SECONDS;SECONDS=10}]: Espera 10 segundos
  • [{WAIT=RND;MIN=10;MAX=30}]; Espera un número aleatorio de segundos entre 10 y 30 segundos.

 

8.23 Serie MBSI_SCSV

Definida a partir de la versión 9.06 de SCALA, la serie MBSI_SCSV es una combinación de BSI con SCSV. La idea es que primeramente se lance una serie BSI, y según avanza el precio, si la BSI no ha terminado aún, se lance en paralelo una SCSV, de modo que las perdidas de la BSI compense con las ganancias de la SCSV. Si bien puede ser contraproducente, ganando el BSI y dejando pérdidas el SCSV, hay distintos parámetros que ayudan a definir los sitemas de modo que se ajuste a lo que cada uno quiera configurar. Si la BSI ha terminado y aun no se dan las condiciones para comenzar el SCSV, esta no se ejecuta. Los parámetros que admite son los siguientes:

  • MBSI_SCSV=#, indica la distancia a la que comienza el SCSV
  • MBSI_SCSVC=#, una vez creada la SCSV, indica la distancia respecto a la primera orden donden se creará la orden contraria. Es decir, si la primera orden fue un BUY, la distancia donde se creará la primera SELL
  • MBSI_INT=#, separacion entre ordenes del BSI
  • ORD=#, numero de ordenes por serie dentro de la BSI. La BSI lo que lanza son series SE, no órdenes aisladas, aunque lo general en este caso es poner siempre 1
  • TYPE=BUY o SELL, tipo de ordenes de la BSI
  • LOTS=#, lotes de la primera serie BSI
  • ASP=#, multiplicador de los lotes del BSI en caso de que la serie pierda
  • TP=#, tp de las ordenes de la BSI
  • SL=#, sl de las ordenes de la BSI
  • SPU=#, Stop Profit de la BSI
  • MAXO=#, maximo numoero de series de ordenes del BSI. En caso de llegar al precio de la orden siguiente a crear, cierra el BSI en perdidas.
  • OITF=TF en minutos, Solo se crean ordenes a inicio de vela del TF indicado para la serie BSI
  • SCSV_MULT: Indica cuantas series simultaneas puede haber. Se creará una nueva cuando el BSI se cirere aunque el SCSV siga ejecutandose. Si su valor es 0, no hay limite
  • SCSV_LOTS=#: Lotes de la primera orden del SCSV
  • SCSV_SO=#: Separacion entre ordenes del SCSV, en Us
  • SCSV_AL=#: Aumento de lotaje de las ordenes del SCSV. Si se quiere que se decremente el lotaje, debera ser inferior a 1
  • SCSV_TP=#: TP en Dinero del SCSV
  • SCSV_TPP=#: TP en Porcentaje del balance del SCSV, valores entre 0 y 1
  • SCSV_SL=#: SL en Dinero del SCSV.
  • SCSV_CLOSE: Distintas opciones para cerrar el SCSV:
    • SCSV_CLOSE=0: Finalizar el SCSV cuando el BSI termina y el profit conjunto del BSI y SCSV es positivo (valor por defecto)
    • SCSV_CLOSE=1: Finalizar el SCSV cuando el BSI termina si el SCSV esta en ganancias. 
    • SCSV_CLOSE=2: Finalizar el SCSV cuando el BSI termina si el SCSV aunque este en perdidas
    • SCSV_CLOSE=3: Si el azote ha llegado a MAXO y no esta definido el MAXOC=1, y el profit del MBSI SCSV es positivo, cierra todo. 
    • SCSV_CLOSE=4: No finalizar el SCSV cuando el BSI termina, de modo que termine por un TP y TS 
  • MBSI_SCSV_CLOSE_PROFIT: Si se da la condicion de cierre, si este parametros esta definido, se mira que el profit sea superior a este valor
  • SCSV_MAXO: indica el numero maximo de ordenes en cada lado que puede crear. Es decir, si vale 10, solo puede crear 10 BUYS y 10 SELLS. En caso de crear 10 BUYS y 10 SELLS cierra el SCSV en perdidas

 

Ejemplo de sintaxis de la serie:

  • [{MBSI_SCSV=700;MBSI_SCSVC=500;MBSI_INT= 500;ORD=1;TYPE=BUY;LOTS=1;ASP=2;SPU=500;MAXO=7;SCSV_LOTS=10;SCSV_SO=500;SCSV_AL=1;SCSV_CLOSE=0}]

 

9. Reglas

Las reglas son las que van a permitir ejecutar las series. En un sistema se definen un conjunto de series, pero estas series se lanzan tras una lógica programable. Cada sistema tiene su propio conjunto de reglas.

Las reglas se identifican por un Tx, por ejemplo T1, T2,…T10, y es necesario que sean consecutivas, no se puede, por ejemplo crear T1,T2 y T4, debe comenzar por T1 y ser consecutivas. Cada regla va separada por punto y coma y la sintaxis es: Tx=Regla..

 

9.1 REGLA “S”

La regla S simplemente indica la serie que se quiere ejecutar, y tendrá que venir seguida por el orden de la serie que se quiere ejecutar.

Por poner un ejemplo, imaginemos que tenemos 2 series y queremos ejecutar primero la serie 1 y cuando termine esta, la serie 2:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=0.01;TP=30;SL=10,20,30}&{ORD=3;TYPE=SELL;LOTS=0.01;TP=30;SL=10,20,30}]

Reglas1 ==> T1=S1;T2=S2

De esta forma, el sistema1 tiene 2 series, una SE de tipo BUY y otra SE de tipo SELL. Scala analiza las reglas, y ve que en T1, tiene que ejecutar S1. Mientras se ejecuta S1, scala calcula si tiene que aplicar algún Trailing Stop, algún Stop Loss o Take Profit global, etc. Una vez finalice S1, scala determina si tiene que cambiar el lotaje de referencia, y lanza seguidamente la regla S2. Una vez finaliza la serie S2 ya no hay definido un T3, con lo que el sistema1 finaliza.

9.2 REGLA GOTO

La regla GOTO permite dar saltos entre las reglas, es decir, permite saltar a cualquier regla de las que haya definidas para, generalmente, formar bucles. Seguido de GOTO, entre paréntesis, se indica el número de la regla a ejecutar, por ejemplo GOTO(1)

Por ejemplo, imaginemos que tengo un sistema con una serie que quiero que se ejecute constantemente, es decir, que una vez finalice la serie cree otra igual:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=0.01;TP=30;SL=10,20,30}]

Reglas1 ==> T1=S1;T2=GOTO(1)

Se ha definido un Sistema1 con una orden SE de tipo BUY. La primera regla ejecuta la serie 1 y al finalizar, la regla T2 lleva el flujo de control a la Regla T1.  De esta forma, scala estaría constantemente iniciando una nueva serie una vez finalice, recalculando el lotaje tras finalizar cada serie.

Por desarrollar un poco mas este ejemplo, imaginemos que se tiene configurado un aumento de lotaje para series perdedoras de 1.5. Empieza la ejecución del sistema, se ejecuta la serie 1, y termina en pérdidas. Scala calcula el lotaje multiplicador, partiendo siempre de modo neutro, es decir, si las órdenes se deben crear con 0.01 lotes respetará ese valor, pero al terminar la serie, la siguiente serie se ejecutará con 0.01 x 1.5, es decir 0.015, que en este caso se ajusta a 0.01 (esto depende del MODE_MINLOT, MODE_MAXLOT, MODE_LOTSIZE y MODE_LOTSTEP del símbolo donde se esté operando). Si vuelve a perder, se vuelve a incrementar por 1.5, es decir, 0.015 x 1.5 = 0.0225, ajustando a 0.02 en este caso, y así sucesivamente. Si una serie es ganadora, según este ejemplo no se incrementaría, pero también se revisa si la suma de ganancias de todas las series previas es positiva o negativa. Si fuera positiva, se reinicia el lotaje y la siguiente serie la crearía de nuevo con 0.01, pero si fuera negativa, la crearía con el lotaje de la serie anterior.

Sirva este ejemplo para saber como se calculan los lotajes entre serie y serie, porque esto es algo común para todas las series.

 

9.3 REGLA END

La regla END finaliza un sistema. La sintaxis seria T1=END

 

9.4 REGLA CONDICIONAL

La regla condicional evalúa una condición para ejecutar después una regla u otra. Es importante saber que una regla condicional no tiene como resultado ejecutar una Serie, siempre tendrá como salida que Regla debe evaluar después.

La sintaxis de esta regla seria: T1= Condicion ? T2 : T3

Si se da la Condición, definida entre el igual y el signo de interrogación, se ejecutaría T2, y si no se cumple, se ejecutaría T3. Luego T2 y T3 pueden a su vez ser reglas condicionales, o reglas que ejecutan una Serie, un GOTO, etc.

Las condiciones, en general, son comparación de 2 cosas, y dicha comparación admite los operandos >, >=, <, <= e ==. Por poner un ejemplo, si se compara algo que vale 3 con algo que vale 4 con el comparador < (es decir, 3<4), el resultado será verdadero

Lo interesante de esta regla es la diversidad que hay en la configuración de condiciones, pudiendo aplicar distintas funciones, ya sea cálculo de resulta de series previas, como valores relativos a la vela, valor de indicadores, etc.

 

10. Funciones de las Reglas Condicionales

Las reglas condicionales permiten a scala programar cierta lógica para ejecutar una serie u otra. Al igual que en la configuración de series, la sintaxis es muy importante que sea correcta, un error a la hora de definir una condición puede provocar que scala no ejecute nada al no saber interpretarlo.

Para implementar dichas condiciones, scala tiene la capacidad de interpretar una diversidad de funciones que, en función del resultado de la función dentro de la condición, dará un resultado de verdadero o falso para saber si ejecutar lo que hay detrás de la interrogación, o lo que hay detrás de los dos puntos.

Cada Regla puede estar formada a su vez por operaciones entre distintos valores o indicadores, admitiendo los siguientes operadores:

  • Multplicador: *
  • Divisor: /
  • Suma:
  • Resta: -
  • Potencia: ^
  • Resto de división: %

 Se admiten los paréntesis, y tambien los operadores de comparacion:

  • Igual: ==
  • Mayor: >
  • Mayor o igual: >=
  • Menor: <
  • Menor o igual: <=
  • Distinto: !=

 Tambien se permiten operadores lógicos:

  • Y: &&
  • O: ||

Respecto al operador lógico O, al cargar un set MT4 tiene un bug y no carga lo que hay a partir del ||, este incluido, y se ha habilitado para este indicador tambien el símbolo @@

10.1 Funciones Resultado

10.1.1 Función Resultado ANTERIOR

La función resultado anterior devuelve el resultado de la serie anterior, admitiendo entre paréntesis el número de series previas de los que se quiere saber su resultado.

Una condición que use la función Resultado Anterior, suele usarse para saber si dicho resultado fue mayor o menor que cero para tomar una decisión, aunque no hay restricción para usarse como mejor convenga en cada momento.

Cuando se evalúa el resultado anterior de varias series, todas deben cumplir la condición indicada. Por ejemplo, si se quiere tomar una decisión si las 3 últimas series fueron perdedoras, será cierto si las 3 lo fueron, y no que la suma del resultado de las 3 lo fueran, siendo una de ellas ganadora.

La sintaxis solo para la última serie: RA.

La sintaxis para varias series: RA(n), donde n es el número de series a revisar.

Para mostrar un ejemplo de uso, se define un sistema con una serie SE de BUYs y otra de SELLs, y se ejecutan BUYS mientras la anterior BUY sea ganadora. En caso de que sea perdedora, se ejecuta una SELL y se continuará ejecutando mientras siga siendo ganadora:

Sistema1 à  [{ORD=3;TYPE=BUY;LOTS=0.01;TP=30;SL=10,20,30}&{ORD=3;TYPE=SELL;LOTS=0.01;TP=30;SL=10,20,30}]

Reglas1 à T1=S1;      T2=RA>0?T1:T3;                 T3=S2;                   T4=RA>0?T3:T1

Se separan un poco las reglas para que se vean mejor.

Explicando las reglas, scala ejecuta la regla T1, que ejecuta la serie S1. Al terminar, se ejecuta la regla T2, que revisa si el resultado de la anterior fue positivo, en cuyo caso vuelve a T1. Si no es positivo va a T3. En T3 ejecuta la serie S2, y al terminar, en T4 evalua si el resultado fue positivo. Si fue positivo, vuelve a T3 a ejecutar otra SELL, y en otro caso vuelve a T1 para ejecutar un BUY.

10.1.2 Función Resultado GLOBAL

La función resultado global devuelve el resultado de la serie anterior, al igual que en la función de resultado anterior, pero cuando se indica entre paréntesis el número de series previas, se calcula el resultado acumulado entre ellas.

La diferencia por tanto con la función de resultado anterior es que si, por ejemplo, quiero revisar el resultado de las 3 últimas series y ver si es mayor que 0, se revisa si la suma de las 3 sea positivo, aunque alguna de ellas haya sido negativa.

La sintaxis solo para la última serie: RG.

La sintaxis para varias series: RG(n), donde n es el número de series a revisar.

Partiendo del ejemplo anterior, si en vez de ver el resultado anterior se mira el resultado global de las 3 últimas series, quedaría de esta forma:

Sistema1 ==>  [{ORD=3;TYPE=BUY;LOTS=0.01;TP=30;SL=10,20,30}&{ORD=3;TYPE=SELL;LOTS=0.01;TP=30;SL=10,20,30}]

Reglas1 ==> T1=S1;      T2=RG(3)>0?T1:T3;            T3=S2;                   T4=RG(3)>0?T3:T1

10.2 Funciones relativas a velas

10.2.1 Función ICLOSE

La función ICLOSE devuelve el valor de cierre de una vela. Entre paréntesis lleva el TimeFrame en minutos, y la vela, siendo 0 la vela actual 1, la anterior y así sucesivamente

La sintaxis es ICLOSE(TF,vela). Por ejemplo, si se quiere obtener el cierre de vela de H1 de la vela anterior: ICLOSE(60,1)

 

10.2.2 Función IOPEN

La función IOPEN devuelve el valor de apertura de una vela. Entre paréntesis lleva el TimeFrame en minutos, y la vela, siendo 0 la vela actual 1, la anterior y así sucesivamente

La sintaxis es IOPEN(TF,vela). Por ejemplo, si se quiere obtener la apertura de vela de H4 de la vela actual: IOPEN(240,0)

 

10.2.3 Función IHIGH

La función IHIGH devuelve el valor más alto de una vela. Entre paréntesis lleva el TimeFrame en minutos, y la vela, siendo 0 la vela actual 1, la anterior y así sucesivamente

La sintaxis es IHIGH(TF,vela). Por ejemplo, si se quiere obtener el high de vela de M15 de la vela anterior: IHIGH(15,1)

 

10.2.4 Función ILOW

La función ILOW devuelve el valor más bajo de una vela. Entre paréntesis lleva el TimeFrame en minutos, y la vela, siendo 0 la vela actual 1, la anterior y así sucesivamente

La sintaxis es ILOW(TF,vela). Por ejemplo, si se quiere obtener el low de vela de M5 de la vela anterior: ILOW(5,1)

 

10.2.5 Función IVOLUME

La función IVOLUME devuelve el volumen de una vela (ticks de una vela, que es lo que se considera volumen en MT4). Entre paréntesis lleva el TimeFrame en minutos, y la vela, siendo 0 la vela actual 1, la anterior y así sucesivamente

La sintaxis es IVOLUME(TF,vela). Por ejemplo, si se quiere obtener el volumen de la vela de M5 de la vela anterior: IVOLUME(5,1)

 

10.2.6 Función IBID

La función IBID devuelve el valor del Bid en ese momento.

La sintaxis es IBID.

 

10.2.7 Función IASK

La función IASK devuelve el valor del Ask en ese momento.

La sintaxis es IASK.

 

10.2.8 Función ISPREAD

La función ISPREAD devuelve el valor del Spread en puntos en ese momento

La sintaxis es ISPREAD.

 

10.2.9 Función IPOINT

La función IPOINT devuelve el valor del punto del símbolo donde está desplegado scala

La sintaxis es IPOINT. Por ejemplo si se quiere calcular el valor del Spread sin usar la función ISPREAD, habría que calcularlo de la siguiente forma (IASK-IBID)/IPOINT.

10.2.10 Función IEQUITY

Devuelve la equidad teniendo en cuenta solo ordenes de la instancia de SCALA en ejecución, es decir, es el balance de la cuenta mas las ganancias de las ordenes abiertas en ese momento

 

10.2.11 Función IBALANCE

Devuelve el balance de la cuenta

 

10.2.10 Función INTIME

Calcula si la hora actual está dentro de un intervalo de tiempos. La sintáxis es la siguiente: INTIME(horaInicial,horaFinal)

La sintáxis de horaInicial y horaFinal es: hh:mm. Si se quiere indicar las 8 de la mañana, es necesario poner 08:00, la sintaxis no sería correcta si se pone 8:00

Si se está dentro del intervalo horario, la función devuelve el valor 1, y 0 en caso contrario

Este indicador está disponible a partir de la versión 8.10

 

10.2.11 Función IHIGHEST

Calcula el valor más alto del precio alcanzado en el timeframe y número de velas indicado. La sintáxis es la siguiente: IHIGHEST(TF,numVelas)

Este indicador está disponible a partir de la versión 8.10

 

10.2.12 Función ILOWEST

Calcula el valor más bajo del precio alcanzado en el timeframe y número de velas indicado. La sintáxis es la siguiente: ILOWEST(TF,numVelas)

Este indicador está disponible a partir de la versión 8.10

 

10.2.13 Función IDAYOFWEEK

Devuelve el día de la semana  (0-Domingo,1,2,3,4,5,6). La sintáxis es la siguiente: IDAYOFWEEK

Este indicador está disponible a partir de la versión 8.10

 

10.2.14 Función IDAYOFMONTH

Devuelve del día del mes. La sintáxis es la siguiente: IDAYOFMONTH

Este indicador está disponible a partir de la versión 8.10

 

10.2.15 Función IDAYOFYEAR

Devuelve de día actual del año. La sintáxis es la siguiente: IDAYOFYEAR

Este indicador está disponible a partir de la versión 8.10

 

10.2.16 Función IMONTH

Devuelve el mes actual del año (1-Enero,2,3,4,5,6,7,8,9,10,11,12). La sintáxis es la siguiente: IMONTH

Este indicador está disponible a partir de la versión 8.10

 

10.2.17 Función IHOUR

Devuelve la última hora conocida por el broker. La sintáxis es la siguiente: IHOUR

Este indicador está disponible a partir de la versión 8.10

 

10.2.18 Función IMINUTE

Devuelve el minuto de la última hora conocida del broker La sintáxis es la siguiente: IMINUTE

Este indicador está disponible a partir de la versión 8.10

 

10.2.19 Función ISECONDS

Devuelve los segundos del último minuto conocido por el broker La sintáxis es la siguiente: ISECONDS

Este indicador está disponible a partir de la versión 8.10

 

10.2.20 Función IYEAR

Devuelve el ultimo año conocido por el broker La sintáxis es la siguiente: IYEAR

Este indicador está disponible a partir de la versión 8.10

10.2.21 Función INICANDLE

La función INICANDLE(TF) devuelve 1 si es el inicio de vela y 0 no lo es del TF pasado por parametro, en minutos.

Este indicador está disponible a partir de la versión 9.00

 

10.3 Funciones de indicadores

Conjunto de funciones de indicadores propios de MT4

10.3.1 Función IMA

La función IMA se corresponde con la media móvil. A esta función hay que indicarle ciertos parámetros necesarios: TF,vela,Periodo,Desplazamiento,Metodo,Aplicar a

La sintaxis es IMA(TF,vela,Periodo,Desplazamiento,Metodo,Aplicar a), donde TF es el TimeFrame en minutos, vela es la vela a la que aplicar el indicador, siendo 0 la vela actual, 1 la anterior y así sucesivamente. Estos 2 parámetros son comunes a todas las funciones correspondientes a indicadores El resto de parámetros son los parámetros del propio indicador de MT4, donde:

  • Periodo es el Periodo de la Media Movil, valor entero
  • Desplazamiento es el desplazamiento, valor entero.
  • Método es el método, y puede tener los siguientes valores:
    • 0: MODE_SMA.Simple averaging
    • 1: MODE_EMA, Exponential averaging
    • 2: MODE_SMMA, Smoothed averaging
    • 3: MODE_LWMA, Linear-weighted averaging
  • Aplicar a, puede tomar los siguientes valores:
    • 0: PRICE_CLOSE
    • 1: PRICE_OPEN
    • 2: PRICE_HIGH
    • 3: PRICE_LOW
    • 4: PRICE_MEDIAN
    • 5: PRICE_TYPICAL
    • 6: PRICE_WEIGHTED

Un ejemplo de condición usando la función IMA:

T1=IMA(60,1,14,0,1,0)>ICLOSE(60,1)?T2:T3

En esta regla, si la EMA de 14 periodos a cierre de vela de la vela anterior en H1 es superior al cierre de vela en H1 de la vela anterior, ejecutar T2 y en caso contrario, ejecutar T3.

10.3.2 Función IMACD

La función IMACD se corresponde con el indicador MACD. A esta función hay que indicarle ciertos parámetros necesarios: TF, vela, Fast_ema_period, Slow_ema_period, signal_period, applied_price, mode.

La sintaxis sería: IMACD(TF, vela, Fast_ema_period, Slow_ema_period, signal_period, applied_price, mode)

Los parámetros propios del indicador son:

  • Fast EMA period, que es la EMA rápida
  • Slow EMA period, que es laEMA lenta
  • Signal Period, que es el MACD SMA
  • Applied Price, que es el aplicar A, que puede tomar los siguientes valores:
    • 0: PRICE_CLOSE
    • 1: PRICE_OPEN
    • 2: PRICE_HIGH
    • 3: PRICE_LOW
    • 4: PRICE_MEDIAN
    • 5: PRICE_TYPICAL
    • 6: PRICE_WEIGHTED

Por último está el parámetro mode. El indicador MACD puede devolver 2 valores, tiene 2 buffers de datos, el mode 0 se corresponde con el propio MACD, lo que se representa en mt4 con barras verticales, y el mode 1 se corresponde con la línea continua o Signal.

Si el parñametro mode vale 2, se mira el cruce entre ambas lineas del MACD respecto a la vela anterior, si se ha cruzado hacia arriba devuelve 1, devuelve -1 si el cruce es hacia abajo, y 0 si no ha habido cruce. 

 

Ejemplo de sintaxis:

IMACD(60,1,12,26,9,0,0): Se corresponde con el MACD de la vela 1 en H1, con parámetros 12,26,9 para la EMA rápida, EMA lenta y SMA respectivamente, aplicado a cierre de vela, y retornando el valor de la barra vertical (mode 0)

10.3.3 Función IRSI

La función IRSI se corresponde con el indicador RSI. A esta función hay que indicarle ciertos parámetros necesarios: TF,vela,Periodo,Aplicar a.

La sintaxis sería: IRSI(TF, vela, Periodo, Aplicar a)

Los parámetros propios del indicador son:

  • Periodo, que es el periodo a usar en el RSI
  • Aplicar A, que es el propio aplicar A, que puede tomar los siguientes valores:
    • 0: PRICE_CLOSE
    • 1: PRICE_OPEN
    • 2: PRICE_HIGH
    • 3: PRICE_LOW
    • 4: PRICE_MEDIAN
    • 5: PRICE_TYPICAL
    • 6: PRICE_WEIGHTED

 

Ejemplo de sintaxis:

IRSI(60,1,14, 0): Se corresponde con el RSI de la vela 1 en H1, con periodo 14, aplicado a cierre de vela.

10.3.4 Función IBANDS

La función IBANDS se corresponde con el indicador Bandas de Bollinger. A esta función hay que indicarle ciertos parámetros necesarios: TF, vela, Periodo, Desviaciones, Desplazamiento, Aplicar a, mode.

La sintaxis sería: IBANDS(TF,vela,Periodo,Desviaciones,Desplazamiento,Aplicar a,mode)

Los parámetros propios del indicador son:

  • Periodo
  • Desviaciones
  • Desplazamiento
  • Aplicar A, que es el propio aplicar A, que puede tomar los siguientes valores:
    • 0: PRICE_CLOSE
    • 1: PRICE_OPEN
    • 2: PRICE_HIGH
    • 3: PRICE_LOW
    • 4: PRICE_MEDIAN
    • 5: PRICE_TYPICAL
    • 6: PRICE_WEIGHTED

Esta función tiene 3 buffers de datos que puede devolver, que se indican en el parámetro mode, o que se corresponde con los siguientes valores:

  • 0: MODE_MAIN, que es la línea central
  • 1: MODE_UPPER, que es la línea superior
  • 2: MODE_LOWER, que es la línea inferior

 

Ejemplo de sintaxis:

IBANDS(60,1,14,2,0,0,1): Se corresponde con las bandas de bollinguer de la vela 1 en H1, con periodo 14, desviaciones 2, desplazamiento 0, aplicado a cierre de vela, retornando el valor de la línea superior.

Por ejemplo, si se quiere hacer una regla comprobando que la vela ha cerrado por encima de la banda superior de bollinguer:

T1=ICLOSE(60,1)>IBANDS(60,1,14,2,0,0,1)?T2:T3

En el ejemplo se comprueba si el valor del cierre de vela en H1 es mayor que la línea superior de la banda de bollinguer en H1 de periodo 14. Si efectivamente cierra por fuera de la banda bollinguer, se ejecuta T2 y en otro caso T3.

10.3.5 Función ITEND

La función ITEND  es una función que internamente comprueba si una EMA es superior a otra. Los parámetros de la función son los siguientes: TF, vela, periodoEMA1, periodoEMA2.

La sintaxis seria: ITEND(TF,vela,periodoEMA1,periodoEMA2)

A parte del TF y la vela, se le pasa el periodo de la EMA1 y el periodo de la EMA2. Lo normal es pasar el periodo menor como EMA1 y el mayor como EMA2, y esta función devuelve 1 si la EMA1 está por encima de la EMA2, y -1 si la EMA1 está por debajo de la EMA2. Si coinciden, devuelve 0.

10.3.6 Función IAC

Calcula el indicador Bill Williams' Accelerator/Deceletartor, y retorna su valor. La sintáxis es la siguiente: IAC(TF,vela)

Este indicador está disponible a partir de la versión 8.10

 

10.3.7 Función IAD

Calcula el indicador Accumulation/Distribution, y retorna su valor. La sintáxis es la siguiente: IAD(TF,vela)

Este indicador está disponible a partir de la versión 8.10

 

10.3.8 Función IADX

Calcula el indicador  Average Directional Movement Index, y retorna su valor. La sintáxis es la siguiente: IADX(TF,vela,Periodo,Aplicar a,modo,tipo_calculo,nivel).

El parametro "Aplicar a" puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

El parámetro "modo" puede tomar los siguientes valores:

  • 0: MODE_MAIN Base indicator line
  • 1: MODE_PLUSDI DI indicator line
  • 2: MODE_MINUSDI -DI indicator line

El parámetro "tipo_calculo" puede tomar los siguientes valores:

  • 0, se retorna el modo solicitado, no se mira nivel
  • 1, si se quiere ver si el DI esta por endima -DI, siempre y cuando la Base supere el nivel. si no supera nivel devuelve 0, en otro caso 1 si DI superior y -1 si -DI superior
  • 2, si se quiere ver si hubo un cruce hacia arriba (devuelve 1) o hacia abajo (devuelve -1). Se compara la vela indicada con la siguiente, y siempre cuando la linea base supere el nivel 

Este indicador está disponible a partir de la versión 8.10

 

10.3.9 Función IAO

Calcula el indicador Awasome Oscillator, y retorna su valor. La sintáxis es la siguiente: IAO(TF,vela)

Este indicador está disponible a partir de la versión 8.10

 

10.3.10 Función IALLIGATOR

Calcula el indicador Alligator, y retorna su valor. La sintáxis es la siguiente: 

IALLIGATOR(TF,vela,Jaw line averaging period,Jaw line shift,Teeth line averaging period,Teeth line shift,Lips line averaging period,Lips line shift,averaging method,applied price,modo)

El parámetro ma_method puede tomar los siguientes valores:

  • MODE_SMA: 0 Simple averaging
  • MODE_EMA: 1 Exponential averaging
  • MODE_SMMA :2 Smoothed averaging
  • MODE_LWMA :3 Linear-weighted averaging

El applied_price puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

El parámetro mode puede tomar los siguientes valores:

  • 1: MODE_GATORJAW - Gator Jaw (blue) balance line,
  • 2: MODE_GATORTEETH - Gator Teeth (red) balance line,
  • 3: MODE_GATORLIPS - Gator Lips (green) balance line.

Un ejemplo de invocación seria: IALLIGATOR(15,0,13,8,8,5,5,3,0,0,1)

Este indicador está disponible a partir de la versión 8.10

 

10.3.11 Función IATR

Calcula el indicador Average True Range, y retorna su valor. La sintáxis es la siguiente: IATR(TF,vela,Periodo)

Este indicador está disponible a partir de la versión 8.10

 

10.3.12 Función IBEARSPOWER

Calcula el indicador Bears Power, y retorna su valor. La sintáxis es la siguiente: IBEARSPOWER(TF,vela,Periodo,Aplicar a)

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.13 Función IBULLSPOWER

Calcula el indicador BullsPower, y retorna su valor. La sintáxis es la siguiente: IBULLSPOWER(TF,vela,Periodo,Aplicar a)

El parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.14 Función IBWMFI

Calcula el indicador Market Facilitation Index, y retorna su valor. La sintáxis es la siguiente: IBWMFI(TF,vela)

Este indicador está disponible a partir de la versión 8.10

 

10.3.15 Función ICCI

Calcula el indicador Comodity Channel Index, y retorna su valor. La sintáxis es la siguiente: ICCI(TF,vela,Periodo,Aplicar a)

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.16 Función IDEMARKER

Calcula el indicador DeMarker, y retorna su valor. La sintáxis es la siguiente: IDEMARKER(TF,vela,Periodo)

Este indicador está disponible a partir de la versión 8.10

 

10.3.17 Función IENVELOPES

Calcula el indicador Envelopes, y retorna su valor. La sintáxis es la siguiente: IENVELOPES(TF,vela,ma_period,ma_method,ma_shift,applied_price,deviation,mode)

El parámetro ma_method puede tomar los siguientes valores:

  • MODE_SMA: 0 Simple averaging
  • MODE_EMA: 1 Exponential averaging
  • MODE_SMMA :2 Smoothed averaging
  • MODE_LWMA :3 Linear-weighted averaging

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

El parámetro mode puede tener los siguientes valores:

  • 0: MODE_MAIN
  • 1: MODE_UPPER
  • 2: MODE_LOWER

Un ejemplo de invocación seria: IENVELOPES(15,0,14,0,0,0,0.1,1)

Este indicador está disponible a partir de la versión 8.10

 

10.3.18 Función IFORCE

Calcula el indicador Force Index, y retorna su valor. La sintáxis es la siguiente: IFORCE(TF,vela,ma_period,ma_method,applied_price)

El parámetro ma_method puede tomar los siguientes valores:

  • MODE_SMA: 0 Simple averaging
  • MODE_EMA: 1 Exponential averaging
  • MODE_SMMA :2 Smoothed averaging
  • MODE_LWMA :3 Linear-weighted averaging

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.19 Función IFRACTALS

Calcula el indicador Fractals, y retorna su valor. La sintáxis es la siguiente: IFRACTALS(TF,vela,mode)

El parámetro mode puede tener los siguientes valores:

  • 1: MODE_UPPER
  • 2: MODE_LOWER

Este indicador está disponible a partir de la versión 8.10

 

10.3.20 Función IGATOR

Calcula el indicador Gator oscilator, y retorna su valor. La sintáxis es la siguiente: IGATOR(TF,vela,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,mode)

El parámetro ma_method puede tomar los siguientes valores:

  • MODE_SMA: 0 Simple averaging
  • MODE_EMA: 1 Exponential averaging
  • MODE_SMMA :2 Smoothed averaging
  • MODE_LWMA :3 Linear-weighted averaging

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

El parámetro mode puede tener los siguientes valores:

  • 1: MODE_UPPER
  • 2: MODE_LOWER

Este indicador está disponible a partir de la versión 8.10

 

10.3.21 Función ICHIMOKU

Calcula el indicador Ichimoku Kinko Hyo, y retorna su valor. La sintáxis es la siguiente: ICHIMOKU(TF,vela,tenkan_sen,kijun_sen,senkou_span_b,mode)

El parámetro mode puede tener los siguientes valores:

  • 1: MODE_TENKANSEN
  • 2: MODE_KIJUNSEN
  • 3: MODE_SENKOUSPANA
  • 4: MODE_SENKOUSPANB
  • 5: MODE_CHIKOUSPAN

Este indicador está disponible a partir de la versión 8.10

 

10.3.22 Función IMFI

Calcula el indicador Money Flow Index, y retorna su valor. La sintáxis es la siguiente: IMFI(TF,vela,Periodo)

Este indicador está disponible a partir de la versión 8.10

 

10.3.23 Función IMOMENTUM

Calcula el indicador Momentum, y retorna su valor. La sintáxis es la siguiente: IMOMENTUM(TF,vela,Periodo,Aplicar a)

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.24 Función IOBV

Calcula el indicador On Balance Volume, y retorna su valor. La sintáxis es la siguiente: IOBV(TF,vela,Aplicar a)

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.25 Función IOSMA

Calcula el indicador Moving Average of Oscillator, y retorna su valor. La sintáxis es la siguiente: IOSMA(TF,vela,Fast_ema_period,Slow_ema_period,signal_period,applied_price)

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.26 Función IRVI

Calcula el indicador Relative Vigor Index, y retorna su valor. La sintáxis es la siguiente: IRVI(TF,vela,Periodo,Aplicar a)

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

 

10.3.27 Función ISAR

Calcula el indicador Parabolic Stop and Reverse system, y retorna su valor. La sintáxis es la siguiente: ISAR(TF,vela,step,maximum)

Este indicador está disponible a partir de la versión 8.10

 

10.3.28 Función ISTDDEV

Calcula el indicador Standard Deviation, y retorna su valor. La sintáxis es la siguiente: ISTDDEV(TF,vela,ma_period,ma_shift,ma_method,applied_price)

El parámetro ma_method puede tomar los siguientes valores:

  • MODE_SMA: 0 Simple averaging
  • MODE_EMA: 1 Exponential averaging
  • MODE_SMMA :2 Smoothed averaging
  • MODE_LWMA :3 Linear-weighted averaging

El  parámetro Aplicar a puede tomar los siguientes valores:

  • PRICE_CLOSE: 0
  • PRICE_OPEN: 1
  • PRICE_HIGH: 2
  • PRICE_LOW: 3
  • PRICE_MEDIAN: 4
  • PRICE_TYPICAL: 5
  • PRICE_WEIGHTED: 6

Este indicador está disponible a partir de la versión 8.10

10.3.29 Función ISTOCHASTIC

Calcula el indicador Oscilador Estoásctico , y retorna su valor. La sintáxis es la siguiente: ISTOCHASTIC(TF,vela,K,D,ralentizacion, metodo MA,Aplicar a,modo, [valor_inferior,valor_superior, cruce])

El parámetro ma_method puede tomar los siguientes valores:

  • MODE_SMA: 0 Simple averaging
  • MODE_EMA: 1 Exponential averaging
  • MODE_SMMA :2 Smoothed averaging
  • MODE_LWMA :3 Linear-weighted averaging

El  parámetro Aplicar a puede tomar los siguientes valores:

  • LOW/HIGH: 0
  • CLOSE/CLOSE: 1

  El parámetro mode puede tomar los valores:

  • 0 - MODE_MAIN
  • 1 - MODE_SIGNAL
  • 2 - MODE_SPECIAL: En este modo, se hace uso de los parametros valor_inferior, valor_superior y cruce, y devuelve 1 en caso de que el MAIN del estocastico esté entre valor_inferior y valor_superior y cumpla que este cruzado respecto al MODE_SIGNAL según el valor del parametro cruce, que puede tomar los valores 0=INDIFERENTE, 1=CRUZADO AL ALZA y 2=CRUZADO A LA BAJA

10.3.30 Función IWPR

Calcula el indicador Larry Williams' Percent Range, y retorna su valor. La sintáxis es la siguiente: IWPR(TF,vela,periodo)

Este indicador está disponible a partir de la versión 8.10

 

10.3.31 Función IZIGZAG

Calcula el indicador ZigZag, y retorna su valor. La sintáxis es la siguiente: IZIGZAG(TF,posicion,profundidad,desviacion,paso,modo)

Posicion es el ordinal del extremo a consultar (no indica la vela a analizar), profundidad, desviacion y paso son los parametros del zigzag. Si se pasa un modo incorrecto, se devolvera -1

Este indicador está disponible a partir de la versión 9.00

 

10.3.32 Función ITRENDZZ

ITRENDZZ(TF,profundidad,desviacion,paso,nSwings); Profundidad, desviacion y paso son los parametros del zigzag y nSwings el numero de maximos o minimos para considerar tendencia

Ej: TRENDZZ(1,12,5,3,3) --> Devuelve 1 si alcista, -1 si bajista, 0 si neutro

Este indicador está disponible a partir de la versión 9.12

 

10.3.33 Función IECONOMICCAL

IECONOMICCAL((Pais,Impacto,[Sentido],[HusoHorario]): Revisa el calendario economico y devuelve el tiempo que falta para el siguiente evento. Pais puede valer ALL, SYMBOL, o la divisa a revisar (EUR, USD...). Si es SYMBOL, revisa las 2 monedas que componen el símbolo

  • Impacto puede ser: 0: Todos, 1: Low, 2: Medium, 3: High
  • Sentido, por defecto vale 1, y es el tiempo que queda para el siguiente evento. Si vale -1, es el tiempo que ha pasado desde el ultimo evento.
  • HusoHorario, valor 2 por defecto.
  • Ej: IECONOMICCAL(SYMBOL,3,1,2)

Este indicador está disponible a partir de la versión 9.12

 

10.3.34 Función INDICATOR

La función INDICATOR  es una función que invoca a cualquier indicador personalizado que se quiera. Si bien la libertad que ofrece este indicador es enorme, hay que asegurarse muy bien de que parámetros necesita dicho indicador, y cuantos buffer de datos o modos tiene.

Los parámetros de este indicador serian:TF, vela, nombre del indicador, argumentos del indicador, modo.

Muy importante que el indicador esté en la carpeta de indicadores de MT4, y coincida el nombre exactamente, sin incluir la extensión a la hora de utilizar la función INDICATOR.

A tener en cuenta que hay indicadores que no tienen valor en todas las velas, al invocar al indicador en este caso, este devolverá un EMPTY_VALUE, que tiene el valor 2147483647  (0x7FFFFFFF). Este valor no es un capricho de scala, es como funciona MT4, pero es necesario conocerlo, sobre todo aquellos que no hayan programado nunca en MQL4 que desconocerán por completo este hecho.

Como ejemplo, imaginemos que disponemos de un indicador cuyo fichero se llama OsMA.ex4, que admite los parámetros Fast EMA Period, Slow EMA Period y Signal SMA Period, y tiene un solo buffer de datos. Y queremos detectar que cruza al alza a cierre de vela de negativo a positivo, es decir, comparando la vela 1 con la 2 con el valor 0. Si cruza al alza se ejecuta T2 y en otro caso T3

T1=INDICATOR(60,1,OsMA,12,26,9,0)>0 && INDICATOR(60,2,OsMA,12,26,9,0)<=0?T2:T3

10.4: Funciones de sistemas:

Conjunto de funciones de calculo en base a ordenes globales o de sistemas concretos

10.4.1 Función ILOTSBUY

La función ILOTSBUY devuelve los lotes de ordenes BUY que haya en mercado en ese momento.

La sintaxis sería sencillamente dicha palabra clave, ILOTSBUY. En caso de querer obtener los lotes buy de un sistema, se tendria que poner este entre paréntesis: ILOTSBUY(1)

 

10.4.2 Función ILOTSSELL

La función ILOTSSELL devuelve los lotes de ordenes SELL que haya en mercado en ese momento.

La sintaxis sería sencillamente dicha palabra clave, ILOTSSELL, En caso de querer obtener los lotes sell de un sistema, se tendria que poner este entre paréntesis: ILOTSSELL(1)

 

10.4.3 Función ILOTS

La función ILOTS devuelve los lotes de ordenes que haya en mercado en ese momento.

La sintaxis sería sencillamente dicha palabra clave, ILOTS, En caso de querer obtener los lotes de un sistema, se tendria que poner este entre paréntesis: ILOTS(1)

 

10.4.4 Función IPROFITBUY

La función IPROFITBUY devuelve las ganancias actuales de las ordenes BUY que haya en mercado en ese momento.

La sintaxis sería sencillamente dicha palabra clave, IPROFITBUY , sin paréntesis ni nada mas.

 

10.4.5 Función IPROFITSELL

La función IPROFITSELL devuelve las ganancias actuales de las ordenes SELL que haya en mercado en ese momento.

La sintaxis sería sencillamente dicha palabra clave, IPROFITSELL , sin paréntesis ni nada mas.

 

10.4.6 Función IPROFIT

La función IPROFIT devuelve las ganancias actuales de las ordenes que haya en mercado en ese momento.

La sintaxis sería sencillamente dicha palabra clave, IPROFIT , En caso de querer obtener el profit un sistema, se tendria que poner este entre paréntesis: IPROFIT(1)

 

10.4.7 Función ITOTAL

La funcion ITOTAL devuelve el numero de órdenes abiertas que hay en un momento dado. En caso de querer obtener las de un sistema, se tendria que poner este entre paréntesis: ITOTAL (1)

 

10.4.8 Función ITOTALBUYS

La funcion ITOTALBUYS devuelve el numero de órdenes abiertas de tipo BUY que hay en un momento dado. En caso de querer obtener las de un sistema, se tendria que poner este entre paréntesis: ITOTALBUYS (1)

 

10.4.9 Función ITOTALSELLS

La funcion ITOTALSELLS devuelve el numero de órdenes abiertas de tipo SELLque hay en un momento dado. En caso de querer obtener las de un sistema, se tendria que poner este entre paréntesis: ITOTALSELLS(1).

 

10.4.10 Función ISYSTEMRUNNING

La funcion ISYSTEMRUNNING(int) Indica si un sistema esta ejecutando alguna serie, pasandole como argumento el numero de sistema a consultar, empezando por 1. Devuelve 1 en caso de que esté ejecutando alguna serie, o 0 en caso contrario.

 

10.4.11 Función ISYSTEMLOCKED

La funcion ISYSTEMLOCKED(int) Indica si un sistema este bloqueado, pasandole como argumento el numero de sistema a consultar, empezando por 1. Devuelve 1 en caso de que esté bloqueado, o 0 en caso contrario.

 

10.4.12 Función IOPENED

La funcion IOPENED(Sistema): Indica el numero de ordenes creadas por un sistema que hayan estado en mercado.

 

10.4.12 Función ICLOSED

La funcion ICLOSED(Sistema): Indica el numero de ordenes cerradas en el sistema.

 

10.4.13 Función IUSPROFIT

La funcion IUSPROFIT(Sistema, Comienzo): que indica las Us ganadas (o perdidas si es negativo) del sistema indicado en el primer parametro. El segundo, si Comienzo vale 1, se devuelven las Us ganadas desde el comienzo de la serie, si es 0, se devuelve el de la ultima orden. Si las Us van en el sentido del precio, sera un valor positivo, y si va en contra, negativo

 

10.4.14 Función IORDERSINPROFIT

La funcion IORDERSINPROFIT(Sistema): devuelve el numero de ordenes en ganancias. Si no se indica el sistema, devuelve la de todos los sistemas.

 

10.4.15 Función IORDERSINLOSS

La funcion IUSPROFIT(Sistema, Comienzo): devuelve el numero de ordenes en pérdidas. Si no se indica el sistema, devuelve la de todos los sistemas.

 

 

11. Persistencia de Sistemas, Series y Órdenes

Scala tiene la posibilidad de tratar de continuar los sitemas por donde estaban en caso de reiniciar el MT4 o quitar y volver a poner el EA. Esto se hace en función del parámetro "Descartar resultados Historicos". Si es true descartarian los sistemas previos, si es false tratará de seguir por donde estaba. Hay factores por los que no se cargarán bien los sistemas previos, como que no cumpla la condición de la regla que hizo ejecutar la serie actual, porque haya pasado tiempo y el precio se haya movido mucho, se hayan cerrado ordenes a mano, etc. etc.

Si bien esto está pensado para continuar en caso de caida del MT4, si cuando carga un sistema o serie ya no está como debería por lo anteriormente indicado, cargará sistemas con órdenes que ya no están, y aparentemente puede que SCALA no haga lo que debería hacer en caso de empezar desde cero. 

La forma de que SCALA no tenga problemas con datos antiguos, bien puede ser poner el parámetro "Descartar resultados Historicos", bien cambiar de Magic Number, o bien borrar los ficheros del MT4 que, al abrir la carpeta de datos, cuelgan del directorio MQL4/Files

 

12. Analizador de Funciones

La configuración de reglas no es fácil, y en ocasiones Scala puede hacer algo distinto a como se esperaba. Bien puede ser fallos de diseño o por fallos en la configuración de reglas o sistemas. Se ha creado el "Scala Analyzer", que lo que permite analizar hasta 10 funciones que ayudan al menos, a verificar que se han puesto correctamente. Si una función no se puede calcular, siempre dará como resultado el valor 0.

Por poner un ejemplo, se puede indicar que analice la funcion IRSI(15,0,14,0), que lo que hará será poner el valor del RSI en M15 de 14 periodos a vela cerrada sobre la vela 0. Imaginemos que la funcion se pone mal, por ejemplo RSI(15,0,14,0), en vez de poner IRSI se pone RSI, la sintaxis es incorrecta y dará siempre valor 0.

13. Estadísticas de rendimiento económico.

A partir de la versión 9.12, en el directorio ~/files/SCALA se crean dos ficheros donde se guardan las estadisticas diarias y horarias. Los ficheros son SCALA_DAILY_STATISTICS.csv y SCALA_HOURLY_STATISTICS.csv respectivamente.

Los campos son los siguientes, teniendo una entrada cada dia u hora según el fichero:

  • DATE: fecha y hora de la entrada
  • INITIAL_BALANCE: balance inicial
  • INI_EQUITY: equidad inicial    
  • CLOSED_PROFIT: ganancias conseguidas    
  • FINAL_FLOATING_PROFIT: flotante al final del dia u hora    
  • MAX_DAILY_LOSS: Maxima perdida diaria    
  • MAX_DAILY_PROFIT: Máxima ganancia diaria    
  • MAX_FLOATING_LOSS: Máximo flotante de pérdida    
  • MAX_FLOATING_PROFIT: Máximo flotante de ganancia    
  • N_SELLS_OP: Número de ordenes Sell abiertas    
  • N_BUYS_OP: Número de ordenes Buy abiertas    
  • N_LOTS_SELL_OP: Número de lotes Sell abiertos    
  • N_LOTS_BUY_OP: Número de lotes Buy abiertos    
  • N_SELLS_CL: Número de ordenes Sell cerradas    
  • N_BUYS_CL: Número de ordenes Buy cerradas    
  • N_LOTS_SELL_CL: Número de lotes Sell cerrados    
  • N_LOTS_BUY_CL: Número de lotes Buy cerrados

14. Series Estrategia

Aprovechando la potencia de Scala sobre todo en cuanto a la gestión del capital se refiere, se ha creado un nuevo tipo de serie denominado STRAGEGY, donde se irán implementando diversas estragegias de trading completas cada una con su estrategia.

Esto es una novedad incorporada en la versión 8.10, y de que en principio solo se ha incorporado una estrategia en dicha versión. La documentación se irá ajustando según se vayan creando estrategias nuevas. A tener en cuenta que gracias a la gestión de capital de scala, una estrategia que incialmente pueda ser relativamente neutra, puede ser ganadora incrementando gradualmente el lote y reajustando según se vayan alcanzando las ganancias.

La sintaxis de esta serie dependerá de cada estrategia en cuestion, tenienco como nexo común que todas serán del estilo [{STRATEGY=NombreEstrategia;Lista de parametros}]

 

14.1 Estrategia Hedge

Esta estrategia, implementada en la version 8.10 de scala, consiste en definir un rango de precios con un límite superior y un límite inferior. Si el precio rebasa el límite superior o inferior, crea la primera orden. El TP y SL de dicha orden, de las siguientes que se creen, será siempre del ancho del rango definido. Si una orden sale ganadora, se termina la serie. Si sale en pérdidas, se crea una nueva orden de tipo contrario, pero aumentando el lote. De esta forma, las ordenes se crearán o de compra en el límite superior, o de venta en el límite inferior, y en cuanto una orden salga ganadora, la serie en todal saldrá ganadora. 

Esta estrategia, si no se limita el número de rebotes, puede llegar a hacer quebrar la cuenta, ya que el incremento de lote se hace de forma exponencial. Concretamente, el primer incremento de lote se suma al lote inicial el doble de este (por ejemplo, si el lote inicial es 0.01, la segunda orden tendría 0.03 lotes). Y a partir de la segunda, se dobla el lote (por ejemplo, si la segunda orden es de 0.03 lotes, la tercera sería de 0.06, la siguiente de 0.12, y así sucesivamente).

Por tanto, no es una estrategia apta para todos los mercados, refiriendose con esto al símbolo en cuestión con el que operar, como la volatilidad o amplitud de movimientos de dicho símbolo. Scala proporciona multitud de funciones para determinar si es buen momento para usar dicha estrategia, aquí se dará un simple ejemplo.

Los parámetros que admite esta serie son:

  • STRATEGY=HEDGE: Indica la estrategia en cuestión.
  • NS: Nivel superior del rango. Puede tomar valores de mercado o el calculado por algún indicador
  • NI: Nivel inferior del rango. Igualmente, puede tomar valores de mercado o el calculado por algún indicador
  • MAXR: Máximo de rebotes. Por ejemplo, si se definen 3 rebotes, como máximo la serie generaría 4 órdenes. Si la cuarta orden sale negativa, la serie saldrá negativa
  • LOTS: El lote inicial con el que comienza la primera orden (sujeta a la gestión de capital configurada en scala).
  • NSU: Nivel superior del rango medido en Us respecto al precio al crear la serie
  • NIU: Nivel inferior del rango medido en Us respecto al precio al crear la serie
  • BER=5 (Break Even Rebotes). Si se indica 5 por ejemplo, cuando cree la quinta orden tratará de cerrar la serie en BE. Si se quiere aplicar en varios rebotes, habrá que indicarlo separado por comas: BER=5,6,7,8,9,10. Ejemplo: Ej: [{STRATEGY=HEDGE;NSU=1000;NIU=1000;MAXR=8;BER=4,5,6,7;LOTS=0.2}]
  • TV=Tiempo de vida en minutos. Si una vez creada la serie no se ha ejecutado la primera orden antes de los minutos indicados, se descarta la serie.
  • SR (Salto de Rango), que lo que hace es mover el rango poniendo el centro en la orden perdida del numero de orden indicado. SR=3,4,5,6,7,8 significa que cuando termine la orden indicada, separado por comas, se mueve el rango. Se aplica tambien a las sucesivas ordenes. Pone el centro dle rango en el precio de la perdida de la orden anterior.  Ej.: [{STRATEGY=HEDGE;NSU=5000;NIU=5000;MAXR=5;BER=3;SR=4;LOTS=0.2}]
  • ARR=Aumento de Rango Rebote, indica el numero de orden en el que se aumenta el rango. Por ejemplo ARR=3,4,5,6,7,8, en la orden 3,4,5... se aumenta el rango. ARNR=Aumento de Rango Nuevo Rango: Nuevo rango en Us, separado por comas en funcion de la orden. Ej ARNR=1000,2000,3000, el rango se modifica en la primera orden que lo amplia a 1000, la segunda a 2000, y la tercera a 3000. Ej: [{STRATEGY=HEDGE;NSU=400;NIU=400;MAXR=10;BER=3;ARR=5,6,7,8,9;ARNR=5000;LOTS=0.2}]
  • MRU=Mover Rango Us: Se mueve el rango las Us indicadas. MRR=Mover Rango Rebotes. Por ejemplo MRR=3,4,5,6,7,8, al finalizar la orden 3,4...si sale por SL mueve el rango. MRU=50, mueve el rango con Us de donde estaba. Para activarse, el precio tiene que moverse desde el centro del rango anterior a 50 Us arriba o abajo, donde se activará de nuevo con el lotaje que corresponda. Ej: [{STRATEGY=HEDGE;NSU=400;NIU=400;MAXR=10;BER=3;MRR=5,6,7,8,9;MRU=50;LOTS=0.2}].
  • SRNA: En el SR se mueve el centro del rango donde se ha cerrado la orden. Si esta el parametro SRNA (Salto Rango Nueva Activacion ), el centro del rango se movera a un punto en el que el mercado tenga mas movimiento. El valor de SRNA se correspondera con el TimeFrame del grafico al que revisar dicho movimiento, basado en sobrepasar en cierre bandas de bollinger en el TF indicado. Por ejemplo SRNA=5, mira si hay movimiento en el TimeFrame M5. Ej: [{STRATEGY=HEDGE;NSU=400;NIU=400;MAXR=10;BER=3;SR=5,6,7,8,9;SRNA=15;LOTS=0.2}]
  • PT=Parada Temporal, donde se indica la orden perdida en la que parara. PTHR=Para Temporal Hora reanudacion, en formato hh:mm, se indica a la hora en la que volvera a operar. En esa hora, pondra el centro del rango en el Bid actual. Ej: [{STRATEGY=HEDGE;NSU=400;NIU=400;MAXR=10;BER=3;PT=3,5,7;PTHR=14:00;LOTS=0.2}]
  • MULT=Multiplicador. Multiplica los lotes por este valor. Si no esta definico, multiplicará por 2.
  • PTTV=ParadaTemporalTamañoVela, PTNTV=TamañoTemporalNuevoTamañoVela, valores separados por comas, el primero indica las velas donde parar temporalmente, y el segundo el mañano de la vela vela contando la anterior y la vela en curso (valor unico medido en Us). Es necesario añadir tambien el parametro TF
  • AAR=AutoAjustarRango (debe valer 1: AAR=1). Cuando pierde una orden, ajusta el rango con el maximo y minimo hasta el momento.
  • AAL=AutoAjustarLote (debe valer 1: AAL=1). Ajusta el lote para ganar lo que hubiera hecho la primera orden. DEP=Distancia Extremos en Puntos, indica que puntos la distancia donde poner el SL de las ordenes respecto al maximo o minimo del rango. Ej: [{STRATEGY=HEDGE;NSU=400;NIU=400;MAXR=5;AAR=1;DEP=300;AAL=1}]

 

Un ejemplo de configuración:

Sistema1: [{STRATEGY=HEDGE;NS=IHIGHEST(60,14);NI=ILOWEST;MAXR=5;LOTS=0.01}]

Reglas1: T1=INTIME(14:00,14:01)==1?T2:T1?T2=S1;T3=GOTO(1)

En el sistema se indica como nivel superior NS, el valor mayor de las ultimas 14 velas en H1, como nivel inferior el valor menor de las últimas 14 velas en H1, y un máximo de rebotes de 5, asumiendo las pérdidas en el supuesto de que se cree una sexta orden y esta salga negativa.

En las reglas, se lanza la serie al alcanzar las 14:00 horas, es decir, que la hora actual este entre las 14:00 y las 14:01. En caso de que la serie termine antes de las 14:01, se volvería a lanzar de nuevo. A tener en cuenta, que una vez que la serie empieza, hasta que no termina no se vuelven a evaluar nuevas reglas, es decir, si al día siguiente la serie aun continua, no volverá a crearse una nueva serie a las 14:00.

Este ejemplo está pensado para mercados como el Nasdaq.

 

 

 

Descargar Scala v9.12

Descargar Scala Analyzer v9.12

Descargar Scala Manual v9.00

 

Licencia gratuita durante 1 mes para cuentas creadas a partir de este enlace: Roboforex