Está en la página 1de 78

INDICE

Introduccin___________________________________________________________
Acceder a la programacin de sistemas de trading..............................................................................2
La ventana de creacin de sistemas de trading...................................................................................3
Atajos de teclado............................................................................................................................ 5

La programacin de sistemas de trading___________________________________


La programacin en lenguaje ProBuilder............................................................................................. 6
Entradas y salidas del mercado............................................................................................................ 6
Los stops y objetivos............................................................................................................................ 9
Stops de proteccin........................................................................................................................ 9
Set Target Profit (objetivo de beneficios).......................................................................................10
Trailing stops (stops dinmicos).................................................................................................... 10
Uso de los comandos 'Set Target' y 'Set Stop' con bucles condicionales IF..................................11
Mltiples niveles de stop y de objetivos........................................................................................ 11
Detener un sistema de trading con QUIT........................................................................................... 15
Seguimiento de posiciones................................................................................................................. 15
Variables de verificacin del estado de las posiciones..................................................................15
Variables sobre el tamao de la posicin......................................................................................16
TradeIndex.................................................................................................................................... 16
TradePrice.................................................................................................................................... 16
PositionPerf................................................................................................................................... 17
PositionPrice................................................................................................................................. 17
StrategyProfit................................................................................................................................ 17
Definicin de los parmetros de ejecucin de los sistemas de trading...............................................18
Acumulacin de rdenes .............................................................................................................. 18
PreLoadBars................................................................................................................................. 19
FlatBefore and FlatAfter................................................................................................................ 19
No actualizacin en efectivo NoCashUpdate (slo ProBacktest)...............................................20
Llamadas a indicadores...................................................................................................................... 20
Indicadores ProRealTime.............................................................................................................. 20
Indicadores personalizados.......................................................................................................... 20
Consejos de programacin................................................................................................................. 21
Reducir el nmero de llamadas a indicadores ProRealTime........................................................21
Llamadas a indicadores personalizados.......................................................................................21

ProBacktest: La simulacin de sus sistemas de trading_______________________


Gestin de Capital o Money Management.........................................................................................25
Capital inicial................................................................................................................................. 25
Comisiones de operativa y gestin de riesgos..............................................................................25
Optimizacin de variables.................................................................................................................. 28
Definicin del periodo de ejecucin del backtest................................................................................31
Personalizacin de las horas de trading en backtests........................................................................31
Razones por las que puede detenerse un ProBacktest......................................................................32

ProOrder: La ejecucin de sistemas de trading automtico____________________


Prepare un sistema de trading para la ejecucin automtica.............................................................34
Cmo ejecutar sistemas de trading en ProOrder y comprobar sus resultados...................................36
Configuracin de las preferencias de trading y condiciones de ejecucin..........................................40
Configuracin de los sistemas de trading.....................................................................................40
Detencin automtica de sus sistemas de trading........................................................................41
Coexistencia del trading manual y del trading automtico en la plataforma.......................................42
Ejecutar mltiples sistemas de trading en el mismo valor..................................................................43
Restriccin de indicadores................................................................................................................. 44

Anexo A: Muestre los resultados de sus sistemas de trading__________________


Anexo B: Aplicaciones prcticas__________________________________________
Sistema de trading basado en Heikin Ashi....................................................................................51
Sistema de trading basado en el ZigZag.......................................................................................51
Sistema de trading Breakout Range con Stop Dinmico..............................................................52
Sistema de trading basado en el Estocstico Alisado...................................................................53
Swing Trading, ADX y Medias mviles..........................................................................................54
Sistema de trading basado en contador de posiciones.................................................................55
Sistema de trading basado en el TradeIndex Find inside bar....................................................56
Estrategias de money management (gestin de capital)....................................................................57
Stop de proteccin (stop loss) & objectivos..................................................................................57
Stops de inactividad...................................................................................................................... 57
Acumulacin de rdenes Aadir rdenes a una posicin existente mediante un contador de
posicin.............................................................................................................................................. 58
La martingala clsica.................................................................................................................... 59
La gran martingala........................................................................................................................ 60
La Piquemouche........................................................................................................................... 61
La pirmide de Alembert............................................................................................................... 62
La contra de Alembert................................................................................................................... 63

Glosario______________________________________________________________

Introduccin a la programacin de sistemas de trading con ProRealTime v10


Esta versin del manual de programacin se aplicar a las versiones 10 y superiores de ProRealTime.
La herramienta de programacin de sistemas de trading de ProRealTime le permite crear estrategias de
inversin personalizadas, mediante la programacin o a travs de un asistente incorporado
Los sistemas de trading podrn ejecutarse:
Como ProBacktests para probar su eficacia a lo largo de cualquier periodo histrico de un valor.
Como trading automtico gracias al mdulo ProOrder: se lanzarn rdenes en tiempo real desde su
cuenta de trading o de PaperTrading.
La programacin de sistemas de trading se basa en el lenguaje de programacin ProBuilder, con
extensiones aplicables exclusivamente al desarrollo de sistemas de trading (le aconsejamos la lectura previa
del manual ProBuilder).
En este mdulo puede simular aperturas de posiciones, stops y la gestin de riesgos de cada sistema de
trading que desee ejecutar, en funcin de condiciones personalizadas tales que:
Los indicadores incluidos por defecto en la plataforma o los programados por Ud.
Los resultados pasados de su sistema de trading.
Sus ltimas rdenes.
Los resultados de la ejecucin de un sistema de trading se presentan a travs de los siguientes elementos:
Grfico de liquidez (o 'Equity Curve'), que indica las ganancias o prdidas de un sistema en un
instrumento en particular.
Histograma de posiciones (verde si la posicin es compradora, rojo para las posiciones de venta a
descubierto) y de zonas sin transacciones en curso (sin velas).
Informe detallado, que le proporciona estadsticas generales de su sistemas de trading para el valor y
periodo elegidos.
El mdulo ProBacktest le permite adems la optimizacin de las variables de su sistemas de trading para
seleccionar las que le proporcionen los mejores resultados en los periodos e instrumentos analizados.
En trading automtico, las rdenes lanzadas por sus sistemas de trading aparecen en su cuenta
PaperTrading y la cartera se actualiza con las plusvalas realizadas.
Este manual est organizado de la siguiente manera: comenzamos explicando el acceso a las funciones de
edicin de sistemas de trading en la primera seccin, mientras que la segunda parte presenta las
instrucciones ProBuilder necesarias para su programacin. La ltima seccin detalla la simulacin de
sistemas de trading en ProBacktest y los anexos finales del manual describen la presentacin de resultados,
algunos ejemplos de cdigos, as como un glosario del lenguaje ProBuilder.
Para aquellos usuarios poco acostumbrados a programar, aconsejamos visualizar el vdeo titulado
'Programe estrategias sin escribir una sola lnea de cdigo'
El contenido del presente manual tiene como objetivo ensearle a desarrollar y a probar sus propias ideas;
en ningn caso debe interpretarse como un asesoramiento en la inversin.
Le deseamos una agradable lectura y los mejores resultados en sus inversiones.

1 / 73

Introduccin

Introduccin
Acceder a la programacin de sistemas de trading
La ventana de creacin de sistemas de trading es accesible a partir del botn 'Indicador/Sistemas de
trading' que se encuentra en la parte superior derecha de cada grfico de su plataforma ProRealTime.

Tras pulsar ese botn, se abrir por defecto la ventana de gestin en la pestaa 'Indicadores'. Active la
pestaa 'Sistemas de Trading' pulsando sobre la misma con el ratn. Con ello, podr:
Acceder a la lista de sistemas de trading existentes (predefinidos o personalizados)
Crear un nuevo sistema de trading y ejecutarlo en cualquier valor
Modificar, suprimir o duplicar un sistema de trading existente
Importar o exportar sistemas de trading

2 / 73

Introduccin

La ventana de creacin de sistemas de trading


La ventana de creacin de sistemas de trading se compone de 2 zonas principales:
La zona de creacin (asistida o programando) en el rea izquierda de la ventana.
La zona de aplicacin en la parte derecha, que comprende la pestaa ProBacktest para probar
la eficacia del sistema de trading y la pestaa ProOrder para su ejecucin en trading automtico.
Encontrar la configuracin detallada del mdulo ProBacktest en la seccin 3 de este manual.

3 / 73

Introduccin

La zona de creacin le permite:


Programar directamente un sistema de trading en la zona de texto.
Utilizar la funcin de ayuda 'Insertar funcin' y acceder a la biblioteca de las funciones
disponibles. Cada una de estas funciones se acompaa igualmente de un texto de ayuda.

Ejemplo:
En nuestro caso utilizaremos la biblioteca pulsando 'Insertar funcin'.
Dirjase a la categora 'Comandos ProBacktest' y seleccione 'BUY'. A continuacin, pulse el botn
'Aadir': el comando se aadir en la zona de programacin.

Intentemos crear un ProBacktest. Supongamos, por ejemplo, que deseamos comprar 10 valores a
precio de mercado.
Para ello, realizaremos la operacin descrita anteriormente, con el objetivo de recuperar las
instrucciones 'SHARES', 'AT' y 'MARKET' (recuerde separar cada palabra por un espacio).
Se obtiene entonces la instruccin 'BUY 10 SHARES AT MARKET' que ordena la compra de 10
ttulos a precio de mercado. La seccin siguiente presenta todas las instrucciones disponibles para la
programacin de sistemas de trading.
Para ver ms ejemplos, consulte el Anexo B del presente manual.

4 / 73

Introduccin

Atajos de teclado
La ventana de creacin de sistemas de trading tiene varias funciones a las que se puede acceder
mediante atajos de teclado en la versin 10 de ProRealTime:
Seleccionarlo todo (Ctrl + A): Selecciona la integralidad del texto en la ventana de
programacin
Copiar (Ctrl + C): Copia el texto seleccionado
Pegar (Ctrl +X): Pega el texto copiado
Deshacer (Ctrl + Z): Deshace la ltima accin realizada en la ventana de programacin
Rehacer (Ctrl + Y): Rehace la ltima accin realizada en la ventana de programacin
Buscar / Remplazar (Ctrl + F): Busca un texto preciso en la ventana de programacin /
remplaza un texto contenido en la ventana de programacin (esta funcin es sensible a la
diferencia entre minsculas y maysculas)
Comentar / Descomentar (Ctrl + R): Comenta el cdigo seleccionado / Descomenta el cdigo
seleccionado (el cdigo comentado ser introducido por '//' o 'REM' y se colorear en gris. Esto
comentario no ser tomado en cuenta en la ejecucin del cdigo).

En Mac es posible utilizar estos mismos atajos de teclado utilizando la tecla 'Manzana' en lugar de
'Ctrl'. Casi todas estas funciones son accesibles pulsando en el botn derecho de su ratn en la
zona de programacin de la ventana de creacin del sistema de trading.

5 / 73

La programacin de sistemas de trading

La programacin de sistemas de trading


La programacin en lenguaje ProBuilder
Le aconsejamos la lectura previa del manual ProBuilder dedicado a la programacin de indicadores:
este documento representa una extensin de dicho manual.
ProBuilder es el lenguaje de programacin de ProRealTime. Este lenguaje es muy sencillo y
exhaustivo en sus posibles usos. Se basa en los siguientes principios:
Una vela representa la unidad de base y la unidad de tiempo es la misma que la del grfico
subyacente.
Su funcionamiento es iterativo: un programa ProBuilder y todas sus subfunciones se evalan al
cierre de cada vela, desde la ms antigua hasta la ms reciente.
Se lanzan todas las seales de compra/venta una vez finalizados los clculos en la vela actual,
es decir, a la apertura de la vela siguiente.

Entradas y salidas del mercado


Es necesario diferenciar las instrucciones en funcin del sentido de su posicin:
Posiciones de compra (largas):
BUY: instruccin de compra de valores (compra de instrumentos)
SELL: instruccin de venta de valores adquiridos (venta de instrumentos)
La instruccin BUY permite abrir (o reforzar) una posicin compradora en el mercado. Se asocia a la
funcin SELL, utilizada para cerrar (o reducir) una posicin de compra. La instruccin SELL no tiene
efecto si no existe en ese momento ninguna posicin compradora abierta.
Posiciones de venta (cortas):
SELLSHORT: instruccin de venta a descubierto de valores (entrada a corto)
EXITSHORT: instruccin de compra de valores vendidos a descubierto (salida de corto)
El funcionamiento de estas instrucciones es similar al de BUY y SELL. La instruccin EXITSHORT no
tiene efecto si no existe en ese momento ninguna posicin de venta a descubierto abierta.

Actualmente no existe la posibilidad de abrir una posicin de compra y otra de venta simultneamente
en un mismo valor. En la prctica, resulta posible cerrar una posicin larga con una instruccin
SELLSHORT o, recprocamente, cerrar una posicin corta con un comando BUY.
Consejo: compruebe la cantidad mxima de la posicin definida en su gestin de riesgos, ya que la
orden de inversin ser rechazada si la cantidad final de la posicin supera este valor, mantenindose
la posicin original.

Todos estos comandos pueden acompaarse de los elementos que describimos a continuacin:

<Orden> <Cantidad> AT <Modo>


Ejemplo:
BUY 1000 CASH AT MARKET o SELL 1 SHARE AT 1.56 LIMIT

6 / 73

La programacin de sistemas de trading

Cantidad
Existen dos maneras de definir la cantidad que deseemos invertir:
SHARES, que representa una unidad del instrumento: '1 share' representa 1 accin, 1 warrant, 1
contrato para futuros o 1 lote en Forex. Observe que 'SHARES' puede utilizarse indistintamente
para referirse a acciones, contrato, contratos, lote o lotes. En el caso del Forex, la cantidad
adquirida se multiplicar por el tamao de un lote. Si la cantidad no est indicada, los valores que
se toman por defecto son:
1 unidad por una entrada en posicin (Ej: BUY AT MARKET, lanza una orden de '1' a
precio de mercado)
La cantidad total de la posicin para una salida (Ej: SELL AT MARKET venta completa de
la posicin)
CASH, transaccin en unidades monetarias (como o $), nicamente para acciones. La cantidad
de la orden se calcular al cierre de la vela y se redondear por defecto a la unidad inferior. Las
comisiones de operativa no se toman en cuenta en el clculo de la cantidad establecida para
comprar o vender en efectivo.
Ejemplo: BUY 1000 CASH AT MARKET
Es posible utilizar la instruccin ROUNDEDUP para redondear la cantidad a la unidad superior.
Ejemplo: BUY 1000 CASH ROUNDEDUP AT MARKET

Modo
Dispone de tres tipos de ejecucin de rdenes:
AT MARKET: la orden se enviar a precio de mercado a la apertura de la vela siguiente
Ejemplo: BUY 1 SHARE AT MARKET
AT <precio> LIMIT: se enviar una orden lmite al precio indicado
AT <precio> STOP: se enviar una orden stop al precio indicado
Ejemplo: BUY 1 SHARE AT 10.5 LIMIT
Las rdenes lmites y stops son vlidas durante una nica vela, a partir de la apertura de la vela
siguiente. Quedan anuladas si no se ejecutan.
Son rdenes con umbral de ejecucin. Se oponen a los stops de proteccin y lmites de beneficios
('SET STOP', 'SET TARGET': ver seccin siguiente) asociados a una posicin abierta y vlidos hasta
el cierre de dicha posicin.
Algunas rdenes se comportarn como rdenes a mercado, en funcin de las siguientes
condiciones:
Una orden LMITE de compra BUY fijada por encima del precio del mercado se gestionar como
una orden a precio de mercado.
Una orden STOP de compra BUY fijada por debajo del precio del mercado se gestionar como
una orden a precio de mercado.
Una orden LMITE de venta a descubierto SELLSHORT fijada por debajo del precio del mercado
se gestionar como una orden a precio de mercado.
Una orden STOP de venta a descubierto SELLSHORT fijada por encima del precio del mercado,
se gestionar como una orden a precio de mercado.

7 / 73

La programacin de sistemas de trading

Ejemplo:
Cuando el RSI se halle en zona de sobreventa (RSI < 30) y el precio est por debajo de la banda de
Bollinger inferior, se generar una orden de compra a precio de mercado.
Cuando el RSI se halle en zona de sobrecompra (RSI > 70) y el precio est por debajo de la banda de
Bollinger inferior, se generar una orden de venta.
MyRSI = RSI[14](Close)
MyBollingerDown = BollingerDown[25](Close)
MyBollingerUp = BollingerUp[25](Close)
IF MyRSI < 30 AND Close < MyBollingerDown THEN
BUY 1 SHARE AT MARKET
ENDIF
IF MyRSI > 70 AND Close > MyBollingerUp THEN
SELL AT MARKET
ENDIF

Puede definir la duracin de la validez de las rdenes lmite y stop.

El siguiente ejemplo le muestra cmo crear una orden lmite con un nmero especfico de velas de
validez mediante el uso de variables. El cdigo sita una orden lmite de compra al precio de cierre de
la vela en la que ha concurrido el cruce de medias mviles. Este lmite es vlido durante 10 velas, tras
la vela en la que se produjo el cruce. Si no es ejecutado en algn momento durante la formacin de
esas 10 velas, se anula.

Ejemplo:
// Definicin de la duracin de validez de la orden
ONCE NbBarLimit=10
MM20=Average[20](close)
MM50=Average[50](close)
// Si la MM20 cruza al alza la MM50, establecemos 2 variables, "MyLimitBuy" y "MyIndex", que contienen el precio
de cierre en ese momento y el ndice de la vela en la que se produce el cruce.
IF MM20 CROSSES OVER MM50 THEN
MyLimitBuy = close
MyIndex = Barindex
ENDIF
IF BarIndex >= MyIndex + NbBarLimit THEN
MyLimitBuy = 0
ENDIF

8 / 73

La programacin de sistemas de trading

// Lanzar una orden al precio de MyLimitBuy vlido mientras la variable sea superior a 0 y la posicin no sea
compradora.
// Recordar: MyLimitBuy ser superior a 0 durante el transcurso de las 10 velas tras la vela en la que se produjo el
cruce.
IF MyLimitBuy > 0 AND NOT LongOnMarket THEN
BUY 1 SHARES AT MyLimitBuy LIMIT
ENDIF

En el caso de que la orden no fuera ejecutada, ser posible remplazar la orden lmite de compra
expirada por una orden de compra a precio de mercado. Esto podra llevarse a cabo aadiendo el
siguiente cdigo al cdigo anterior:
IF MyIndex + NbBarLimit AND MyLimitBuy > 0 AND NOT LongOnMarket THEN
BUY 1 SHARES AT MARKET
ENDIF

Los stops y objetivos


ProBuilder le permite igualmente definir objetivos y stops de proteccin. La sintaxis que debemos
utilizar es la siguiente:

SET STOP <tipo*> <valor> o SET TARGET <Modo> <valor>


Ejemplo:
SET STOP %LOSS 20 // Definir un stop loss al 2%

Describimos cada instruccin en los parmetros siguientes.

Observe la diferencia entre las rdenes STOP:


AT <precio> STOP se utiliza para ABRIR una posicin. Esta orden es vlida durante una vela
por defecto.
SET STOP LOSS <precio> sirve para establecer un stop de proteccin cuyo objetivo es
CERRAR la posicin existente. Esta orden es vlida hasta el cierre definitivo de la posicin.

Stops de proteccin
Los stops de proteccin (stops loss) permiten limitar las prdidas de una posicin. Pueden
definirse de forma relativa o absoluta:
SET STOP LOSS x: establece un stop loss para cerrar la posicin a x unidades del precio de
entrada.
SET STOP pLOSS x : establece un stop loss para cerrar la posicin a x puntos del precio de
entrada.
SET STOP %LOSS x: establece un stop loss para cerrar la posicin si la prdida alcanza x%.
SET STOP $LOSS x: establece un stop loss para cerrar la posicin si la prdida alcanza x, $ (en
la divisa del instrumento), sin incluir las comisiones de operativa.

9 / 73

La programacin de sistemas de trading

En ambos casos, la direccin y la cantidad de la orden stop se adaptan automticamente a la


posicin en curso. El stop loss se asocia siempre a una posicin: si no hay posiciones abiertas, el
stop loss se mantendr inactivo.
Para desactivar un stop loss, es necesario utilizar esta instruccin
SET STOP LOSS 0, SET STOP pLOSS 0, SET STOP %LOSS 0, SET STOP $LOSS 0

Set Target Profit (objetivo de beneficios)


Este tipo de instruccin permite liquidar una posicin cuando las ganancias alcanzan una cantidad
determinada.
SET TARGET PROFIT x: establece un objetivo de beneficios para cerrar la posicin a x unidades
desde el precio de entrada de la misma.
SET TARGET pPROFIT x : establece un objetivo de beneficios para cerrar la posicin a x puntos
desde el precio de entrada de la misma.
SET TARGET %PROFIT x: establece un objetivo para cerrar la posicin cuando el beneficio alcance x%.
SET TARGET $PROFIT x: establece un objetivo cuando la ganancia alcance x, $ (en la divisa del
instrumento), sin incluir las comisiones de operativa.
Igualmente, la direccin y la cantidad de la orden stop se adaptan automticamente a la posicin
en curso. Un stop loss se desactiva al cierre de la posicin y no se reactiva a la apertura de la
posicin siguiente.
Para desactivar un objetivo de beneficios (profit target) en el cdigo, podemos utilizar las
siguientes instrucciones:
SET TARGET PROFIT 0, SET TARGET pPROFIT 0, SET TARGET %PROFIT 0, SET TARGET $PROFIT 0

Trailing stops (stops dinmicos)


Un stop dinmico (trailing stop) es una orden stop cuyo precio de ejecucin vara en funcin de la
variacin del precio. Para las posiciones compradoras, cuando el precio gana valor, el nivel del stop
aumenta, pero si el precio baja, el nivel del stop dinmico se mantiene sin cambios. Para las posiciones
vendedoras, se produce el comportamiento inverso: cuando el precio baja, el nivel del stop dinmico
tambin baja, pero si el precio sube, el precio del stop dinmimo se mantiene sin cambios.
Siguiendo el mismo principio que los stops de proteccin, los stops dinmicos pueden definirse de
forma relativa o absoluta:
SET STOP TRAILING y: establece un stop dinmico a y unidades del precio de entrada de la
posicin.
SET STOP pTRAILING y : establece un stop dinmico a y puntos del precio de entrada de la posicin.
SET STOP %TRAILING y: establece un stop dinmico a y% del precio de entrada, sin incluir las
comisiones de operativa.
SET STOP $TRAILING y: establece un stop dinmico a y ,$ del precio de entrada (en la divisa
del instrumento), sin incluir las comisiones de operativa.
La direccin y la cantidad de la orden se adaptan automticamente a la posicin en curso. El stop
dinmico se desactiva al cierre de la posicin y no se reactiva a la apertura de la posicin siguiente.
Si la cantidad de la posicin cambia (reforzamos la posicin, por ejemplo) el nivel del stop se reinicia.
Para desactivar un stop dinmico en el cdigo (trainlling stop), podemos utilizar las siguientes
instrucciones:
SET STOP TRAILING 0, SET STOP pTRAILING 0, SET STOP %TRAILING 0, SET STOP $TRAILING 0

10 / 73

La programacin de sistemas de trading

Ejemplo:
Abrimos una posicin en el DAX a 6000 puntos y establecemos un stop dinmico a 50 puntos:
SET STOP pTRAILING 50

El stop se sita inicialmente en 5950 puntos. Si el precio sube hasta 6010 y a continuacin baja
hasta 5980, el stop subir 10 puntos, hasta 5960 y se mantendr estable hasta que el nivel de
precio sobrepase los 6010 puntos. Finalmente, se ejecutar si la cotizacin alcanza los 5960
puntos.

Uso de los comandos 'Set Target' y 'Set Stop' con bucles condicionales IF
Es posible modificar el tipo de objetivo o de stop de su cdigo mediante bucles condicionales.
Ejemplo:
REM Establecer un stop loss a 10% si las ganancias de la transaccin anterior alcanzan al menos el 10%. En
caso contrario, establecer un stop loss a 5%
IF PositionPerf(1) > 0.1 THEN
SET STOP %LOSS 10
Else
SET STOP %LOSS 5
ENDIF

Mltiples niveles de stop y de objetivos


Slo pueden estar activos al mismo tiempo un solo comando 'Set Stop' y un 'Set Target'. Si hubiera
varios comandos 'Set Stop' o 'Set Target' sucesivamente, el ltimo comando reemplazara al anterior.
Ejemplo:
SET STOP %LOSS 10 // Fijar un stop loss a 10%
SET TARGET PROFIT 50 // Fijar un objetivo de beneficios de 50 unidades
SET TARGET %PROFIT 5 // Eliminar el objetivo anterior de 50 unidades y reemplazarlo por un objetivo de
beneficios del 5%
SET STOP %TRAILING 2 // Eliminar el stop loss a 10% anterior y establecer un stop dinmico a 2% en su lugar

Es posible combinar stops fijos, dinmicos o stops loss y dinmicos en una misma instruccin, tal y
como describimos a continuacin:

SET STOP

<Modo> <valor>

<TrailingType> <valor>

fijo

dinmico

Modo: Loss, pLOSS,%LOSS, $LOSS


TrailingType: TRAILING, pTRAILING,%TRAILING, $TRAILING
Esta instruccin se presentar de la siguiente manera:
SET STOP [LOSS/pLOSS/$LOSS/%LOSS]
%TRAILING] <valor>

<valor>

[TRAILING/pTRAILING/$TRAILING/

11 / 73

La programacin de sistemas de trading

Ejemplos de uso:

SET STOP LOSS x TRAILING y: establece un stop loss a x unidades del precio de entrada de la
posicin, que se convierte en un stop dinmico a y unidades si el nivel del stop dinmico se
acerca ms al precio actual que al nivel del stop loss (esto ocurre cuando el precio actual alcanza
el precio de entrada de la posicin + y x).
SET STOP LOSS x pTRAILING y : establece un stop loss a x unidades del precio de entrada de
la posicin, que se convierte en un stop dinmico a y puntos si el nivel del stop dinmico se
acerca ms al precio actual que al nivel del stop loss (esto ocurre cuando el precio actual alcanza
el precio de entrada de la posicin + y puntos x unidades).
SET STOP LOSS x $TRAILING y: establece un stop loss a x unidades del precio de entrada de la
posicin, que se convierte en un stop dinmico a y $ o (divisa del instrumento) si el nivel del stop
dinmico se acerca ms al precio actual que al nivel del stop loss.
SET STOP LOSS x %TRAILING y: establece un stop loss a x unidades del precio de entrada de
la posicin, que se convierte en un stop dinmico a y% si el nivel del stop dinmico se acerca ms
al precio actual que al nivel del stop loss.

SET STOP pLOSS x TRAILING y: establece un stop loss a x puntos del precio de entrada de la
posicin, que se convierte en un stop dinmico a y unidades si el nivel del stop dinmico se
acerca ms al precio actual que al nivel del stop loss (esto ocurre cuando el precio actual alcanza
el precio de entrada de la posicin + y unidades x puntos).
SET STOP pLOSS x pTRAILING y: establece un stop loss a x puntos del precio de entrada de la
posicin, que se convierte en un stop dinmico a y puntos si el nivel del stop dinmico se acerca
ms al precio actual que al nivel del stop loss (esto ocurre cuando el precio actual alcanza el
precio de entrada de la posicin + y puntos x puntos).
SET STOP pLOSS x $TRAILING y: establece un stop loss a x puntos del precio de entrada de la
posicin, que se convierte en un stop dinmico a y $ o (divisa del instrumento) si el nivel del stop
dinmico se acerca ms al precio actual que al nivel del stop loss.
SET STOP pLOSS x %TRAILING y: establece un stop loss a x puntos del precio de entrada de la
posicin, que se convierte en un stop dinmico a y% si el nivel del stop dinmico se acerca ms al
precio actual que al nivel del stop loss.

SET STOP $LOSS x TRAILING y: establece un stop loss a x $ o (divisa del instrumento), que se
convierte en un stop dinmico a y unidades si el nivel del stop dinmico se acerca ms al precio
actual que al nivel del stop loss.
SET STOP $LOSS x pTRAILING y: establece un stop loss a x $ o (divisa del instrumento), que
se convierte en un stop dinmico a y puntos si el nivel del stop dinmico se acerca ms al precio
actual que al nivel del stop loss.
SET STOP $LOSS x $TRAILING y: establece un stop loss a x $ o (divisa del instrumento), que
se convierte en un stop dinmico a y $ o (divisa del instrumento) si el nivel del stop dinmico se
acerca ms al precio actual que al nivel del stop loss.
SET STOP $LOSS x %TRAILING y: establece un stop loss a x $ o (divisa del instrumento), que
se convierte en un stop dinmico a y% si el nivel del stop dinmico se acerca ms al precio actual
que al nivel del stop loss.

12 / 73

La programacin de sistemas de trading

SET STOP %LOSS x TRAILING y: establece un stop loss a x%, que se convierte en un stop
dinmico a y unidades si el nivel del stop dinmico se acerca ms al precio actual que al nivel del
stop loss.
SET STOP %LOSS x pTRAILING y : establece un stop loss a x%, que se convierte en un stop
dinmico a y puntos si el nivel del stop dinmico se acerca ms al precio actual que al nivel del
stop loss.
SET STOP %LOSS x $TRAILING y: establece un stop loss a x%, que se convierte en un stop
dinmico a y $ o (divisa del instrumento) si el nivel del stop dinmico se acerca ms al precio
actual que al nivel del stop loss.
SET STOP %LOSS x %TRAILING y: establece un stop loss a x%, que se convierte en un stop
dinmico a x% si el nivel del stop dinmico se acerca ms al precio actual que al nivel del stop
loss.

13 / 73

La programacin de sistemas de trading

Ejemplo:
SET STOP LOSS x TRAILING y:
Se establece un stop a x unidades con respecto al nivel de entrada de la posicin, que se
convierte en un stop dinmico de y unidades si el nivel del stop dinmico se acerca ms al precio
actual que al nivel del stop loss.
Por ejemplo, si abrimos una posicin en el futuro del DAX a 6500 puntos, el siguiente cdigo
establecer un stop dinmico a 20 puntos del nivel de entrada de la posicin, que se convertir en
un stop dinmico de 50 puntos de diferencia si el precio supera los 6530 puntos.
SET STOP LOSS 20 TRAILING 50

Las siguientes figuras ilustran el ejemplo 2. El stop inicial se sita a 20 unidades por debajo del
precio de entrada de la posicin (6480).

Slo si el nivel del precio alcanzara 6530 (= 6500 + (50-20) ), el stop se convertir en un stop
dinmico a 50 puntos de diferencia.

Si el nivel de precio aumenta (aqu hasta 6535), el stop dinmico aumenta igualmente (en este
caso alcanza los 6485 puntos).

14 / 73

La programacin de sistemas de trading

Detener un sistema de trading con QUIT


La instruccin 'Quit' le permite detener un sistema de trading. En este caso, el sistema se detendr
despus de la vela actual, provocando la anulacin de las rdenes pendientes y el cierre de las
posiciones abiertas. Esto le permite detener un sistema de trading en caso de que haya grandes
prdidas o a partir de una fecha precisa.

Ejemplo:
If date > 20130101 THEN // Detener la estrategia despus del 1 de Enero de 2013
QUIT
ENDIF

Seguimiento de posiciones
Variables de verificacin del estado de las posiciones
Puede utilizar 3 variables para comprobar el estado de las posiciones de sus sistemas de trading:
ONMARKET, que es igual a 1 si hay posiciones abiertas, 0 en el caso contrario.
LONGONMARKET, que es igual a 1 si hay posiciones largas abiertas, 0 en el caso contrario.
SHORTONMARKET, que es igual a 1 si hay posiciones cortas abiertas, 0 en el caso contrario.

Estas variables pueden utilizarse con corchetes. Por ejemplo, ONMARKET[1] tendra un valor de 1
si hubiera posiciones abiertas al cierre de la vela anterior, 0 en el caso contrario.

Estas variables suelen incluirse en las secuencias condicionales IF previas a la apertura de una
posicin:

Ejemplo:
REM Definimos el MACD
Indicator1 = MACD[12,26,9](Close)
REM Observamos los cambios de signo del Histograma del MACD
c1 = (Indicator1 Crosses Over 0)
REM Comprar: si no tenemos posiciones de compra abiertas y si MACD >0, compramos 3 lotes
IF NOT LONGONMARKET AND c1 THEN
BUY 1 SHARE AT MARKET
ENDIF

15 / 73

La programacin de sistemas de trading

Variables sobre el tamao de la posicin


Estas 3 variables permiten conocer la cantidad de una posicin abierta:
COUNTOFPOSITION: tamao de la posicin (en lotes, ttulos, o contratos). Positiva si la posicin
es compradora (larga), negativa si la posicin es vendedora (corta).
COUNTOFLONGSHARES: tamao de la posicin larga (en lotes, ttulos, o contratos) si existe una
posicin compradora, 0 en el caso contrario.
COUNTOFSHORTSHARES: tamao de la posicin vendedora (en lotes, ttulos, o contratos). Tendr
un valor positivo si existe una posicin vendedora abierta. En caso contrario, el valor ser 0.
Como en todas las variables que comprueban el estado de las posiciones, estos comandos se
incluyen generalmente en secuencias condicionales IF, previamente a la apertura de la posicin.
Atencin: compruebe la correcta utilizacin de las variables de estado. El cdigo es evaluado
al final de cada vela y las rdenes se lanzan en la apertura de vela siguiente.
Por ejemplo, en el cdigo siguiente, la variable 'long' no ser igual a 1 al cierre de la primera vela, sino al
cierre de la segunda vela, ya que la primera orden de compra se lanza en la apertura de la segunda vela.
BUY 1 SHARE AT MARKET
IF NOT LONGONMARKET THEN
long=1
ENDIF

TradeIndex
El comando TRADEINDEX(n) permite acceder a la vela de la ensima transaccin anterior:

TRADEINDEX(ensima orden anterior)


Nota: es posible utilizar TradeIndex sin asociarlo a un nmero de vela definido entre parntesis.
En este caso, el programa considerar la barra de la ltima orden lanzada:
TradeIndex=TradeIndex(1).
Aconsejamos utilizar TradeIndex conjuntamente con Barindex.
Ejemplo:
REM: Cerrar si hay una posicin abierta desde al menos 3 velas:
IF LONGONMARKET AND (BarIndex - TradeIndex) >= 3 THEN
SELL AT MARKET
ENDIF

TradePrice
El comando TRADEPRICE(n) permite encontrar el precio de ejecucin de la transaccin anterior.
Su sntesis es la siguiente:

TRADEPRICE(ensima orden anterior)


Podemos especificar entre parntesis la orden a la que hacemos referencia. Si no precisamos este
dato tras 'TradePrice', se tomar como referencia el precio de compra de la ltima orden:
TradePrice=TradePrice(1)
Ejemplo:
REM: Cerrar posicin larga si el cierre es superior al precio de ejecucin de la ltima transaccin, aumentado
de un 2%
IF LONGONMARKET AND CLOSE > 1.02*TRADEPRICE THEN
SELL AT MARKET
ENDIF

16 / 73

La programacin de sistemas de trading

PositionPerf
Este comando nos facilita:
El rendimiento en % de la ensima ltima posicin cerrada, si n > 0 (comisiones de operativa
no incluidas)
El rendimiento en % de la posicin en curso si n=0 (comisiones de operativa no incluidas)
Su sntesis es la siguiente :

POSITIONPERF(ensima orden precedente)


Si n no est definida, suponemos que n=0: PositionPerf=PositionPerf(0)
Ejemplo:
REM Comprar si la transaccin precedente registr al menos un 20% de ganancias
IF NOTONMARKET AND PositionPerf(1) > 0.2 THEN
BUY 1000 CASH AT MARKET
ENDIF

PositionPrice
El comando PositionPrice permite conocer el precio medio de compra de la posicin actual.

POSITIONPRICE
El precio medio (o precio de coste) de una posicin se define como la suma de los precios de
entrada ponderados por la cantidad de cada orden. nicamente los refuerzos influyen en el precio
de coste de la posicin.
Esta instruccin puede utilizarse con corchetes: POSITIONPRICE[1] devuelve el valor de
PositionPrice al cierre de la vela precedente.
Ejemplo:
Compramos una accin a 5, y a continuacin reforzamos la posicin comprando una accin a
10, y despus otra a 15.
El precio de coste de la posicin es de (5+10+15) / 3 = 10
Si decidimos entonces reducir nuestra posicin vendiendo una accin a 20, el precio de coste de
la posicin se mantendr sin cambios.
StrategyProfit
Esta instruccin devuelve las ganancias o prdidas (absolutas, en la divisa del instrumento y sin
incluir las comisiones de operativa) realizadas desde el inicio del sistema. Puede asociarse a la
instruccin QUIT para limitar las prdidas de un sistema de trading.

STRATEGYPROFIT
Esta instruccin puede utilizarse con corchetes: StrategyProfit[1] proporciona el beneficio al cierre
de la vela anterior.
Ejemplo:
IF STRATEGYPROFIT < -500 THEN
QUIT
ENDIF

Nota: recuerde que los sistemas de trading funcionan al cierre de las velas, es decir, son
evaluados al cierre de cada una. En este ejemplo las prdidas pueden ser superiores a 500 si se
produjera un gap en el transcurso de una vela. Le recomendamos utilizar un STOP LOSS para
protegerse de las prdidas de la posicin y este bloque de cdigo para detener el sistema de
trading.

17 / 73

La programacin de sistemas de trading

Definicin de los parmetros de ejecucin de los sistemas de trading


Puede definir parmetros adicionales con ayuda de la instruccin DEFPARAM.
Acumulacin de rdenes
La variable 'CumulateOrders' le permite autorizar o impedir la acumulacin de rdenes para entrar
en el mercado o para aadir a una posicin. Este parmetro est configurado como 'True'
(verdadero) por defecto en cdigos creados programando, lo que significa que un sistema de
trading puede aadir rdenes a una posicin existente en cada vela en la que se cumplen las
condiciones de la entrada de la posicin. En este caso, tambin es posible tener activas varias
rdenes lmite o stop listas para lanzarse al mercado al mismo tiempo.
Para evitar que un sistema incremente el tamao de una posicin ya abierta, es necesario
establecer la siguiente instruccin al principio del cdigo
DEFPARAM CumulateOrders = False

La instrucciones DefParam mantienen su validez a lo largo de todo el sistema de trading. No ser


posible modificar la configuracin del sistema de trading para la acumulacin o no de rdenes
durante su ejecucin.
Ejemplos:
// Este cdigo comprar una accin en cada vela, hasta un mximo de 3
DEFPARAM CumulateOrders = True
If CountOfPosition < 3 then
Buy 1 shares at market
Endif
// Este cdigo comprar una accin a un precio de 2 y una accin ms a un precio de 3
DEFPARAM CumulateOrders = True
If CountOfPosition < 2 then
Buy 1 shares at 2 Limit
Buy 1 shares at 3 Limit
Endif
// Este cdigo comprar 5 acciones de una sola vez
DEFPARAM CumulateOrders = False
Buy 5 shares at market

Es posible programar varias rdenes en la misma direccin incluso cuando el parmetro


'CumulateOrders' est configurado como falso.
Ejemplo:
// Este cdigo comprar 5 acciones. Se vendern hasta 3 acciones si el precio cruza la media mvil de 40 a la
baja. Se liquidarn todas las acciones si la prdida alcanza un 10%.
DEFPARAM CumulateOrders = False
Buy 5 shares at market
If price CROSSES UNDER Average[40] THEN
SELL 3 SHARES AT MARKET
Set stop %Trailing 10
Endif

Nota sobre los niveles de stop o de objetivos mientras CumulateOrders est activo: si utiliza
las instrucciones para establecer un stop loss, un stop dinmico o una orden de objetivos con la
acumulacin de rdenes activada, el nivel se calcula en base al precio medio de entrada de sus
posiciones y se vuelve a calcular cada vez que se modifique la cantidad de la posicin.

18 / 73

La programacin de sistemas de trading

Ejemplo:
Si compra 1 accin a 10$ y establece un stop loss a 10% y un objetivo a 150%, los niveles iniciales
seran: stop a 9$ y objetivo a 25$. Si compra una segunda accin a 20$, el precio medio de
entrada sera de 15$ y como resultado los nuevos niveles seran: stop a 13.50$ y objetivo a 37.50$
(para la posicin entera).
Nota sobre los cdigos creados mediante el asistente de programacin: CumulateOrders
est configurado como falso (false) por defecto en los sistemas de trading creados mediante el
asistente de programacin (la instruccin 'DefParam CumulateOrders = False' estar presente al
principio de estos cdigos).
PreLoadBars
La instruccin 'DefParam Preloadbars' le permite configurar la mxima cantidad de velas que
puedan cargarse con antelacin al inicio del sistema de trading, para el clculo de los indicadores
utilizados en dicho sistema antes de que comience a ejecutarse (indicadores personales o
predefinidos). Este parmetro es igual a 200 por defecto. No puede ser inferior a 0 o superior a
5000. Si quiere desactivar esta descarga de datos, introduzca PreLoadBars = 0.
Seleccionamos el mximo valor porque la cantidad de velas que pueden cargarse con antelacin
depende de la cantidad de datos disponibles para un instrumento o vista temporal determinados.
Ejemplo:
DEFPARAM PreLoadBars = 300

a = (close + open) / 2
If price CROSSES OVER Average[250](a) THEN
BUY 1 SHARE AT MARKET

Si parametramos PreLoadBars en 300, significar que una media mvil de 250 periodos empezar
a dibujarse desde la barra siguiente al inicio del sistema de trading. No sera el caso si slo se
hubieran cargado de antemano 200 velas.
Tenga en cuenta que 300 ser el valor mximo: si existen menos de 300 disponibles con
antelacin al inicio del sistema, slo se cargarn las velas disponibles.
En el caso de el que se cargaran 300 velas, el BarIndex de la primera vela tras el comienzo del
sistema de trading ser igual a 300. Por otro lado, si se cargaran 0 velas, el BarIndex de la primera
vela tras el inicio del sistema ser 0.
FlatBefore and FlatAfter
DEFPARAM FlatBefore = HHMMSS
DEFPARAM FlatAfter = HHMMSS

HHMMSS es una frmula en la que HH indica la hora, MM indica los minutos y SS indica los
segundos.
Estas instrucciones le permiten anular las rdenes pendientes, cerrar todas las posiciones y evitar
el lanzamiento de nuevas rdenes con anterioridad a un momento preciso del da en el caso de
FlatBefore o despus de un momento preciso del da en el caso de FlatAfter.
El parmetro FlatBefore debe expresar siempre un momento posterior a la apertura del mercado
(personalizada o no) y FlatAfter debe indicar siempre un momento anterior al cierre del mercado
(peronalizado o no); de otro modo estas instrucciones no tendrn ningn efecto. Si el momento
parametrado no es un mltiplo de de la vista temporal en la que se ejecuta el sistema, (esto ocurre
en la mitad de una vela) la instruccin DEFPARAM FlatAfter surtir efecto al final de dicha vela y la
instruccin DEFPARAM FlatBefore ser vlida hasta el cierre de la vela anterior.

19 / 73

La programacin de sistemas de trading

La rdenes se restringirn durante este periodo, lo que significa que no se lanzar ninguna orden y
que tales rdenes tampoco sern lanzadas en la apertura del periodo siguiente, cuando el sistema
de trading est autorizado a lanzarla. Esto implica que las variables de tipo "OnMarket" se
mantendrn siempre inactivas ('false') durante esos momentos.
Example :

DEFPARAM FlatBefore = 093000 // Anular cualquier orden pendiente, cerrar todas las posiciones y evitar
que el sistema de trading pueda lanzar nuevas rdenes antes de las 9:30 del huso horario del mercado.
DEFPARAM FlatAfter = 160000 // Anular cualquier orden pendiente, cerrar todas las posiciones y evitar que el
sistema de trading pueda lanzar nuevas rdenes despus de las 16:00:00 del huso horario del mercado.

No actualizacin en efectivo NoCashUpdate (slo ProBacktest)


DEFPARAM NoCashUpdate = False

Si esta opcin est activada, las unidades en efectivo disponibles no se actualizarn con las
ganancias, las prdidas y las comisiones de operativa.
Por defecto, NoCashUpdate = False.
Ejemplo:
Capital inicial 10000, con NoCashUpdate = True. La inversin mxima quedar limitada a 10000
sin tomar en cuenta las ganancias realizadas a lo largo de la ejecucin del ProBacktest.
Nota:
Los parmetros definidos con ayuda de la instruccin DEFPARAM deben definirse al inicio del
cdigo (tras los comentarios).

Llamadas a indicadores
Indicadores ProRealTime
Todas las funciones disponibles para la programacin de indicadores son accesibles tambin para
la programacin de sistemas de trading (cf. ver glosario del presente manual para acceder a la
lista completa).
Le remitimos al manual ProBuilder para conocer estas funciones al detalle.
La cantidad de datos histricos necesarios para el clculo de un indicador depende de la
naturaleza de dicho indicador. Por ejemplo, para la funcin media exponencial sobre N periodos
(ExponentialAverage[N]), consideramos generalmente que son necesarias 10*N para obtener un
resultado preciso. Podr realizarse una aproximacin en funcin de la cantidad de histrico
disponible para el valor.
Si la fecha de inicio del ProBacktest es prxima a la primera fecha del grfico, el servidor provee una
cantidad adicional de histrico para que los indicadores puedan proporcionar resultados desde la
primera vela.
Indicadores personalizados
Al igual que en la programacin de indicadores, es posible llamar a funciones personalizadas con
la ayuda de la instruccin CALL en un sistema de trading.
Ejemplo:
a,b = CALL ''HistoMACD[5,6]'' // a y b son los parmetros de salida de la funcin. 5 y 6 son los parmetros de
entrada

Le recomendamos leer atentamente el prrafo 7 para asegurarse de que utiliza correctamente la


instruccin CALL.

20 / 73

La programacin de sistemas de trading

Consejos de programacin
El tiempo de clculo de un sistema de trading depende de la complejidad de los indicadores utilizados
y de la manera utilizada para llamarlos. El siguiente prrafo le ofrece algunos sencillos consejos para
optimizar el funcionamiento de sus cdigos.
Reducir el nmero de llamadas a indicadores ProRealTime
Si desea utilizar el mismo indicador varias veces en clculos distintos, no haga uso de la funcin
CALL y procure en su lugar almacenarlo en una variable intermedia.
Cdigo no ptimo

Cdigo ptimo

IF NOT LONGONMARKET AND close > Average[40]THEN avg40 = Average[40]


BUY 1 SHARE AT MARKET
ENDIF

IF NOT LONGONMARKET AND close > avg40 THEN


BUY 1 SHARE AT MARKET
ENDIF

IF NOT SHORTONMARKET AND close < Average[40] THEN


SELLSHORT 1 SHARE AT MARKET
ENDIF

IF NOT SHORTONMARKET AND close < avg40 THEN


SELLSHORT 1 SHARE AT MARKET
ENDIF

Esto es vlido igualmente si quiere utilizar el mismo indicador varias veces, pero con diferente
compensacin.
Cdigo no ptimo
a = ExponentialAverage[40](close)

Cdigo ptimo
a = ExponentialAverage[40](close)

b = ExponentialAverage[40](close[1])
c = ExponentialAverage[40](close)

IF a > a[1] THEN


BUY 1 SHARE AT MARKET

IF a > b THEN

ENDIF

BUY 1 SHARE AT MARKET


ENDIF

IF a < a[1] THEN


SELLSHORT 1 SHARE AT MARKET

IF a < c[1] THEN

ENDIF

SELLSHORT 1 SHARE AT MARKET


ENDIF

Llamadas a indicadores personalizados


La llamada a indicadores personalizados a travs de la instruccin CALL consume ms tiempo de
clculo que la llamada a indicadores ProRealTime. En el caso de los indicadores ProRealTime,
conocemos de antemano los clculos necesarios y dominamos la implementacin. Esto nos
permite efectuar optimizaciones en los clculos no permitidas por los indicadores personalizados,
cuya programacin es discrecional.
Para mejorar el rendimiento de un sistema de trading, es esencial otorgar la mxima eficacia a la
instruccin CALL en el programa.

21 / 73

La programacin de sistemas de trading

Limitar las llamadas idnticas:


Aplicamos la misma regla de limitacin de las llamadas a un mismo indicador para los indicadores
ProRealTime.
Cdigo no ptimo

Cdigo ptimo

myindic1= CALL "MiFuncion"

myindic = CALL "MiFuncion"

IF NOT LONGONMARKET AND close > myindic1 THEN

IF NOT LONGONMARKET AND close > myindic THEN

BUY 1 SHARE AT MARKET

BUY 1 SHARE AT MARKET

ENDIF

ENDIF

myindic2 = CALL "MiFuncion"

IF NOT SHORTONMARKET AND close < myindic THEN

IF NOT SHORTONMARKET AND close < myindic2 THEN


SELLSHORT 1 SHARE AT MARKET

SELLSHORT 1 SHARE AT MARKET


ENDIF

ENDIF

Limitar las llamadas imbricadas:


Si desea utilizar un indicador personalizado en el cdigo de su ProBacktest, compruebe que no
contiene la instruccin CALL.
Las llamadas a indicadores personales imbricados consumen mucho tiempo y recursos de clculo.
Le recomendamos escribir (o duplicar) sus indicadores personalizados utilizados en ProBacktest,
de manera que slo llamen a indicadores de ProRealTime.
Si los cdigos de sus indicadores personales no son muy complejos, podr incluso integrarlos
directamente en el cdigo de sus ProBacktests.
Cdigo no ptimo

Cdigo ptimo

Cdigo del sistema de trading:

Cdigo del sistema de trading:

myindic = CALL "MyDCLOSEMix LinearReg"

dayclosemix = ( DClose(0) + 3.5*DClose(1) +


4.5*DClose(2) + 3*DClose(3) + 0.5*DClose(4) 0.5*DClose(5) - 1.5*DClose(6) ) / 10.5

IF NOT longonmarket AND close > myindic THEN


BUY 1 SHARE AT MARKET
ENDIF
IF NOT shortonmarket AND close < myindic THEN
SELLSHORT 1 SHARE AT MARKET
ENDIF
CDIGO de "MyDCLOSEMix LinearReg" :
dayclosemix = CALL "MyDCLOSEMix"

myindic = LinearRegression[5](dayclosemix)
IF NOT longonmarket AND close > myindic THEN
BUY 1 SHARE AT MARKET
ENDIF
IF NOT shortonmarket AND close < myindic THEN
SELLSHORT 1 SHARE AT MARKET
ENDIF

RETURN LinearRegression[5](dayclosemix)
CDIGO de "MyDCLOSEMix" :
mix = ( DClose(0) + 3.5* DClose(1) + 4.5* DClose(2) +
3*DClose(3) + 0.5* DClose(4) - 0.5*DClose(5) 1.5*DClose(6) ) / 10.5
RETURN mix

22 / 73

La programacin de sistemas de trading

Limitar el nmero de condiciones imbricadas:


En el caso de la utilizacin de cualquier instruccin condicional (IF...THEN...ENDIF), le
aconsejamos trabajar con una instruccin que verifique n condiciones en lugar de con n
instrucciones:
Cdigo no ptimo
IF CLOSE >= 0.0014 THEN
IF CLOSE <= 0.0047 THEN
IF INTRADAYBARINDEX >= 5 THEN

Cdigo ptimo
IF CLOSE >= 0.0014 AND CLOSE <= 0.0047 AND
INTRADAYBARINDEX >= 5 AND INTRADAYBARINDEX
<= 20 THEN
IF NOT SHORTONMARKET THEN

IF INTRADAYBARINDEX <= 20 THEN


IF NOT SHORTONMARKET THEN
BUY 1 SHARES AT MARKET

BUY 1 SHARES AT MARKET


ENDIF
ENDIF

ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

Utilizacin de bucles FOR:


El uso de bucles FOR es a menudo indispensable, pero conviene limitar su utilizacin cuando esto
le sea posible ya que ralentiza el clculo.
Le mostramos a continuacin algunos ejemplos comunes en los que no es necesario el uso del bucle:
// Determina si la condicin c1 se ha cumplido al menos una vez en el transcurso de las n ltimas
velas:
IF HIGHEST[n](c1) = 1 THEN
...
// Determina si la condicin c1 se ha cumplido siempre en el transcurso de las n ltimas velas:
IF LOWEST[n](c1) = 0 THEN
...
// Determina el nmero de veces en los que se ha comprobado la condicin c1 en el transcurso de
las n ltimas velas
num = SUMMATION[n](c1)
// Determina el nmero de vistas temporales desde que se se cumpli c1
IF c1 THEN
lastoccurence = barindex
ENDIF
timesince = barindex - lastoccurence
//Encontrar el max de las variables (a,b,c,d,e,f,g):
top = MAX(a , MAX(b , MAX(c , MAX(d , MAX(e , MAX(f , g) ) ) ) ) )

23 / 73

ProBacktest: La simulacin de sus sistemas de trading

ProBacktest: La simulacin de sus sistemas de trading


La pestaa 'ProBacktest' de la ventana de creacin de sistemas de trading (cf. prrafo 2), permite
configurar los parmetros de su sistema:

Gestin de capital (Money management)


Periodo de ejecucin
Optimizacin de variables

24 / 73

ProBacktest: La simulacin de sus sistemas de trading

Gestin de Capital o Money Management


Capital inicial
Esta seccin le permite definir el capital del que se dispondr en su sistema de trading. De ello
depender la inversin mxima autorizada en la ejecucin del sistema.
Durante la ejecucin de un ProBacktest, las comisiones de operativa as como las ganancias o las
prdidas lo aumentarn o reducirn (a menos que el parmetro NoCashUpdate est activado, cf
prrafo Reinvertir las ganancias).
En sistemas de trading automtico, el capital disponible es el capital de su cartera.

Si su ProBacktest no realiza ninguna compra, le recomendamos aumentar su capital inicial.

Comisiones de operativa y gestin de riesgos


En funcin del tipo de instrumento en el que se base el sistema, se aplicarn diferentes
configuraciones de operativa.
Podr parametrar su operativa a travs de las 3 pestaas disponibles: 'Futuros', 'Acciones' y
'Forex'.

Futuros:

Las comisiones de operativa se definen en comisin por lote y por transaccin.


El 'Depsito por contrato' es la cantidad de efectivo necesaria para la compra de un contrato. El
valor de un punto se calcula automticamente en funcin del futuro en el que se aplique el
ProBacktets.

25 / 73

ProBacktest: La simulacin de sus sistemas de trading

Encontrar a continuacin el valor de cada punto en los futuros ms negociados:


Nombre del Futuro

Valor 1 punto

FCE CAC 40

10

DAX

25

DJ Eurostoxx 50

10

BUND

10

Euro FX

12,5$

Mini S&P 500

50$

Mini Nasdaq 100

20$

Mini Dow

5$

La gestin de riesgos le permite establecer (en nmero de contratos) los siguientes parmetros:
Lmite mximo del total invertido (o tamao mximo de la posicin): cualquier orden que
represente una cantidad superior a este valor ser rechazada.
Montante mximo por transaccin: se ignorar cualquier orden de una cantidad superior a este
valor.
Montante mnimo por transaccin: se ignorar cualquier orden de una cantidad inferior a este
valor.
Nota: una inversin de la posicin se considerara como un cierre y una apertura de posicin, por
lo que tomaramos en cuenta la cantidad de la apertura en el clculo del montante mnimo. Las
comisiones de operativa slo se aplicaran una vez.

Forex:

Los parmetros de configuracin de la operativa permiten definir el tamao del lote, el spread y el
apalancamiento que se aplica a cada orden.

26 / 73

ProBacktest: La simulacin de sus sistemas de trading

Ejemplo con el EURUSD:


Tamao de un lote: 100 000
Spread: 2 pips
Apalancamiento: 20

La instruccin BUY 1 LOT AT MARKET en el EURUSD tiene como objetivo la compra de un lote de
100000$, con un spread de 2 pips (es decir 0,0002). Al ser 20 el apalancamiento (margen de 5%),
es necesario disponer de 5000$.
La gestin de riesgos funciona de la misma manera que para los futuros, salvo que las cantidades
se definen en lotes.

Acciones:

Las comisiones de operativa se definen por orden en o en % de la transaccin. Tambin es


posible definir una comisin de operativa mnima por transaccin.
En acciones, el tamao de la posicin y la inversin mnima por operacin se pueden configurar en
la divisa del instrumento o en %. La gestin de riesgos permite al mismo tiempo fijar la cantidad
invertida al lanzamiento de una orden as como aplicar un apalancamiento.
Tomemos un ejemplo:
Lmite mximo de inversin: 500% capital
Inversin mxima por operacin: 500% capital
A travs de esta configuracin, cada orden enviada tendr un apalancamiento de 5.
Inversamente, si define un % de 100, limitar las prdidas del ProBacktest a la cantidad de su
capital inicial.
Nota: las comisiones de operativa no se toman en cuenta en la seccin 'Gestin de riesgos'.

27 / 73

ProBacktest: La simulacin de sus sistemas de trading

Optimizacin de variables
Esta seccin le permite definir la optimizacin de variables. A travs de esta funcin, podr probar
mltiples combinaciones de variables para encontrar las que le ofrezcan los mejores resultados.
Para ms informacin al respecto y un ejemplo concreto, le sugerimos visualizar el video 'Defina la
gestin de capital (money management), los stops y la optimizacin de variables para mejorar sus
estrategias'.
El resultado de la optimizacin se presenta en un 'Informe de optimizacin'. En l se indican las
estadsticas de cada valor para determinar as la combinacin de variables a utilizar en la optimizacin
de su sistema de trading.
He aqu un ejemplo de sistema con optimizacin de los periodos de medias mviles n y m:
AVGm=ExponentialAverage[m](Close)
AVGn=ExponentialAverage[n](Close)
IF AVGm Crosses Over AVGn THEN
BUY 100 SHARES AT MARKET
ENDIF
IF AVGm Crosses Under AVGn THEN
SELL 100 SHARES AT MARKET
ENDIF

Definimos las variables n y m pulsando en el botn 'Aadir' de la ventana de optimizacin:

28 / 73

ProBacktest: La simulacin de sus sistemas de trading

Aparece entonces la ventana para la definicin de variables:

Nombre usado en programa representa el nombre que toma la variable en nuestro cdigo (n y
m en este caso). Es importante distinguir entre maysculas y minsculas.
Etiqueta en ventana propiedades representa el nombre que se le atribuye a la variable para
identificarla con mayor facilidad (por ejemplo 'Nmero de Perodos' para n).
Valor mnimo y Valor mximo representan los extremos entre los que la variable puede oscilar
durante las pruebas de optimizacin.
Paso representa el intervalo de valores que la optimizacin respetar durante el anlisis de los
resultados.
La siguiente imagen muestra un ejemplo de informe de optimizacin:

29 / 73

ProBacktest: La simulacin de sus sistemas de trading

El informe del ejemplo ofrece 5 estadsticas para cada una de las combinaciones de variables
estudiadas (en este caso: n y m). Veamos las estadsticas con ms detalle:

Ganancias designa la plusvala obtenida con el sistema de trading utilizado. Matemticamente,


se traduce en esta frmula:
Ganancias = Valor del capital tras la operativa realizada Valor inicial del capital
Esta estadstica permite evaluar de manera absoluta el potencial de ganancias del sistema de
trading durante el periodo histrico probado y para cada combinacin de variables.
Nota: las comisiones de operativa definidas en la seccin 'Gestin de capital' se toman en cuenta en este
clculo.
El %Ganancias es el beneficio expresado en %. Matemticamente, se traduce por la frmula:
%Ganancias = (100 x Ganancias) / Capital inicial
Indica el resultado relativo de este ProBacktest, configurado con las correspondientes variables.
El Num de posiciones indica el nmero de posiciones abiertas en el transcurso del ProBacktest.
El % de posiciones ganadoras designa el porcentaje de posiciones ganadoras del ProBacktest
empleado. Matemticamente se define as:
% Operaciones ganadoras = (100 x Nm.de posiciones ganadoras) / Nm.total de posiciones
El Ganancia media por posicin puede ayudar a determinar la eficacia de las rdenes
enviadas. Esta informacin es particularmente importante cuando no deseamos enviar un gran
nmero de rdenes; en tal caso, la estadstica mencionada se convierte en un criterio determinante
para decidir si el sistema de trading se aplica o no.
Matemticamente, se define as:
Ganancia media por posicin = Ganancias/ Nmero de posiciones
Nota: los valores ptimos de las variables de un mismo ProBacktest pueden cambiar segn el
instrumento, las unidades de tiempo o la cantidad de histrico utilizados.

30 / 73

ProBacktest: La simulacin de sus sistemas de trading

Definicin del periodo de ejecucin del backtest

Estos campos sirven para definir el intervalo de tiempo sobre el que se desee aplicar el ProBacktest
(con la condicin de que existan suficientes datos histricos para el valor en cuestin). Puede
aumentar la cantidad de histrico de su grfico utilizando el men desplegable situado en la parte
superior izquierda de cada uno. Tenga en cuenta que si establece 'primera fecha disponible' como
fecha de inicio, ser necesario cargar en su grfico la cantidad de histrico deseada antes de lanzar el
ProBacktest.

Si se trata de un ProBacktest en 'tiempo real', las rdenes se fijan en su grfico cuando se producen
las seales. Tambin es posible asociar estas rdenes a ventanas emergentes o a sonidos desde el
men 'Opciones/configuracin de alertas y sonidos'.
Si se define una fecha final, las posiciones todava abiertas en esta fecha se cerrarn
automticamente.

Nota: si su ProBacktest tarda en calcularse, le sugerimos reducir su periodo de ejecucin, pues el


tiempo de clculo es proporcional a la cantidad de histrico en el que se desee aplicar.
Tras la ejecucin de un ProBacktest se muestra la siguiente informacin (ver Anexo A):
Grfico de liquidez
Evolucin de las posiciones
Informe detallado
Para ms informacin, consulte el Anexo A al final de este documento.

Personalizacin de las horas de trading en backtests


El men 'Opciones / Huso horario en grficos intrada' le permite personalizar los horarios de
negociacin de los mercados.
Horarios de negociacin personalizados: si reduce las horas de negociacin de un mercado,
nicamente aparecern en el grfico las horas establecidas (aunque en la ejecucin de su
ProBacktest se tomarn en cuenta todos los datos negociados en la sesin, no slo aqullos que
aparecen en su grfico).
Observe que slo se pueden reducir las horas de negociacin en un mismo da. Por ejemplo, en un
mercado que se mantenga abierto las 24 horas, Ud. podr mostrar los datos negociados entre 10:00 y
14:00, pero no sra posible seleccionar los datos negociados entre las 21:00 de un da y las 9:00 del
da siguiente. Si se configura el lanzamiento de una orden al cierre de la ltima vela de la sesin y el
horario de este mercado se hubiera personalizado, esta orden se lanzar a la apertura personalizada
del siguiente da de trading.
Notas relativas a la personalizacin de los horarios de negociacin y los datos del fin de
semana:
Los horarios de negociacin personalizados slo son visibles en los grficos: los sistemas ProBacktest
se ejecutarn tomando en cuenta los horarios de negociacin oficiales del mercado.

31 / 73

ProBacktest: La simulacin de sus sistemas de trading

Algunos mercados que negocian durante las 24 horas permiten utilizar los datos intradiarios para la
construccin de las velas diarias. Tal y como ocurre en la personalizacion de los horarios, esta opcin
no se toma en cuenta para la ejecucin de sus ProBacktets, que siempre utilizarn las velas diarias
oficiales basadas en el uso horario local del mercado. Algunos mercados (como el Forex) incluyen
datos del fin de semana. Existe una casilla especial para dichos mercados en 'Opciones / Huso
horario de grficos intrada' que le permite ocultar los datos negociados durante el fin de semana en
los grficos, aunque dichos datos siempre se tomaran en cuenta en la ejecucin de sus ProBacktets.
Los datos del domingo se incluyen en la vela diaria del lunes al aplicar un ProBacktest (el sbado no
hay negociacin).

Razones por las que puede detenerse un ProBacktest


Un ProBacktest puede detenerse en los siguientes casos:
El backtest alcanza el momento final que se precis en la ventana de programacin. En este
caso, el final del backtest se representa en el grfico como una lnea negra vertical.
Presencia de la instruccin 'Quit' en el cdigo que haya sido ejecutada. En este caso, el final del
backtest se representa en el grfico a travs del icono
El capital disponible es insuficiente para cubrir las prdidas (el capital 'estimado' es negativo). En
este caso, el final del backtest se representa en el grfico mediante el icono
Se rechaza una orden por efectivo insuficiente. La orden aparecer en la lista de rdenes del
informe detallado. En este caso, el final de backtest se representar mediante el icono:
Aqu le mostramos un ejemplo de ProBacktest interrupido por capital insuficiente:

32 / 73

ProOrder: La ejecucin de sistemas de trading automtico

ProOrder: La ejecucin de sistemas de trading automtico


En esta seccin del manual encontrar toda la informacin necesaria para la ejecucin como sistema de
trading automtico de cualquier sistema al que haya aplicado un ProBacktest:
Cmo enviar un sistema de trading a ProOrder con el fin de prepararlo para su ejecucin como
sistema de trading automtico.
Cmo ejecutar un sistema de trading automtico y comprobar sus resultados.
La configuracin de sistemas de trading automtico y sus condiciones de ejecucin.
La coexistencia del trading automtico y del trading manual en la plataforma.
Las condiciones para ejecutar mltiples sistemas de trading automtico en un mismo instrumento
Una lista de indicadores que no pueden utilizarse en estos sistemas automticos debido a su
mtodo de clculo

Antes de ejecutar cualquier sistema de trading automtico, le recomendamos la lectura completa de


este manual.

33 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Prepare un sistema de trading para la ejecucin automtica


Comience por abrir la ventana ProOrder a partir del menu 'Trading':

Aparecer la siguiente ventana, con las instrucciones de preparacin de los sistemas de trading para el
trading automatico.

34 / 73

ProOrder: La ejecucin de sistemas de trading automtico

En primer lugar, seleccione el grfico y la vista temporal en la que desee ejecutar su sistema de trading
automatico y pulse en el boton

. Se abrir a continuacin la ventana 'Indicadores & Sistemas de

trading'. Pulse en el botn 'Backtest y trading automtico' para acceder a la lista de sus sistemas de
trading:

Seleccione el sistema de trading que desee ejecutar automticamente y pulse en el botn 'Preparar
para trading automtico'. El sistema de trading aparecer en ProOrder.

35 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Cmo ejecutar sistemas de trading en ProOrder y comprobar sus resultados


Una vez aadido el sistema de trading a ProOrder, podr definir el tamao mximo de su posicin y
empezar a operar con l pulsando en el botn 'Start':

Una ventana emergente le pedir confirmar la ejecucin del sistema, por lo que le recomendamos leer
con atencin el contenido de la misma.
Observe que el 'Tamao mximo de la posicin' introducido en ProOrder prevalece sobre las
instrucciones de sus cdigos. El tamao mximo de la posicin para futuros y forex se define en
nmero de lotes o contratos. Por ejemplo, si su cdigo contiene una instruccin para la compra de 3
lotes pero Ud. establece el lmite mximo de la posicin en 1, se ignorar la instruccin para la compra
de 3 lotes. Del mismo modo, si su cdigo contiene una instruccin de compra de 1 lote y de venta a
descubierto de 3 lotes, la orden de venta a descubierto no se ejecutar y Ud. mantendr slo la
posicin compradora. Por lo tanto, deber verificar siempre el tamao mximo de su posicin antes de
la ejecucin de cualquier cdigo.
Para el caso de las acciones, el tamao mximo de la posicin se define en efectivo (sin incluir las
comisiones de operativa).
Tras su confirmacin, el sistema se mostrar en la seccin 'En curso', tal y como aparece a
continuacin.

36 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Mientras el sistema de trading est operativo, sus posiciones, ganancias latentes y ganancias totales
aparecern en la ventana ProOrder. Ser entonces posible pulsar en el enlace 'Versin' para acceder
a una copia del cdigo de este sistema.
Podr igualmente pulsar en el botn destacado a continuacin para visualizar el grfico de liquidez del
sistema y el informe detallado de sus resultados.

37 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Le mostramos un ejemplo de grfico de liquidez de un sistema en curso y su informe detallado:

38 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Nota: la ganancia mostrada en la seccin 'Estadsticas de posiciones cerradas' puede ser diferente del
valor del grfico de liquidez, ya que ste toma en cuenta las posiciones que estn an abiertas y el
sistema sigue en curso.

39 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Configuracin de las preferencias de trading y condiciones de ejecucin


Configuracin de los sistemas de trading
Antes de ejecutar cualquier sistema de trading, deber pulsar en el botn destacado en amarillo
para configurar los parmetros y preferencias de su trading:

Incluimos un enlace hacia las condiciones de ejecucin de sus sistemas de trading en la parte
inferior de esta ventana ('Pulse aqu). Le aconsejamos leer estas condiciones con atencin.

40 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Detencin automtica de sus sistemas de trading


Fecha de validez: todos los sistemas de trading en curso tienen una fecha de validez comn. Si
no pulsa en el botn de prolongacin antes de esa fecha, ProOrder los detendr automticamente.
Puede visualizar la fecha de validez (expresada en el huso horario de su ordenador) y prolongar la
validez de sus sistemas de trading a travs del botn de prolongacin situado en la parte inferior
de la ventana ProOrder mientras se encuentre operativo algn sistema de trading:

Puede asignar una cantidad de tiempo para cada prolongacin desde la ventana 'Preferencias de
trading'. Es posible aumentar este parmetro mientras su sistema de trading est operativo. La
modificacin se aplicar en la siguiente prolongacin que se efecte.
Lmite mximo de rdenes por da: ProOrder podr interrumpir cualquier sistema de trading
tanto si la totalidad de rdenes pendientes como si el nmero de rdenes ejecutadas por dicho
sistema desde la apertura del mercado (0h00 GMT para el Forex) es superior o igual a la cantidad
establecida en la pestaa 'Trading automtico' de la ventana 'Preferencias de trading'. Una orden
pendiente es una orden que ha sido enviada al broker y que no se ha ejecutado, o que ha sido
rechazada o anulada.
Por ejemplo, cada instruccin 'Set stop', 'Set Trailing stop' o 'Set target', en tanto que la orden
correspondiente no haya sido anulada, rechazada o ejecutada.
Adems, 3 rdenes lmites o 3 rdenes stop diferentes que no hayan sido anuladas, rechazadas o
ejecutadas contarn como 3 rdenes pendientes. Esta condicin se cumple tanto si las rdenes se
sitan en el mismo nivel de precio como en niveles de precio distintos.

41 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Por ejemplo, Ud. establece un lmite de 8 rdenes para la detencin de sus sistemas. Desde la
apertura del mercado, un sistema de trading determinado ya ha ejecutado 5 ordenes y tiene,
adems, una posicin abierta y dos rdenes pendientes (una 'set target' y una 'set stop'). Si el
sistema necesitara enviar una nueva orden al mercado, esta octava orden no se lanzara ya que
5+2+1 representa el nivel de interrupcin establecido. El sistema de trading se detendr y se
anularn en primer lugar las rdenes pendientes y a continuacin se cerrar su posicin.
Rechazo de rdenes. ProOrder podr detener cualquier sistema de trading si se rechaza un
nmero determinado de sus rdenes. Puede establecer la interrupcin de un sistema de trading al
cabo de una sola orden rechazada o fijar un nmero de intentos. No es posible modificar los
parmetros de rechazo de rdenes mientras un sistema de trading se encuentre operativo.

Coexistencia del trading manual y del trading automtico en la plataforma


Si hay sistemas de trading ejecutndose en un valor, no ser posible lanzar rdenes manualmente
desde la plataforma en dicho valor, aunque podr seguir invirtiendo manualmente en otros
instrumentos. En aquellos instrumentos en los que haya sistemas de trading ejecutndose, las
herramientas para el trading manual sern reemplazadas por un botn que indica que el trading
automtico se encuentra activo en ese instrumento:

Puede abrir la ventana ProOrder pulsando en ese botn y acceder a los sistemas de trading
actualmente en curso.

42 / 73

ProOrder: La ejecucin de sistemas de trading automtico

Ejecutar mltiples sistemas de trading en el mismo valor


Si est ejecutando varios sistemas de trading en el mismo valor, su posicin neta se determinar
tomando en cuenta todos ellos. Por ejemplo, si hay 2 sistemas de trading y uno compra 1 lote
mientras que el otro vende 1 lote, su posicin neta ser de 0. nicamente la posicin neta le
proporcionar los resultados del conjunto de sus sistemas de trading abiertos en el mercado en un
momento dado.
Cuando muestre el grfico de liquidez de un sistema de trading, acceder a la ventana 'Posiciones'.
Esta ventana le indica las posiciones de un sistema concreto de trading en ese valor, y puede ser
diferente de su posicin neta en dicho instrumento (determinada por el conjunto de sistemas de
trading en ejecucin en dicho instrumento). La posicin neta est representada por la lnea de
posicin.

Ejemplo:
Supongamos que estamos ejecutando 2 sistemas de trading en el mismo instrumento: uno compra 6
lotes de un tamao de 100000 unidades cada uno y el otro est comprando 2 lotes de un tamao de
100000 unidades cada uno. La posicin neta = +800000
En este ejemplo, la posicin del sistema de trading mostrado en el grfico es de +600000. La posicin
neta mostrada por la lnea de posicin es de +800000.

43 / 73

ProOrder: La ejecucin de sistemas de trading automtico

La posicin neta de +800000 unidades se muestra igualmente pulsando en el men 'Trading' y


abriendo la ventana 'Carteras':

Cuando ejecuta mltiples sistemas de trading en el mismo instrumento, cada valor informativo del
sistema que est ejecutndose se correponde con su posicin actual, rdenes, transacciones y
ganancias de forma independiente. Como consecuencia de esto, las instrucciones 'LongOnmarket',
'ShortOnMarket' pueden indicarle si el sistema de trading en curso es comprador o vendedor.
La posicin neta en un instrumento debe ser diferente de la posicin de un determinado sistema. Del
mismo modo, otras variables de estado como 'CountOfLongShares', 'CountOfShortShares,
'CountOfPosition', 'PositionPrice', 'StrategyProfit', 'TradIndex', 'TradePrice' y 'PositionPerf' hacen
referencia slo a su sistema actual.

Restriccin de indicadores
La utilizacin de los siguientes indicadores est limitada actualmente en trading automtico porque su
sistema de clculo no permite un uso en tiempo real:
ZigZag: las seales basadas en este indicador se recalculan despus de un hecho y como
consecuencia de esto, las seales dadas en tiempo real pueden diferir de las seales
proporcionadas en sus backtests.

44 / 73

An exo A: Muestre los resultado s de sus si stem as de trading

Anexo A: Muestre los resultados de sus sistemas de trading


Los resultados de un sistema de trading se presentan a travs de tres formatos complementarios:

1) Grfico de liquidez
Tambin llamado 'Equity Curve', representa la evolucin del capital invertido en la ejecucin del sistema
o ProBacktest :
La lnea azul horizontal representa el capital inicial de su sistema. Si est ejecutando sistemas
de trading automtico, esta lnea se sita siempre en 0. Si ejecutara un ProBacktest con un capital
inicial de 10000 y una prdida de 2705, el grfico de liquidez tendra un valor de 7295, tal y como
puede apreciar en el siguiente ejemplo. Si se tratara de un sistema de trading automtico con
idntica prdida, el punto de salida del grfico ser 0 y el valor final ser de -2705.

El relleno del grfico de liquidez ser de color verde si el resultado global es positivo (el valor
actual del capital es superior al inicial) y de color rojo si el resultado global es negativo.
La lnea de la grfico de liquidez ser de color verde en caso de una variacin positiva respecto
al nivel precedente, y de color rojo para indicar una variacin a la baja.

45 / 73

An exo A: Muestre los resultado s de sus si stem as de trading

2) Posiciones
Esta informacin se muestra mediante un histograma con la evolucin de las posiciones abiertas por un
sistema de trading.
Una barra verde indica la apertura de una posicin a largo (compra).
Una barra roja indica la apertura de una posicin a corto (venta a descubierto o short selling).
Si no hay ninguna barra visible, no hay ninguna posicin abierta en el mercado.
La aparicin de varias barras sucesivas de un mismo color indica que se mantienen la(s) posicin(es).
A lo largo del eje vertical visible en la zona derecha del grfico se indica la cantidad de posiciones
abiertas y acumuladas. En la ilustracin siguiente constataremos que nos encontramos en una posicin
de venta de un lote de 100000 unidades en el EUR/USD.

46 / 73

An exo A: Muestre los resultado s de sus si stem as de trading

3) Informe detallado
El informe detallado le permite visualizar las estadsticas de su sistema, as como el detalle de cada
posicin y orden:

47 / 73

An exo A: Muestre los resultado s de sus si stem as de trading

El informe detallado se presenta como una ventana independiente y se compone de 3 pestaas.


En la pestaa 'Estadsticas' hallar un presentacin exhaustiva de los resultados del sistema de trading
(prdidas y ganancias, nmero de operaciones ganadoras,).as como indicadores de la evolucin del
riesgo. Observe que estas estadsticas no incluyen las posiciones abiertas en el momento en el que se
genera el informe (slo se toman en cuenta las posiciones cerradas).
Ganancias designa la plusvala obtenida con la operativa realizada. Matemticamente, se traduce
con esta frmula:
Ganancias = Capital final Capital inicial
Esta estadstica permite evaluar de manera absoluta el potencial de ganancias del sistema de trading
definido.
Nota: las comisiones de operativa configuradas en la seccin 'Gestin de capital' se toman en cuenta en
este clculo.
El %Ganancias es el beneficio expresado en %. Matemticamente, se traduce por la frmula:
%Ganancias = (100 x Ganancias) / Capital inicial
El Beneficio bruto representa la suma de todas las ganancias y Prdidas brutas la suma de
todas las prdidas. Ratio ganancias/ prdidas es la relacin entre estos dos valores.
El Num de posiciones indica el nmero de posiciones abiertas en el transcurso del sistema de
trading.
El % de posiciones ganadoras designa el porcentaje de posiciones ganadoras del sistema de
trading empleado. Matemticamente se define as:
% Operaciones ganadoras = (100 x Nm.de operac. ganadoras) / Nm.total de operaciones
La Ganancia media por posicin es la esperanza de ganancias por transaccin y puede ayudar
a determinar la eficacia media de las rdenes enviadas. La esperanza es especialmente importante
cuando no deseamos enviar un gran nmero de rdenes; en tal caso, la estadstica mencionada se
convierte en un criterio determinante para decidir si utilizamos o no el sistema.
Matemticamente, se define as:
Ganancia media por posicin = Ganancias / Nmero de posiciones
El Beneficio mximo es el mximo de ganancias de una posicin determinada, la Prdida
mxima es la prdida mxima de una posicin dada desde que se inici el sistema de trading. La
Desviacin tpica prdidas y ganancias es la desviacin tpica de los resultados de cada posicin.
El Max Drawdown es el mximo potencial de prdidas del sistema de trading. Definimos en
primer lugar el 'drawdown', que es la distancia entre un punto determinado y el punto ms alto que le
precede en el grfico de liquidez:

DD(n)= Max t[0;n] P(t) - P(n)


El Max drawdown representa el valor mximo de este parmetro desde el inicio del sistema de trading.

MaxDD(N) = Max n[0:N] ( Maxt[0;n] P(t) - P(n) )


El Max Run-up es el potencial mximo de ganancias del sistema. El 'runup' se define como la
diferencia entre un punto determinado y el punto ms alto que le precede en el grfico de liquidez:

RU(n)= P(n) Min t[0;n] P(t)


El Max Run-up representa el valor mximo de este parmetro desde el inicio del sistema de trading.

MaxDD(N) = Maxn[0:N] ( P(n) - Mint[0 ;n]P(t) )

48 / 73

An exo A: Muestre los resultado s de sus si stem as de trading

Ejemplo:
Barindex

PnL

DrawDown

RunUp

0,00

0,00

0,00

15,00

0,00

-15,00

10,00

5,00

-10,00

0,00

15,00

0,00

15,00

0,00

-15,00

-10,00

25,00

0,00

-20,00

35,00

0,00

-5,00

20,00

-15,00

-6,00

21,00

-14,00

10

20,00

0,00

-40,00

11

5,00

15,00

-25,00

Max :

-35,00

40,00

49 / 73

An exo A: Muestre los resultado s de sus si stem as de trading

El % Mximo de exposicin al riesgo: la exposicin al riesgo es la relacin entre la prdida mxima


posible de la posicin y el capital actual. El % mximo es, por tanto, el mximo de este valor expresado
en porcentaje. Podemos distinguir 3 casos:

Acciones:

%exposicin max = Max posiciones (Cantidad * precio medio / capital) * 100


Futuros:

%exposicin max = Max posiciones (Cantidad * depsito / capital) * 100


Forex:

%exposicin max = Max posiciones (Cantidad * precio medio * apalancamiento / capital) * 100
Igualmente, el % exposicin media al riesgo es la media del porcentaje de exposicin al riesgo.
Las Comisiones de operativa contabilizan el conjunto de comisiones de operativa de cada orden
desde el inicio del sistema de trading. Las comisiones de operativa se definen en la gestin de capital
en el caso de los ProBacktest.
El % de tiempo en el mercado es la relacin entre el nmero de periodos durante los que hay posiciones
abiertas dividido por el nmero de periodos del sistema de trading.

Las dos pestaas siguientes le facilitan informacin sobre todas las rdenes lanzadas y las posiciones
abiertas y cerradas en el transcurso del sistema de trading automtico o del ProBacktest.
La pestaa Lista de rdenes le indica la hora, el sentido, la cantidad y el precio de las rdenes
enviadas. Estas rdenes aparecen en el huso horario del mercado (es decir, expresadas en hora
local).
Por ltimo, la pestaa Lista de posiciones cerradas le proporciona informacin sobre las
posiciones abiertas y liquidadas por el sistema (a largo o a corto, duracin indicada en cantidad de
velas, resultados absolutos y relativos de cada posicin, fecha de entrada y de salida). Si hubiera
alguna posicin todava abierta en el momento de la creacin del informe, no se incluir en la lista. Si
ejecuta un ProBacktets y desea cerrar todas las posiciones al final del mismo, le recomendamos fijar
una fecha final en lugar de una fecha en tiempo real.

50 / 73

An exo B: Apl icaciones prcticas

Anexo B: Aplicaciones prcticas


Sistema de trading basado en Heikin Ashi
Este sistema de trading genera una seal de compra cuando aparece una vela roja seguida de
una vela verde en estilo Heikin-Ashi.
Inversamente, se genera una seal de venta a descubierto si aparece una vela verde seguida de
una roja. El inters de este ProBacktest es que reconstruye la vista Heikin-Ashi a partir de velas
japonesas clsicas. Por ello, deber aplicarse imperativamente en un grfico con el precio en estilo
de velas japonesas.
ONCE PreviousStatus = 0
IF BarIndex = 0 THEN
XClose = TotalPrice
XOpen = (Open + Close) / 2
ELSE
XClose = TotalPrice
XOpen = (XOpen[1] + Xclose[1]) / 2
ENDIF
IF XClose >= XOpen THEN
IF PreviousStatus <> 1 THEN
BUY 1 SHARES AT MARKET
PreviousStatus = 1
ENDIF
ELSE
IF PreviousStatus <> -1 THEN
SELLSHORT 1 SHARES AT MARKET
PreviousStatus = -1
ENDIF
ENDIF

Sistema de trading basado en el ZigZag


Este ProBacktest utiliza el indicador ZigZag para identificar cules habran sido las mejores
oportunidades de compra y venta. Los excelentes resultados (en mercados de acciones y futuros)
se deben al carcter no predictivo del Zig Zag, que se recalcula a posteriori y no proporciona
seales vlidas en tiempo real.
A pesar de ello, este sistema es interesante en tanto que permite comparar sus resultados con los
de otros sistemas.
// En variable optimizada: periodos = 1 (de 5 a 10)
myZigZag = ZigZag[10]
c11 = (myZigZag > myZigZag[1])
c12 = (myZigZag < myZigZag[1])
IF c11 AND NOT LONGONMARKET THEN
BUY 1 SHARES AT MARKET
ENDIF
IF c12 AND NOT SHORTONMARKET THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF

51 / 73

An exo B: Apl icaciones prcticas

Sistema de trading Breakout Range con Stop Dinmico


Se trata de un sistema de tipo BreakOut que slo abre posiciones largas, en el que los soportes y
resistencias son determinados por los mximos y mnimos de las dos primeras velas del da.
Si el precio cruza al alza una lnea de resistencia y la media mvil de 10 periodos aumenta,
abrimos una posicin larga.
Establecemos un objetivo al 1% as como un stop de proteccin en el precio del soporte.
La posicin se cierra a las 17h (hora local del mercado) para evitar mantenerla abierta durante la
noche. Es necesario acceder a datos en tiempo real para probar este sistema de trading.
DEFPARAM CumulateOrders = False
MM = Average[10](close)
MyTarget = 1
EndTime = 170000
IF INTRADAYBARINDEX = 2 THEN
MyResistance = HIGHEST[2](high)
MySupport = LOWEST[2](low)
ENDIF
REM Comprar
IF MM>MM[1] AND close CROSSES OVER MyResistance THEN
BUY 1 SHARES AT MARKET
ENDIF
REM Salida compra
IF time > EndTime THEN
SELL AT MARKET
ENDIF
SELL AT MySupport STOP
SET TARGET %Profit MyTarget

52 / 73

An exo B: Apl icaciones prcticas

Sistema de trading basado en el Estocstico Alisado


Este sistema reposa sobre el indicador 'Estocstico alisado' aplicado al precio medio y su media
mvil. Cuando el indicador es superior a su media mvil exponencial, compramos; en caso
contrario, realizamos una venta a descubierto. Establecemos igualmente un objetivo al 1% de las
ganancias.

DEFPARAM CumulateOrders = False


REM Compra
Indicator1 = SmoothedStochastic[9,9](MedianPrice)
Indicator2 = ExponentialAverage[9](Indicator1)
// Inicio variable
StopLimit = 10
REM Condiciones para largos
c1 = (Indicator1 >= Indicator2)
IF c1 THEN
BUY 1 SHARES AT MARKET
ENDIF
REM Condiciones para cortos
IF NOT c1 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
SET TARGET %PROFIT StopLimit

53 / 73

An exo B: Apl icaciones prcticas

Swing Trading, ADX y Medias mviles


Este backtest se basa en el indicador ADX y en su posicionamiento respecto al valor 30, con el
objetivo de reducir las seales falsas y minimizar los riesgos.
Se trata de un sistema de trading que presenta un gran nmero de condiciones, lo que restringe el
nmero de oportunidades.
DEFPARAM CumulateOrders = False
MyADX12 = ADX[12]
ADXperiods = 5
MyMM20 = Average[20](Close)
IsLow30 = 0
IF Lowest[ADXperiods+1](MyADX12)<30 THEN
IsLow30 = 1
ENDIF
// Compra
// ADX 12 est por encima de 30 desde al menos un intervalo comprendido entre 5 y 10 sesiones
Condition1 = NOT IsLow30
// Si la media mvil de 20 periodos del periodo actual se encuentra entre el mximo y el mnimo del periodo
actual y la media mvil del periodo anterior est entre el mximo y el mnimo del periodo anterior
Condition2 = High > MyMM20 AND Low < MyMM20 AND High[1] < MyMM20[1] AND Low[1] < MyMM20[1]
// Si el mximo del da sobrepasa el mximo de la vspera.
Condition3 = Dhigh(0) > Dhigh(1)
IF Condition1 AND Condition2 AND Condition3 THEN
BUY 1 SHARES AT MARKET
ENDIF
// Venta a corto
// ADX 12 est por encima de 30 desde al menos un intervalo comprendido entre 5 y 10 sesiones
Condition4 = NOT IsLow30
// Si la media mvil de 20 periodos del periodo actual se encuentra entre el mximo y el mnimo del periodo
actual y la media mvil del periodo anterior est entre el mximo y el mnimo del periodo anterior
Condition5 = High > MyMM20 AND Low < MyMM20 AND High[1] > MyMM20[1] AND Low[1] > MyMM20[1]
// Si el mnimo del da sobrepasa el mnimo de la vspera
Condition6 = Dlow(0) < Dlow(1)
IF Condition4 AND Condition5 AND Condition6 THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF

54 / 73

An exo B: Apl icaciones prcticas

Sistema de trading basado en contador de posiciones


Inverse Fisher Transform aplicado al RSI.
Este sistema de trading est basado en el indicador 'Inverse Fisher Transform RSI' para lanzar
rdenes de compra o de venta.
El sistema genera una orden de compra cuando el 'Inverse Fisher Transform RSI' cruza al alza el
nivel de 50 y vende si el indicador cruza el nivel de 80 a la baja.
Inversamente, se genera una orden de venta a descubierto cuando el 'Inverse Fisher Transform
RSI' cruza a la baja le nivel de 50 y se cierra (compra) cuando el 'Inverse Fisher Transform RSI'
cruza el nivel de 20 al alza.
Puede aplicar un ProBacktest a este sistema de trading con velas de 1h en el caso de futuros. En
cambio, es aconsejable utilizarlo con velas diarias en el caso de acciones.

REM Inverse Fisher Transform aplicado al RSI


REM Parmetros: n = cantidad de velas para el clculo del RSI
n = 10
Ind=RSI[n](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
myInverseFisherTransformsRSI = z
IF (myInverseFisherTransformsRSI Crosses Over 50) THEN
BUY 1 SHARES AT MARKET
ENDIF
IF (myInverseFisherTransformsRSI Crosses Under 80) THEN
SELL AT MARKET
ENDIF
IF (myInverseFisherTransformsRSI Crosses Under 50) THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
IF (myInverseFisherTransformsRSI Crosses Over 20) THEN
EXITSHORT AT MARKET
ENDIF

55 / 73

An exo B: Apl icaciones prcticas

Sistema de trading basado en el TradeIndex Find inside bar


El ejemplo siguiente es un sistema basado en un patrn de precios utilizado con frecuencia y
conocido como 'Inside Bar'. Se aplica a 2 patrones de velas concretos:
El primer patrn se produce si el rango de la segunda vela anterior a la vela actual es
superior al rango de la vela anterior a la vela actual. La vela que precede a la vela actual debe
ser verde (cierre > apertura). En este caso, se abre una posicin larga.
El segundo patrn se produce si el rango de la segunda vela anterior a la vela actual es
inferior al rango de la vela que precede a la vela actual. La vela que precede a la actual debe
ser roja (cierre < apertura). En este caso, abrimos una posicin corta.
La posicin se cierra sistemticamente 3 velas despus de haberse abierto.

DEFPARAM CumulateOrders = False


Condicion1 = (High[2] >= High[1] AND Low[2] <= Low[1])
Condicion2 = (High[2] <= High[1] AND Low[2] <= Low[1])
Condicion3 = (Close[1] > Open[1])
Condicion4 = (Close[1] < Open[1])
IF (Condition1 AND Condicion3) THEN
BUY 1 Share AT MARKET
ENDIF
IF LONGONMARKET AND (BarIndex - TRADEINDEX) = 3 THEN
SELL 1 share AT MARKET
ENDIF
IF ( Condicion2 AND Condicion4) THEN
SELLSHORT 1 share AT MARKET
ENDIF
IF SHORTONMARKET AND (BarIndex - TRADEINDEX) = 3 THEN
EXITSHORT AT MARKET
ENDIF

56 / 73

An exo B: Apl icaciones prcticas

Estrategias de money management (gestin de capital)


Los resultados de un backtest pueden mejorarse sustancialmente adoptando reglas sofisticadas de
gestin de capital (money management).
Estas estrategias de gestin de capital suelen formalizarse en las martingalas, destinadas a optimizar
la esperanza matemtica de un sistema de trading (ganancia o prdida media por operacin). Esto
implica poder estimar previamente la probabilidad de que una operacin resulte en ganancia, y el
importe del beneficio.
Con la finalidad de implementar una martingala, puede resultar til codificar directamente en su
sistema de trading las rdenes stop de proteccin, de objetivos y de inactividad, as como algunas
subestrategias que permitan la gestin dinmica del tamao de posiciones.

Stop de proteccin (stop loss) & objectivos


Para ms informacin sobre los stops de proteccin, stops dinmicos y stops de objetivos, le
emplazamos a consultar las secciones dedicadas a ellos en el presente manual.

Stops de inactividad
Este cdigo permite integrar un stop de inactividad en su sistema de trading. Recuerde definir las
condiciones de su stop, en este caso denominados 'InactivityStopLong' e 'InactivityStopShort'. En
el ejemplo descrito, el stop se activa tras 10 velas.
ONCE Count = 10
REM Seleccin del nmero de velas tras el cual la posicin se cerrar automticamente
IF ONMARKET AND (BARINDEX - TRADEINDEX + 1) > Count THEN
IF LONGONMARKET THEN
SELL AT MARKET
ENDIF
IF SHORTONMARKET THEN
EXITSHORT AT MARKET
ENDIF
ENDIF

57 / 73

An exo B: Apl icaciones prcticas

Acumulacin de rdenes Aadir rdenes a una posicin existente mediante un contador


de posicin
Aqu encontrar un ejemplo de acumulacin de rdenes para aumentar el tamao de su posicin.
Para acumular rdenes, introduzca el comando 'DEFPARAM CumulateOrders = True' al principio
del programa.
Este sistema de trading utiliza la primera condicin basada en el RSI para abrir la posicin inicial.
Se aaden acciones adicionales en cada vela en las que la apertura es superior al cierre previo,
hasta un mximo de 3.
Utilizamos 'Countofposition' para limitar la posicin mxima de la estrategia a 3.

DEFPARAM CumulateOrders = True


REM Comprar 1 cuando el RSI < 30 y no haya posiciones abiertas
IF RSI[14](Close) < 30 AND NOTONMARKET THEN
BUY 1 SHARES AT MARKET
ENDIF
REM Si se ha abierto una posicin larga y la apertura > al cierre de la vela anterior, compramos una cantidad
adicional hasta un mximo de 3
IF LONGONMARKET AND COUNTOFPOSITION < 3 AND OPEN> CLOSE[1] THEN
BUY 1 SHARES AT MARKET
ENDIF
REM Cuando el precio cruce a la baja una media mvil simple, se cierra la totalidad de la posicin
IF Close Crosses Under Average[14](Close) THEN
SELL AT MARKET
ENDIF

Con estas herramientas podemos abordar las martingalas. Les mostramos a continuacin algunas
de las ms conocidas. Estas tcnicas pueden aadirse a cualquier sistema de trading.

58 / 73

An exo B: Apl icaciones prcticas

La martingala clsica
La martingala clsica consiste en duplicar la posicin cuando se afronta una prdida, con la idea
de recuperarla en la siguiente transaccin. El mayor inconveniente de este sistema de trading es
que si se producen varias prdidas consecutivas, la posibilidad de duplicar la posicin se hace
cada vez menos factible. As, partiendo de un capital de p.ej. 1000, cinco prdidas sucesivas
requeriran 1000 x 32 = 32000 para continuar con el sistema de trading.
Los sistemas de trading derivados de esta martingala pueden ser ms adecuadas para la
operativa con acciones que con futuros o Forex, ya que la inversin inicial y el apalancamiento
suele ser ms importante en estos ltimos mercados. Para aplicarla, se integrar este cdigo en
las condiciones de entrada y de salida:

//***********Cdigo a insertar al principio del sistema de trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
REM Inicio con una posicin de 1
//*********************//
//***********Cdigo a insertar tras las instrucciones que cierran una posicin*********//
ExitIndex=BarIndex
//***********Cdigo a insertar al final del sistema de trading*********//
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
IF PositionPerf(1) < 0 THEN
OrderSize = OrderSize * 2
REM Si la ltima transaccin resulta en prdidas, duplicamos el tamao de la posicin
ELSIF PositionPerf(1) > 0 THEN
OrderSize = 1
REM Si la ltima transaccin resulta en ganancias, volvemos a una posicin de tamao 1
ENDIF
ENDIF
//*********************//
REM El tamao de la posicin queda definido por la variable OrderSize para el cdigo entero

59 / 73

An exo B: Apl icaciones prcticas

La gran martingala
La gran martingala es similar a la clsica, con la diferencia de que adems de duplicar la posicin
en cada prdida, se aade una unidad suplementaria.
Esta martingala es ms arriesgada que la clsica en caso de prdidas sucesivas, pero permite
aumentar significativamente las ganancias en caso contrario. Para aplicarla, se integrar este
cdigo en las condiciones de entrada y de salida:

//***********Cdigo a insertar al principio del sistema de trading*********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
REM Inicio con una posicin de 1
//*********************//
//***********Cdigo a insertar tras las instrucciones que cierran una posicin**********//
ExitIndex=BarIndex
//***********Cdigo a insertar al final del sistema de trading
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
IF PositionPerf(1) < 0 THEN

OrderSize = OrderSize * 2 + 1 // Si la ltima transaccin resulta perdedora, se duplica el


tamao de la posicin y aadimos 1
ELSIF PositionPerf(1) >= 0 THEN

OrderSize = 1 // Si la ltima transaccin resulta ganadora, volvemos a una posicin de 1


ENDIF
ENDIF
//*********************//
REM El tamao de la posicin queda definido por la variable OrderSize en el cdigo entero

60 / 73

An exo B: Apl icaciones prcticas

La Piquemouche
La Piquemouche es otra variante de la martingala clsica. En caso de prdida, se aumenta una
unidad el tamao de la posicin mientras se hayan producido menos de 3 prdidas consecutivas.
Cuando se acumulan ms de 3 prdidas seguidas, se duplica el tamao de la posicin. La primera
ganancia reinicia el tamao de la posicin, fijndolo nuevamente en 1.
Este sistema de trading es menos arriesgado que los dos anteriores, ya que retrasa el aumento del
tamao de la posicin hasta pasadas las 3 prdidas sucesivas. Para aplicarlo, se integrar este
cdigo en las condiciones de entrada y de salida:

//***********Cdigo a insertar al principio del sistema de trading**********//


ONCE OrderSize = 1
ONCE BadTrades = 0
ONCE ExitIndex = -2
REM Inicio con una posicin de 1
//*********************//
//***********Cdigo a insertar justo despus de cerrar una posicin**********//
ExitIndex=BarIndex
//*********** Cdigo a insertar al final del sistema de trading*********//
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
IF PositionPerf(1) < 0 THEN
BadTrades = BadTrades + 1
IF BadTrades < 3 THEN
//Si la ltima operacin resulta en prdidas y no se superan las 3 perdidas
// consecutivas, se aumenta en 1 unidad el tamao de la posicin

OrderSize = OrderSize + 1
ELSIF BadTrades MOD 3 = 0 THEN
//Si la ltima operacin resulta en prdidas y se acumulan ms de 3 prdidas
// consecutivas, se duplica el tamao de la prxima posicin
OrderSize = OrderSize * 2
ENDIF
ELSIF PositionPerf(1) >= 0 THEN
// Si la ltima operacin resulta ganadora, retomar posicin a tamao 1
OrderSize = 1
BadTrades = 0
ENDIF
ENDIF
//*********************//
REM El tamao de la posicin queda definido por la variable OrderSize en el cdigo entero

61 / 73

An exo B: Apl icaciones prcticas

La pirmide de Alembert
Concebida por Alembert (matemtico francs del siglo XVIII), esta martingala aumenta 1 unidad la
posicin en caso de prdida; en caso de ganancia, la disminuye de 1. Esta tcnica slo es
pertinente cuando se considere que las ganancias sucesivas disminuyen la probabilidad de que la
siguiente operacin resulte ganadora (y recprocamente, que una prdida aumente la posibilidad
de que la siguiente operacin resulte en ganancia). Para aplicarla, se integrar este cdigo en las
condiciones de entrada y de salida:

//***********Cdigo a insertar al principio del sistema de trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
//Inicio con una posicion de 1
//*********************//
//***********Cdigo a insertar justo al cerrar una posicin**********//
ExitIndex=BarIndex
//*********** Cdigo a insertar al final del sistema de trading*********//
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
IF PositionPerf(1) < 0 THEN
OrderSize = OrderSize + 1
ELSIF PositionPerf(1) >= 0 THEN
OrderSize = MAX(OrderSize - 1, 1)
ENDIF
ENDIF
//*********************//
REM El tamao de la posicin queda definido por la variable OrderSize en el cdigo entero

62 / 73

An exo B: Apl icaciones prcticas

La contra de Alembert
Este es un sistema de trading recproco de la pirmide homnima, ya que se disminuye el tamao
de la posicin en caso de prdida y se aumenta en caso de ganancia.
La tcnica implica la consideracin de que los resultados histricos son representativos de los
resultados futuros.
Para aplicarla, se integrar este cdigo en las condiciones de entrada y de salida:

//***********Cdigo a insertar al principio del sistema de trading**********//


ONCE OrderSize = 1
ONCE ExitIndex = -2
//Inicio con una posicin de 1
//*********************//
//***********Cdigo a insertar justo al cerrar una posicin*********//
ExitIndex=BarIndex
//*********** Cdigo a insertar al final del sistema de trading*********//
IF Barindex=ExitIndex+1 THEN
ExitIndex=0
IF PositionPerf(1) < 0 THEN
OrderSize = MAX(OrderSize - 1, 1)
ELSIF PositionPerf(1) >= 0 THEN
OrderSize = OrderSize + 1
ENDIF
ENDIF
//*********************//
REM El tamao de la posicin debe definirse en funcin de la variable OrderSize en el cdigo entero

63 / 73

Glosario

Glosario

A
CDIGO

SINTAXIS

FUNCIN

Abs

Abs(a)

Funcin matemtica 'Valor Absoluto'

AccumDistr

AccumDistr(price)

Designa la Acumulacin Distribucin clsica

ADX

ADX[N]

Indicador Average Directional Index

ADXR

ADXR[N]

Indicador Average Directional Index Rate

AND

a AND b

Operador lgico ET

AroonDown

AroonDown[P]

Designa el Aroon Down

AroonUp

AroonUp[P]

Designa el Aroon Up

Atan

Atan(a)

Funcin matemtica 'Arctangente'

AS

RETURN x AS
"ResultName"

Instruccin utilizada para atribuir un nombre a


una curva

AT

AT (price)

Designa la asociacin a un precio

Average

Average[N](price)

Media Mvil Aritmtica

AverageTrueRange

AverageTrueRange[N](price)

Designa la Media mvil con alisado de Wilder


del True Range

CDIGO

SINTAXIS

FUNCIN

BarIndex

BarIndex

Nmero de velas desde los primeros datos


cargados (para un sistema de trading en el
caso de ProBacktest o ProOrder, o en un
grfico en el caso de un indicador ProBuider).
Ver tambin: PreLoadBars.

BollingerBandWidth

BollingerBandWidth[N](price)

Ancho de banda de Bollinger

BollingerDown

BollingerDown[N](price)

Soporte de la banda de Bollinger

BollingerUp

BollingerUp[N](price)

Resistencia de la banda de Bollinger

BREAK

(FOR...DO...BREAK...NEXT)
ou
(WHILE...DO...BREAK...WEND)

Instruccin de salida forzada de bucle FOR o


WHILE

BUY

BUY (n) SHARES

Instruccin apertura posicin a largo (compra)

64 / 73

Glosario

C
CDIGO

SINTAXIS

FUNCIN

CALL

myResult=CALL myFunction

Llamada de funcin del usuario

CAPITAL

BUY x% CAPITAL

% del capital invertido en la posicin

CASH

BUY x CASH

Designa la cantidad en efectivo a invertir

CCI

CCI[N](price) ou CCI[N]

Da Commodity Channel Index

ChaikinOsc

ChaikinOsc[Ch1, Ch2](price)

Designa el oscilador de Chaikin

Chandle

Chandle[N](price)

Designa el Chande Momentum Oscillator

ChandeKrollStopUp

ChandeKrollStopUp[Pp, Qq,
X]

Stop de proteccin segn Chande y Kroll en


posicin compradora

ChandeKrollStopDown

ChandeKrollStopDown[Pp,
Qq, X]

Stop de proteccin segn Chande y Kroll en


posicin vendedora

Close

Close[N]

Designa el precio de cierre de la vela actual o


de n das previos

COLOURED

RETURN x
COLOURED(R,G,B)

Colorea una curva de un cierto color segn la


convencin RGB (slo indicadores)

COS

COS(a)

Funcin Coseno

COUNTOFLONGSHARES

COUNTOFLONGSHARES

Indica el nmero de posiciones largas que


tiene actualmente abiertas en el mercado

COUNTOFPOSITION

COUNTOFPOSITION

Calcula el nmero total de posiciones (a largo


o a corto) que tiene actualmente abiertas en el
mercado

COUNTOFSHORTSHARES COUNTOFSHORTSHARES

Indica el nmero de posiciones de venta a


corto actualmente abiertas en el mercado

CONTRACT

BUY 1 CONTRACT

Designa el nmero de contratos a comprar.


Equivalente de 'Shares'

Crosses Over

a Crosses Over b

Operador booleano que verifica que una curva


pase por encima de otra

Crosses Under

a Crosses Under b

Operador booleano que verifica que una curva


pase por debajo de otra

CUMSUM

CUMSUM(price)

Sumatorio de un precio desde el inicio del


histrico mostrado

CumulateOrders

DefParam
CumulateOrders=false

A estar configurado como falso, impide que un


cdigo refuerce la posicin y establezca que varias
rdenes entren al mercado en la misma direccin

CurrentDayOfWeek

CurrentDayOfWeek

Designa el da actual

CurrentHour

CurrentHour

Designa la hora actual

CurrentMinute

CurrentMinute

Designa el minuto actual

CurrentMonth

CurrentMonth

Designa el mes actual

CurrentSecond

CurrentSecond

Designa el segundo actual

CurrentTime

CurrentTime

Designa HoraMinuto actual

CurrentYear

CurrentYear

Designa el ao actual

CustomClose

CustomClose[N]

Constante configurable en la ventana de


propiedades al mostrar el grfico (por defecto,
cierre)

Cycle

Cycle(price)

indicador Cycle (en precio)

65 / 73

Glosario

D
CDIGO

SINTAXIS

FUNCIN

Date

Date[N]

Designa la fecha de cierre de la vela actual

Day

Day[N]

Da de cierre de la vela actual

Days

Days[N]

Contador de das desde 1970

DayOfWeek

DayOfWeek[N]

Designa el da de la semana durante el cual la


vela actual se ha cerrado

Dclose

Dclose(N)

Precio de cierre del ensimo da previo al de la


vela actual

DEFPARAM

DEFPARAM

Permite definir parmetros

DEMA

DEMA[N](price)

Doble Media Mvil Exponencial

Dhigh

Dhigh(N)

Precio mximo del ensimo da previo al de la


vela actual

DI

DI[N](price)

Designa el 'Demand Index' (Indice de la


Demanda)

DIminus

Diminus[N](price)

Designa el DI-

Diplus

Diplus[N](price)

Designa el DI+

Dlow

Dlow(N)

Precio mnimo del ensimo da previo al de la


vela actual

DO

Voir FOR et WHILE

Instruccin opcional de los bucles 'FOR' y WHILE


para introducir la accin de inicio de bucle

Dopen

Dopen(N)

Precio de apertura del ensimo da previo al


de la vela actual

DOWNTO

Voir FOR

Instruccin que se aplica sobre el bucle 'FOR'


para ordenar una lectura decreciente

DPO

DPO[N](price)

Designa el 'Detrented Price Oscillator'

CDIGO

SINTAXIS

FUNCIN

EaseOfMovement

EaseOfMovement[I]

Designa el indicador 'Ease of Movement'

ELSE

Voir IF/THEN/ELSE/ENDIF

Instruccin de llamada de la segunda


condicin a defecto de la primera salida de 'IF'

ELSEIF

Voir IF/THEN/ELSE/ENDIF

Contraccin de 'ELSE IF'

EMV

EMV[N]

Designa el indicador 'Ease of Movement Value'

ENDIF

Voir IF/THEN/ELSE/ENDIF

Instruccin a introducir al final del conjunto de


instrucciones condicionales

EndPointAverage

EndPointAverage[N](price)

Ultimo punto de Media Mvil

EXITSHORT

EXITSHORT x SHARES

Cierra una posicin a corto / a descubierto

Exp

Exp(a)

Funcin matemtica 'Exponencial'

ExponentialAverage

ExponentialAverage[N](price)

Media Mvil Exponencial

66 / 73

Glosario

F-G
CDIGO

SINTAXIS

FUNCIN

FOR/TO/NEXT

FOR i=n TO p DO NEXT

Bucle con i que vara de de n a p (n<p) o de p


an

FOR i=p DOWNTO n DO


NEXT
FlatAfter

DefParam FlatAfter =
HHMMSS

Cierra posiciones, anula las rdenes


pendientes y evita el lanzamiento de nuevas
rdenes tras el momento del da estipulado (en
horas, minutos y segundos)

FlatBefore

Defparam FlatBefore =
HHMMSS

Cierra posiciones, anula las rdenes


pendientes y evita el lanzamiento de nuevas
rdenes antes del momento del da estipulado
(en horas, minutos y segundos)

ForceIndex

ForceIndex(price)

Indicador 'Force Index', que determina quin


controla el mercado (vendedor, comprador)

CDIGO

SINTAXIS

FUNCIN

High

High[N]

Designa el mximo alcanzado en la vela actual


o durante las n velas anteriores

Highest

Highest[N](price)

Designa el mximo de un perodo sur un


horizonte temporal dado

HistoricVolatility

HistoricVolatility[N](price)

Designa la volatilidad histrica (o volatilidad


estadstica)

Hour

Hour[N]

Designa la hora de cierre de cada vela del


histrico

CDIGO

SINTAXIS

FUNCIN

IF/THEN/ENDIF

IF a THEN b ENDIF

Conjunto de instrucciones condicionales sin


segunda condicin

IF/THEN/ELSE/ENDIF

IF a THEN b ELSE c ENDIF

Conjunto de instrucciones condicionales

IntradayBarIndex

IntradayBarIndex[N]

Cuenta el nmero de velas en el grfico


intradiario

I-J-K

67 / 73

Glosario

L
CDIGO

SINTAXIS

FUNCIN

LIMIT

BUY AT x LIMIT

Genera orden Lmite

LinearRegression

LinearRegression[N](price)

Trazado de regresin linear

LinearRegressionSlope

LinearRegressionSlope[N]
(price)

Pendiente de la regresin linear

Log

Log(a)

Funcin matemtica 'logaritmo neperiano'

LONGONMARKET

LONGONMARKET

Indica si tiene actualmente posiciones abiertas


de COMPRA (largas) en el mercado

Low

Low[N]

Designa el mnimo alcanzado durante el perodo

Lowest

Lowest[N](price)

Designa el mnimo de un perodo dentro de un


horizonte temporal dado

Loss

SET STOP LOSS x

Permite fijar un stop loss a x unidades del nivel


de precio

%LOSS

SET STOP %LOSS x

Establece un stop loss a x% del precio de


entrada de la posicin

$LOSS

SET STOP $LOSS x

Establece un stop loss a x o $ (en la divisa


del instrumento)

Lot

BUY 1 LOT

Designa el nmero de lotes que se van a


comprar (equivale a 'SHARE')

CDIGO

SINTAXIS

FUNCIN

MACD

MACD[S,L,Si](price)

Designa al 'Moving Average Convergence


Divergence (MACD)' en histograma

MACDline

MACDLine[S,L,Si](price)

Designa la lnea del MACD

MARKET

BUY AT MARKET

Genera orden a precio de mercado, que ser


ejecutada a la apertura de la vela siguiente

MassIndex

MassIndex[N]

Indicador 'Mass Index' aplicado en N velas

Max

Max(a,b)

Funcin matemtica 'Mximo'

MedianPrice

MedianPrice

Media del precio mximo y del mnimo

Min

Min(a,b)

Funcin matemtica 'Mnimo'

Minute

Minute

Designa el minuto del instante del cierre de


cada vela del histrico

Mod

a Mod b

Funcin matemtica 'Resto del cociente


eucldeo' de a por b'

Momentum

Momentum[I]

Designa el Momentum (precio de cierre actual


precio de cierre de la ensima vela precedente)

MoneyFlow

MoneyFlow[N](price)

Designa el 'MoneyFlow entre -1 y 1'

MoneyFlowIndex

MoneyFlowIndex[N]

Designa el 'MoneyFlowIndex'

Month

Month[N]

Designa el mes de cierre de cada vela del histrico

68 / 73

Glosario

N
CDIGO

SINTAXIS

FUNCIN

NEXT

Ver FOR/TO/NEXT

Instruccin a introducir al final del bucle 'Para'


(FOR)

NextBarOpen

AT MARKET NextBarOpen

Orden a ejecutar en apertura de la vela


siguiente

NoCashUpdate

DEFPARAM
NoCashUpdate=true/false

Permite no actualizar el capital con las


ganancias/prdidas (slo Backtest)

NOT

NOT a

Operador lgico NO

CDIGO

SINTAXIS

FUNCIN

OBV

OBV(price)

Designa el 'On-Balance-Volume'

ONCE

ONCE VariableName =
VariableValue

Instruccin que precede a otra que deseamos


ejecutar una sola vez

ONMARKET

ONMARKET

Indica si tiene actualmente posiciones abiertas


en el mercado

Open

Open[N]

Designa el precio de apertura de la vela actual


o la de n das previos

OR

a OR b

Operador lgico 'O'

CDIGO

SINTAXIS

FUNCIN

PipValue

PipValue

Valor en /$ de un pip (o punto):


PipValue=Pointvalue

PipSize

PipSize

Tamao de un (o punto): PipSize=PointSize

PointValue

PointValue

Valor en /$ de un pip (o punto),


PipValue=Pointvalue

PointSize

PointSize

Tamao de un (o punto): PipSize=PointSize

PositionPerf

PositionPerf(n)

Indica el porcentaje de ganancias o prdidas


de la ensima posicin liquidada

PositionPrice

PositionPrice

Indica el precio medio de la posicin actual

PreLoadBars

DefParam PreLoadBars =
200

Establece la cantidad mxima de velas que


puedan cargarse de antemano para el clculo
de los indicadores utilizados en el sistema
automtico.

PriceOscillator

PriceOscillator[S,L](price)

Indicador 'Percentage Price oscillator'

PositiveVolumeIndex

PriceVolumeIndex(price)

Designa el indicador 'Positive Volume Index'

PVT

PVT(price)

Designa el indicador 'Price Volume Trend'

QUIT

QUIT

Instruccin para detener un sistema de trading

P-Q

69 / 73

Glosario

R
CDIGO

SINTAXIS

FUNCIN

R2

R2[N](price)

Designa el coeficiente R Cuadrado (error de


precios en la regresin linear)

Range

Range[N]

Devuelve el 'Range' (rango, diferencia entre el


precio mximo y mnimo de la vela actual)

REM

REM comment

Precede un comentario (el cdigo no lo toma


en cuenta, pero facilitan la lectura al usuario)

Repulse

Repulse[N](price)

Devuelve el indicador 'Repulse' (mide la fuerza


alcista y bajista de cada vela)

RETURN

RETURN Result

Instruccin que enva el resultado (slo


indicadores)

ROC

ROC[N](price)

Designa el 'Price Rate of Change'

RSI

RSI[N](price)

Designa el oscilador 'Relative Strength Index'

Round

Round(a)

Funcin matemtica 'Redondeo a la unidad'


(parte entera)

ROUNDEDUP

ROUNDEDUP

Redondea las cantidades hacia la unidad


superior

ROUNDEDDOWN

ROUNDEDDOWN

Redondea las cantidades hacia la unidad


superior

CDIGO

SINTAXIS

FUNCIN

SAR

SAR[At,St,Lim]

Designa el Parablico SAR

SARatdmf

SARatdmf[At,St,Lim](price)

Designa el Parablico SAR en el mdulo ATDMF

SELL

SELL (n) SHARES

Cierre de posicin a largo (venta)

SELLSHORT

SELLSHORT (n) SHARES

Apertura de posicin a corto / a descubierto

SET

SET

Permite generar una orden stop o limite

SET STOP

SET STOP (x)

Fija un stop a un precio x

SET LIMIT

SET LIMIT (x)

Fija una orden lmite a un precio x

SET TARGET

SET TARGET PROFIT X

Establece un objetivo a un precio x

SHARES

BUY (n) SHARES

Designa la cantidad de valores en una compra

SHORTONMARKET

SHORTONMARKET

Indica si tiene actualmente posiciones abiertas


de venta a descubierto en el mercado

Sin

Sin(a)

Funcin matemtica 'Seno'

Sgn

Sgn(a)

Funcin matemtica 'Signo de'

SMI

SMI[N,SS,DS](price)

Designa el ndice 'Estocstico Momentum'


(Stochastic Momentum Index)

SmoothedStochastic

SmoothedStochastic[N,K]
(price)

Designa un estocstico alisado

70 / 73

Glosario

Square

Square(a)

Funcin matemtica 'Cuadrado" (potencia 2)'

Sqrt

Sqrt(a)

Funcin matemtica 'Raz cuadrada'

STD

STD[N](price)

Funcin estadstica 'Desviacin Tpica'

STE

STE[N](price)

Funcin estadstica 'Error tpico'

Stochastic

Stochastic[N,K](price)

Lnea %K del Estocstico

STOP

AT (prix) STOP

Designa una orden a nivel de ejecucin

Summation

Summation[N](price)

Suma de un cierto precio de las N ltimas


velas

SuperTrend

SuperTrend[STF,N]

Designa el 'Super Trend'

CDIGO

SINTAXIS

FUNCIN

Tan

Tan(a)

Funcin matemtica 'Tangente'

Target

SET TARGET PROFIT x

Permite fijar un objetivo (target) a un precio x

TEMA

TEMA[N](price)

Media Mvil Exponencial Triple

THEN

Voir IF/THEN/ELSE/ENDIF

Instruccin que sigue la primera condicin del


conjunto condicional 'IF'

Ticksize

Ticksize

Ofrece el 'ticksize' del instrumento (variacin


de precio mnima posible)

Time

Time[N]

Ofrece la hora en formato HHMMSS

TimeSeriesAverage

TimeSeriesAverage[N](price)

Media Mvil de las series temporales

TO

Voir FOR/TO/NEXT

Instruccin 'hasta' en el bucle 'Para' (FOR)

Today

Today

Fecha actual en formato YYYYMMDD

TomorrowOpen

AT (prix) TomorrowOpen

Orden ejecutada a la apertura del da siguiente

TotalPrice

TotalPrice[N]

(cierre + apertura + mximo + mnimo) / 4

TR

TR(price)

Designa el 'True Range'

TradeIndex

ENTRYINDEX(n)

Indica el ndice de la vela en la que se ejecut


la ensima ltima orden

TradePrice

TradePrice(n)

Indica el nivel de precio en el que se ejecut la


ensima ltima orden

Trailing

SET STOP TRAILING x

Permite fijar un stop dinmico a x unidades del


precio de entrada de la posicin

%TRAILING

SET STOP %TRAILING x

Permite fijar un stop dinmico a x% del precio


de entrada de la posicin

$TRAILING

SET STOP $TRAILING x

Permite fijar un stop dinmico a x , $ (en la


divisa del instrumento)

TriangularAverage

TriangularAverage[N](price)

Media Mvil Triangular

TRIX

TRIX[N](price)

Triple Media Mvil Exponencial

TypicalPrice

TypicalPrice[N]

Designa el precio Tpico (Media de mximo,


mnimo y cierre)

71 / 73

Glosario

U
CDIGO

SINTAXIS

FUNCIN

Undefined

a = Undefined

Permite dejar una variable indefinida (es un


tipo de variable)

CDIGO

SINTAXIS

FUNCIN

Variation

Variation(price)

Da la diferencia entre el cierre de la vspera y


el cierre actual en %

Volatility

Volatility[S, L]

Designa la volatilidad de Chaikin

Volume

Volume[N]

Designa el volumen

VolumeOscillator

VolumeOscillator[S,L]

Designa el oscilador de volumen

VolumeROC

VolumeROC[N]

Designa el volumen del 'Rate Of Change'


(ROC)

CDIGO

SINTAXIS

FUNCIN

WeightedAverage

WeightedAverage[N](price)

Designa la Media Mvil Ponderada

WeightedClose

WeightedClose[N]

Media ponderada entre el precio de cierre,


mximo y mnimo.

WEND

Voir WHILE/DO/WEND

Instruccin a introducir al final del bucle 'While/


Do/Whend' (mientras)

WHILE/DO/WEND

WHILE (condition) DO
(action) WEND

Bucle 'Mientras'

WilderAverage

WilderAverage[N](price)

Da la Media Mvil de Wilder

Williams

Williams[N](close)

Calcula el '%R de Williams'

WilliamsAccumDistr

WilliamsAccumDistr(price)

Indicador 'Acumulacin/Distribucin de
Williams'

CDIGO

SINTAXIS

FUNCIN

XOR

a XOR b

Operador lgico exclusivo 'O'

72 / 73

Glosario

Y
CDIGO

SINTAXIS

FUNCIN

Year

Year[N]

Da el ao en formato YYYY

Yesterday

Yesterday[N]

Da el da anterior en formato YYYMMDD

CDIGO

SINTAXIS

FUNCIN

ZigZag

ZigZag[Zr](price)

Designa los 'Zig-Zag' de la teora de las ondas


de Eliott

ZigZagPoint

ZigZagPoint[Zp](price)

Designa los 'Zig-Zag' de la teora de las ondas


de Eliott calculadas a Zp puntos

Operadores
CDIGO

FUNCIN

Operador de suma

Operador de sustraccin

Operador de multiplicacin

Operador de divisin

Operador de igualdad

<>

Operador de diferencia

<

Operador de inferioridad estricta

>

Operador de superioridad estricta

<=

Operador de inferioridad

>=

Operador de superioridad

//

Introduce una lnea de comentario

73 / 73

www.prorealtime.com

También podría gustarte