<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Programando Forex</title>
	
	<link>http://www.programandoforex.com</link>
	<description>Algoritmos para ganar en la Bolsa</description>
	<lastBuildDate>Thu, 04 Mar 2010 10:55:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/programandoforex/feedburner" /><feedburner:info uri="programandoforex/feedburner" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>programandoforex/feedburner</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Curso de programación MetaTrader MQL4</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/bSEXbmvbvUM/</link>
		<comments>http://www.programandoforex.com/curso-programacion-metatrader-mql4/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 10:53:21 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[MQL4]]></category>
		<category><![CDATA[curso]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=708</guid>
		<description><![CDATA[
Si quieres programar tus propios Expert Advisors e indicadores puedes aprender el lenguaje MQL de la plataforma MetaTrader con nosotros.
Los días 11 y 12 de marzo haremos en Madrid el primer curso presencial de programación para MetaTrader. Toda la información aquí.

Temario del curso
Bloque 1:


Introducción al diseño de sistemas automáticos de trading.

Ciclo de desarrollo, evaluación y [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-645" title="elearning" src="http://www.programandoforex.com/wp-content/uploads/2009/09/elearning.jpg" alt="elearning" width="330" height="300" /></p>
<p>Si quieres programar <strong>tus propios Expert Advisors e indicadores</strong> puedes aprender el lenguaje MQL de la plataforma MetaTrader con nosotros.</p>
<p>Los días 11 y 12 de marzo haremos en Madrid el <strong>primer curso presencial de programación para MetaTrader.</strong> <a href="http://www.sistemasinversores.com/cursos/">Toda la información aquí</a>.<span id="more-708"></span></p>
<h2></h2>
<h2>Temario del curso</h2>
<p><span style="text-decoration: underline;"><span style="font-size: medium;"><strong>Bloque 1:</strong></span></span></p>
<p><strong><br />
</strong></p>
<p><strong>Introducción al diseño de sistemas automáticos de trading.</strong></p>
<ul>
<li>Ciclo de desarrollo, evaluación y optimización de sistemas de trading y las herramientas para llevarlo a cabo.</li>
</ul>
<p><strong><br />
</strong></p>
<p><strong>La estructura de los programas de MetaTrader.</strong></p>
<ul>
<li>El flujo de programa: init, deinit, start.</li>
<li>Creación de indicadores y scripts.</li>
</ul>
<p><strong><br />
</strong></p>
<p><strong>Operaciones con Expert Advisor.</strong></p>
<ul>
<li>Obtener señales de medias móviles y abrir operaciones.</li>
</ul>
<p><strong>Practica 1: </strong>Crearemos un indicador que señale los cruces de medias y lo utilizaremos en la primera versión del EA para abrir operaciones en largo y corto.</p>
<p><span style="text-decoration: underline;"><span style="font-size: medium;"><strong>Bloque 2:</strong></span></span></p>
<p><strong>Programar análisis técnico y cuantitativo.</strong></p>
<ul>
<li>Toma de datos de cualquier indicador con  iCustom + DataWindow.</li>
<li>Múltiples marcos temporales.</li>
</ul>
<p><strong>Practica 2</strong><strong>: </strong>La segunda versión del EA aprovechará el cruce de medias para detectar la tendencia principal en varios marcos temporales. Utilizará otros indicadores como señal de apertura y cierre de operación en dirección de la tendencia.<span style="text-decoration: underline;"><br />
</span></p>
<p><span style="text-decoration: underline;"><br />
</span></p>
<p><span style="text-decoration: underline;"><span style="font-size: medium;"><strong>Bloque 3:</strong></span></span></p>
<p><span style="font-size: medium;"><strong><br />
</strong></span></p>
<p><strong>Objetivos dinámicos.</strong></p>
<ul>
<li>Programar soportes, resistencias, pivot points y retrocesos de fibonacci.</li>
<li>Calcular TakeProfit y Trailing Stop dinámicos.</li>
</ul>
<p><strong><br />
Gestión de los Expert Advisors.</strong></p>
<ul>
<li>Cerrar órdenes del EA selectivamente.</li>
<li>Evitar conflictos entre EAs.</li>
<li>Soluciones a fallos de conexión, corriente eléctrica, bloqueos, etc.</li>
</ul>
<p><strong>Practica 3</strong><strong>: </strong>La tercera versión del EA utilizará los retrocesos de fibonacci (y otros indicadores como ATR o Bollinger Bands) para fijar sus objetivos de TakeProfit. Se aplicarán varios tipos de Trailing Stop.</p>
<p><span style="text-decoration: underline;"><span style="font-size: medium;"><strong>Bloque 4:</strong></span></span></p>
<p><span style="font-size: medium;"><strong><br />
</strong></span></p>
<p><strong>Gestión del dinero.</strong></p>
<ul>
<li>Tamaño de posición dinámico.</li>
<li>Martingala y antimartingala.</li>
<li>Relación Premio/Riesgo, equity, balance, etc.</li>
</ul>
<p><strong><br />
</strong></p>
<p><strong>Horario de operaciones.</strong></p>
<ul>
<li>Tramos de operación, limites diarios, evitar fundamentales.</li>
</ul>
<p><strong>Resolución de dudas.</strong></p>
<p><strong>Practica 4</strong><strong>: </strong>La cuarta versión del EA aplicará gestión del dinero seleccionando el tamaño de operación más adecuado en cada momento. Aplicará horarios de operación para filtrar mercados y noticias.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_IBNkTwI3XVPzBA8_Q5n-AApH7Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/_IBNkTwI3XVPzBA8_Q5n-AApH7Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_IBNkTwI3XVPzBA8_Q5n-AApH7Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/_IBNkTwI3XVPzBA8_Q5n-AApH7Q/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/bSEXbmvbvUM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/curso-programacion-metatrader-mql4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/curso-programacion-metatrader-mql4/</feedburner:origLink></item>
		<item>
		<title>Libros de trading</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/erlol_Ea60M/</link>
		<comments>http://www.programandoforex.com/libros-de-trading/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 17:24:16 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Bases de Forex]]></category>
		<category><![CDATA[análisis técnico]]></category>
		<category><![CDATA[fixed ratio]]></category>
		<category><![CDATA[libros]]></category>
		<category><![CDATA[money management]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=691</guid>
		<description><![CDATA[
El último mes hemos estado muy ocupados leyendo nuevos libros de trading, de ahí que hayamos publicado menos artículos. Nos gustaría compartir estas tres joyas de la literatura del trading:

Este primer libro es un manual imprescindible para abordar el análisis técnico con rigor científico. El autor nos enseña a aplicar la inferencia estadística para seleccionar [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/12/libros-trading.jpg" alt="libros-trading" title="libros-trading" width="470" height="425" class="aligncenter size-full wp-image-696" /></p>
<p>El último mes hemos estado muy ocupados leyendo nuevos libros de trading, de ahí que hayamos publicado menos artículos. Nos gustaría compartir estas tres joyas de la literatura del trading:</p>
<p><center><iframe src="http://rcm-uk.amazon.co.uk/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=tradinautoma-21&#038;o=2&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=0M5A6TN3AXP2JHJBWT02&#038;asins=0470008741" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></center></p>
<p>Este primer libro es un manual imprescindible para abordar el análisis técnico con rigor científico. El autor nos enseña a aplicar la inferencia estadística para seleccionar las señales de los sistemas.</p>
<p><center><iframe src="http://rcm-uk.amazon.co.uk/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=tradinautoma-21&#038;o=2&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=0M5A6TN3AXP2JHJBWT02&#038;asins=0470128011" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></center></p>
<p>El libro de Pardo es fundamental para todo el que esté interesado en el trading automático. Un libro autocontenido que aborda cada punto de la fase de desarrollo de una estrategia automática. Pardo nos regala su Walk Forward Analysis, un método para calibrar a la perfección la relación riesgo/beneficio de cada estrategia. Según él ninguna estrategia de trading debería utilizarse sin aplicar antes el WFA.</p>
<p><center><iframe src="http://rcm-uk.amazon.co.uk/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=tradinautoma-21&#038;o=2&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=0M5A6TN3AXP2JHJBWT02&#038;asins=0471316989" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></center></p>
<p>Por último, un libro sobre Money Management. La gestión del dinero tal vez sea el punto más importante en el diseño de una estrategia de trading, desde luego Ryan Jones así lo piensa. Nos explicará su método Fixed Ratio para levantar cuentas pequeñas rápidamente.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/YRMcj79lAGZXCsBZw1TGzlCZoUY/0/da"><img src="http://feedads.g.doubleclick.net/~a/YRMcj79lAGZXCsBZw1TGzlCZoUY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YRMcj79lAGZXCsBZw1TGzlCZoUY/1/da"><img src="http://feedads.g.doubleclick.net/~a/YRMcj79lAGZXCsBZw1TGzlCZoUY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/erlol_Ea60M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/libros-de-trading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/libros-de-trading/</feedburner:origLink></item>
		<item>
		<title>MetaTrader 5 Beta ya está disponible</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/QCc83oWI7rs/</link>
		<comments>http://www.programandoforex.com/metatrader-5/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 21:54:01 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[MetaTrader]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[MQL5]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=680</guid>
		<description><![CDATA[
Ya está disponible la beta pública de MetaTrader 5. Ha sido una larga espera y todavía no sabemos si valdrá la pena&#8230; Un primer vistazo rápido a la plataforma nos basta para saber que al menos visualmente todo sigue igual. Los iconos han cambiado sí, pero no han hecho un lavado de cara a fondo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/10/metatrader5.jpg" alt="metatrader5" title="metatrader5" width="470" height="300" class="aligncenter size-full wp-image-681" /></p>
<p>Ya está disponible la <a href="http://forum.mql4.com/26550">beta pública de MetaTrader 5</a>. Ha sido <a href="http://www.programandoforex.com/metatrader-5-mql5/">una larga espera</a> y todavía no sabemos si valdrá la pena&#8230; Un primer vistazo rápido a la plataforma nos basta para saber que al menos visualmente todo sigue igual. Los iconos han cambiado sí, pero no han hecho un lavado de cara a fondo de la interfaz.</p>
<p>Pero eso no nos preocupa, lo importante son los cambios en el lenguaje de programación MQL5. Supuestamente la principal mejora iba a ser el soporte del paradigma orientado a objetos, de un <a href="http://www.programandoforex.com/debugging-eliminar-errores-mql/">debugger</a> serio (o no serio, pero un <a href="http://www.programandoforex.com/debugging-eliminar-errores-mql/">debugger</a> al menos) nadie ha dicho nada y por lo demás solo se escuchan críticas desfavorables a los cambios que han podido probar los afortunados que fueron elegidos para probar la beta privada (liberada en la fecha simbólica 09/09/09).</p>
<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/10/enRuso.jpg" alt="enRuso" title="enRuso" width="470" height="300" class="aligncenter size-full wp-image-682" /></p>
<p>Nosotros hemos descargado ya MetaTrader5 y probado el <a href="http://www.programandoforex.com/primer-expert-advisor-metatrader/">editor de estrategias</a>&#8230; el principal chasco ha sido encontrar la documentación en ruso, un error imperdonable y una falta de profesionalidad tremenda para una plataforma utilizada por miles de inversores en todo el mundo.</p>
<p>En principio nuestra impresión no es buena, pero tampoco queremos minusvalorar los esfuerzos que hacen desde MetaQuotes. Nuestra principal crítica sería que parece que no han escuchado a la amplísima comunidad de desarrolladores&#8230; pero eso lo comprobaremos cuando se dignen a traducir la documentación.</p>
<p>Mientras tanto todavía quedan muchos meses para que liberen la versión oficial estable y muchos más de periodo de convivencia con MetaTrader 4 por parte de los brokers.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_qfWFYoT_JrtGEVfBoalZGpC2C0/0/da"><img src="http://feedads.g.doubleclick.net/~a/_qfWFYoT_JrtGEVfBoalZGpC2C0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_qfWFYoT_JrtGEVfBoalZGpC2C0/1/da"><img src="http://feedads.g.doubleclick.net/~a/_qfWFYoT_JrtGEVfBoalZGpC2C0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/QCc83oWI7rs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/metatrader-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/metatrader-5/</feedburner:origLink></item>
		<item>
		<title>Indicador de horarios de operación</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/QnRth6ZAPm0/</link>
		<comments>http://www.programandoforex.com/indicador-de-horarios-de-operacion/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 15:44:40 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Indicadores]]></category>
		<category><![CDATA[horarios]]></category>
		<category><![CDATA[indicador]]></category>
		<category><![CDATA[mercados]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=671</guid>
		<description><![CDATA[
Habitualmente utilizamos tramos horarios para permitir a los Expert Advisor abrir operaciones o no. Normalmente hay horas en las que es mejor no operar ciertos cruces, ya sea por peligro de movimientos muy bruscos o por que son horas de mercados horizontales donde lo único que podemos conseguir en tocar los Stops una y otra [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/10/reloj.jpg" alt="reloj" title="reloj" width="470" height="381" class="aligncenter size-full wp-image-672" /></p>
<p>Habitualmente utilizamos tramos horarios para permitir a los Expert Advisor abrir operaciones o no. Normalmente hay horas en las que es mejor no operar ciertos cruces, ya sea por peligro de movimientos muy bruscos o por que son horas de mercados horizontales donde lo único que podemos conseguir en tocar los Stops una y otra vez.</p>
<p>A continuación encontraréis un indicador que muestra un histograma con franjas verdes y rojas en función de si la barra está dentro del horario de mercado especificado o no.</p>
<p>En MQL4 las funciones para manejar tiempo y fechas son algo engorrosas&#8230; El código central del indicador es la función que calcula si estamos o no dentro de horario:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> 
timeWindow<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> barra<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
<span style="color: #666666;">// Determina si estamos en horario de operación y lo muestra con un histograma de semáforo.</span>
<span style="color: #666666;">// Tenemos hasta 3 ventanas junto con límites en los extremos del lunes y viernes.</span>
&nbsp;
&nbsp;
   <span style="color: #666666;">// Llamo oTime al tiempo en segundos desde 00:00 de un datetime.</span>
&nbsp;
   <span style="color: #666666;">// Calcular oTime de la barra i</span>
   <span style="color: #666666;">// A partir del número de barra, obtenemos su hora y minutos, componemos la hora en una cadena y obtenemos los segundos desde 00:00 para esa hora.</span>
   <span style="color: #0000ff;">int</span> horaBarra <span style="color: #000080;">=</span> TimeHour<span style="color: #008000;">&#40;</span>Time<span style="color: #008000;">&#91;</span>barra<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> minutoBarra <span style="color: #000080;">=</span> TimeMinute<span style="color: #008000;">&#40;</span>Time<span style="color: #008000;">&#91;</span>barra<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   string tiempoBarraCadena <span style="color: #000080;">=</span> horaBarra <span style="color: #000040;">+</span> <span style="color: #FF0000;">&quot;:&quot;</span> <span style="color: #000040;">+</span> minutoBarra<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> oTimeBarra <span style="color: #000080;">=</span> StrToTime<span style="color: #008000;">&#40;</span>tiempoBarraCadena<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #666666;">// Calcular oTime del tiempo Inicio. Ajustamos un periodo.</span>
   <span style="color: #0000ff;">int</span> oTimeIni <span style="color: #000080;">=</span> StrToTime<span style="color: #008000;">&#40;</span>Window_Ini<span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span>Period<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">60</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #666666;">// Calcular oTime del tiempo Fin. Ajustamos un periodo.</span>
   <span style="color: #666666;">// Sabemos que una ventana traspasa las 24 horas, ej. de 10:00 a 01:00, porque oTimeFin &lt; oTimeIni. Y le sumamos 24 horas a oTimeFin.</span>
   <span style="color: #0000ff;">int</span> oTimeFin <span style="color: #000080;">=</span> StrToTime<span style="color: #008000;">&#40;</span>Window_Fin<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>Period<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">60</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #666666;">//if(oTimeFin &lt; oTimeIni) oTimeFin += 86400; // 60s * 60m * 24H</span>
&nbsp;
&nbsp;
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>oTimeFin <span style="color: #000080;">&lt;</span> oTimeIni<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>oTimeBarra <span style="color: #000080;">&gt;</span> oTimeIni<span style="color: #008000;">&#41;</span> oTimeFin <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">86400</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 60s * 60m * 24H</span>
      <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>oTimeBarra <span style="color: #000080;">&lt;</span> oTimeIni<span style="color: #008000;">&#41;</span> oTimeIni <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">86400</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span>
&nbsp;
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>oTimeIni <span style="color: #000080;">&lt;</span> oTimeBarra <span style="color: #000040;">&amp;&amp;</span> oTimeBarra <span style="color: #000080;">&lt;</span> oTimeFin<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Y a continuación tenéis el indicador para descargar en dos versiones, una con un solo tramo horario (para facilitar el estudio del código) y otro un poquito más avanzado que permite utilizar hasta tres tramos de operación.</p>
<ul>
<li><a href='http://www.programandoforex.com/wp-content/uploads/2009/10/TimeWindows.mq4'>TimeWindows</a></li>
<li><a href='http://www.programandoforex.com/wp-content/uploads/2009/10/TimeWindowsTriple.mq4'>TimeWindowsTriple</a></li>
</ul>
<p>Como siempre, ya sabéis cualquier duda podéis comentarla en el foro.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/oXh9et33Wluj-tkranqgoMlWDUk/0/da"><img src="http://feedads.g.doubleclick.net/~a/oXh9et33Wluj-tkranqgoMlWDUk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/oXh9et33Wluj-tkranqgoMlWDUk/1/da"><img src="http://feedads.g.doubleclick.net/~a/oXh9et33Wluj-tkranqgoMlWDUk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/QnRth6ZAPm0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/indicador-de-horarios-de-operacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/indicador-de-horarios-de-operacion/</feedburner:origLink></item>
		<item>
		<title>Aprender a invertir en Forex</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/IFZMMIwIEvM/</link>
		<comments>http://www.programandoforex.com/aprender-a-invertir-en-forex/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 11:26:15 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Bases de Forex]]></category>
		<category><![CDATA[aprender]]></category>
		<category><![CDATA[curso]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=664</guid>
		<description><![CDATA[
Nuestros patrocinadores de Sistemas Inversores ofrecen ahora un curso presencial para aprender a invertir en Forex (y en los mercados financieros en general). La idea del curso es que para hacer buenos sistemas automáticos antes hay que tener una buena estrategia o la capacidad de desarrollar uno mismo las suyas propias. 
El curso se imparte [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/10/cursotrading.jpg" alt="cursotrading" title="cursotrading" width="470" height="268" class="aligncenter size-full wp-image-665" /></p>
<p>Nuestros patrocinadores de <a href="http://www.sistemasinversores.com">Sistemas Inversores</a> ofrecen ahora un curso presencial para <a href="http://www.sistemasinversores.com/curso-de-trading-profesional/">aprender a invertir en Forex</a> (y en los mercados financieros en general). La idea del curso es que para hacer buenos sistemas automáticos antes hay que tener una buena estrategia o la capacidad de desarrollar uno mismo las suyas propias. </p>
<p>El curso se imparte en cinco días con sesiones intensivas, los dos últimos días se hace live trading para ver cómo funcionan los conocimientos aprendidos en los tres primeros días&#8230; Un <a href="http://www.sistemasinversores.com/curso-de-trading-profesional/">curso de forex</a> muy interesante y sin duda una buena inversión.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/3w9EsZv2EmFSvL3SJpA2Jo5MU_0/0/da"><img src="http://feedads.g.doubleclick.net/~a/3w9EsZv2EmFSvL3SJpA2Jo5MU_0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3w9EsZv2EmFSvL3SJpA2Jo5MU_0/1/da"><img src="http://feedads.g.doubleclick.net/~a/3w9EsZv2EmFSvL3SJpA2Jo5MU_0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/IFZMMIwIEvM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/aprender-a-invertir-en-forex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/aprender-a-invertir-en-forex/</feedburner:origLink></item>
		<item>
		<title>Optimización y backtesting</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/TjmMovBv-3A/</link>
		<comments>http://www.programandoforex.com/optimizacion-y-backtesting/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 20:38:17 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Expert Advisors EA]]></category>
		<category><![CDATA[backtesting]]></category>
		<category><![CDATA[optimización]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=605</guid>
		<description><![CDATA[

Para obtener los mejores resultados de nuestro EA necesitamos conocer los parámetros óptimos para cada mercado, los backtesting nos permiten probar nuestra estrategia en históricos de precios que llegan hasta años en tan solo unos minutos.
Nuestra plataforma necesitará los datos históricos de precios para utilizarlos en el test. Abrimos el Centro de Historiales en el [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-605"></span><!--noteaser--></p>
<p><img class="aligncenter size-full wp-image-624" title="optimizar" src="http://www.programandoforex.com/wp-content/uploads/2009/09/optimizar.jpg" alt="optimizar" width="470" height="349" /></p>
<p>Para obtener los mejores resultados de nuestro EA necesitamos conocer los parámetros óptimos para cada mercado, los backtesting nos permiten probar nuestra estrategia en históricos de precios que llegan hasta años en tan solo unos minutos.</p>
<p>Nuestra plataforma necesitará los datos históricos de precios para utilizarlos en el test. Abrimos el <strong>Centro de Historiales</strong> en el menú <strong>Herramientas » Centro de Historiales</strong>, o pulsando <strong>F2</strong>. Encontraremos el histórico de precios de multitud de instrumentos. Desde aquí podemos descargarlos todos aunque realmente no es necesario pues como veremos la consola de backtesting lo hace automáticamente por cada combinación de timeframe e instrumento que utilicemos (por ejemplo EURUSD 15M).</p>
<p>La consola de backtesting (Prueba de estrategia) de MetaTrader nos permite probar miles de combinaciones de configuraciones de Expert Advisors. Sin embargo las optimizaciones aun cuando muestren resultados positivos no implican garantía, <strong>solo pueden ser estimadas como una probabilidad mayor de obtener beneficios</strong>. Las condiciones del mercado son dinámicas y van cambiando, por lo tanto los EA deben ser reoptimizados cada cierto tiempo.</p>
<p><strong>Optimización</strong></p>
<p>Para optimizar un EA abrimos la consola de backtesting desde <strong>Ver » Prueba de estrategia</strong>, o pulsando Ctrl+R. A continuación:</p>
<ol>
<li>Seleccionamos el EA en el menú desplegable <strong>Asesor Experto</strong>.</li>
<li>El instrumento en el menú desplegable <strong>Símbolo</strong>.</li>
<li>El periodo de tiempo en el menú desplegable <strong>Período</strong>.</li>
<li>En Modelo podemos elegir <strong>Sólo precios de apertura</strong> generalmente o <strong>Cada tick</strong> para una mayor precisión (tardará mucho más tiempo y no todos los EA lo necesitan).</li>
<li>Marcaremos la casilla <strong>Utilizar datos</strong> y a continuación establecemos los rangos de fecha.</li>
<li>El modo visual se activa en la casilla <strong>Modo visual</strong>, nos permite ver la simulación con controles de avance rápido y pausa.</li>
<li>Finalmente marcamos la casilla <strong>Optimización</strong> y hacemos click en el botón <strong>Propiedades del experto</strong> para configurarlo.</li>
</ol>
<p>Nos encontramos un menú con tres pestañas: <strong>Prueba, Entradas y Optimización</strong>.</p>
<p>En la pestaña Entradas encontraremos para cada parámetro del EA cuatro columnas: <strong>Valor, Iniciar, Paso y Detener</strong>. Junto a cada parámetro hay una casilla para marcar si queremos optimizarlo o dejarlo fijo. Si dejamos fijo el parámetro utilizará el valor de la columna Valor, si lo marcamos para optimizar utilizará Iniciar, Paso y Detener.</p>
<p><img class="aligncenter size-full wp-image-615" title="optimizacion" src="http://www.programandoforex.com/wp-content/uploads/2009/09/optimizacion.jpg" alt="optimizacion" width="470" height="255" /></p>
<p>Estas tres columnas determinan para cada parámetro qué optimizaciones se realizarán. Supongamos que nuestro EA utiliza una media móvil simple SMA, esta media tiene entre sus parámetros el periodo (número de barras sobre la que se aplica), optimizamos este parámetro introduciendo, <strong>Iniciar: 10; Paso: 5; Detener: 100. </strong>Esto hará que el optimizador haga pruebas con el periodo de la media tomando los valores <strong>10, 15, 20, 25, 30, 35&#8230; hasta 100</strong>.  Como se ve <strong>Iniciar</strong> es el primer valor que tomamos, <strong>Detener</strong> es el límite para las pruebas y <strong>Paso</strong> es el incremento.</p>
<p>El resto de pestañas, <strong>Prueba y Optimización</strong> configuran otros parámetros interesantes para el test como son el depósito inicial, el objetivo a optimizar (riesgo, beneficio, drawdown, etc) y algunas restricciones como sólo operar compras y no ventas por ejemplo.</p>
<p>Tras seleccionar todos los parámetros que queremos optimizar pulsaremos el botón <strong>Inicio</strong>, el optimizador se pondrá a trabajar informándonos del número de optimizaciones totales que realizará, las que ya ha realizado, el tiempo que ha consumido y el estimado que le falta para terminar su cálculo. Las optimizaciones son lentas y están en función de la complejidad del EA y de la cantidad de parámetros a optimizar, es normal optimizar durante 1 hora o incluso más de un día. Una computadora potente con un procesador rápido y bastante memoria RAM libre aligerará sensiblemente el tiempo dedicado a las optimizaciones.</p>
<p><strong>Backtesting</strong></p>
<p>Al terminar la optimización podemos observar los resultados en la pestaña inferior Resultados de la optimización. Ordenamos los resultados en función de nuestras preferencias, Profit Factor, Profit, Total Trades, etc, y seleccionamos uno haciendo doble click. Automáticamente los parámetros de esa optimización quedan cargados en la columna Value de la consola de backtesting (si observamos la casilla Optimization se ha desmarcado) y podemos proceder a hacer backtesting de esa optimización pulsando el botón Start.</p>
<p>Una vez terminado el backtesting podemos observar el gráfico de rendimiento en la pestaña Graph y el informe final en la pestaña Report.</p>
<p>Para estimar la calidad de un EA tenemos que entender los resultados de su backtesting, es tentador observar el beneficio total obtenido pero este dato por si solo no es válido, un EA con gran beneficio a costa de un alto riesgo puede no ser tan conveniente como otro EA con beneficios más modestos y riesgo mínimo.</p>
<p>Expected Payoff: Este ratio muestra la ganancia esperada para cada operación que abrimos. Si multiplicamos el total de operaciones abiertas por el Expected Payoff obtendremos el o beneficio total neto (Total net profit ).</p>
<p>Profit Factor: El cociente entre el beneficio bruto (Gross profit) y la pérdida bruta (Gross loss). Un cociente por encima de 1 es necesario para un EA rentable, sin embargo es deseable acercarse al 2 y por supuesto superarlo, un cociente de 2 significa que el EA gana el doble de lo que pierde con sus operaciones.</p>
<p><strong>Análisis de DrawDown</strong></p>
<p>Un vistazo a la gráfica de equidad/balance sirve para hacer una primera aproximación al análisis de DrawDown. Una curva puntiaguda con picos y valles muy marcados es es resultado de un EA muy volatil que puede conseguir grandes beneficios en una racha para pasar a continuación a perderlos todos de golpe e incluso vaciar la cuenta. Por el contrario una curva suave, sin grande altibajos, es indicadora de un EA estable que afianza sus ganancias de forma continuada.</p>
<p><img class="aligncenter size-full wp-image-617" title="ea-volatil" src="http://www.programandoforex.com/wp-content/uploads/2009/09/ea-volatil.gif" alt="ea-volatil" width="470" height="285" /></p>
<p><img class="aligncenter size-full wp-image-618" title="ea-estable" src="http://www.programandoforex.com/wp-content/uploads/2009/09/ea-estable.gif" alt="ea-estable" width="470" height="282" /></p>
<p>Para cuantificar el análisis observaremos los siguientes parámetros:</p>
<ol>
<li>Absolute Drawdown: La diferencia entre el depósito inicial y el valor más bajo del balance.</li>
<li>Maximal Drawdown: Es la mayor diferencia dada durante el histórico entre un pico y su valle.</li>
</ol>
<p>El Maximal Drawdown va creciendo durante la operativa, en el siguiente gráfico podemos ver la progresión, el valor final está señalado por la flecha gruesa:</p>
<p><img class="aligncenter size-full wp-image-619" title="drawdown" src="http://www.programandoforex.com/wp-content/uploads/2009/09/drawdown.png" alt="drawdown" width="470" height="235" /></p>
<p>La calidad del modelado es un factor importante a la hora de validar un backtesting. Para cuantificarlo observaremos:</p>
<p>Bar in test: Número de barras contadas en la prueba.<br />
Ticks modelled: Número de ticks (cambio de cotización) utilizados en la prueba.<br />
Modelling quality: Calidad del modelo en porcentaje, se calcula a partir de los datos utilizados (barras de minuto, cinco minutos, horas, etc).</p>
<p><img class="aligncenter size-full wp-image-621" title="modelado" src="http://www.programandoforex.com/wp-content/uploads/2009/09/modelado.png" alt="modelado" width="470" height="181" /></p>
<p>Estas son algunas notas sobre el apasionante tema de la optimización&#8230; Si queréis más información podéis encontrarla en estos enlaces:</p>
<ul>
<li><a href="http://www.tradingsys.org/index.php?option=com_content&amp;task=view&amp;id=36&amp;Itemid=51">¿Cuándo reoptimizar?</a></li>
<li><a href="http://articles.mql4.com/479">How Not to Fall into Optimization Traps?</a></li>
<li><a href="http://championship.mql4.com/2008/news/376">Testing and Optimizing Expert Advisors</a></li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/VGyLFhMBYep4DvjnEtz4t77KRio/0/da"><img src="http://feedads.g.doubleclick.net/~a/VGyLFhMBYep4DvjnEtz4t77KRio/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VGyLFhMBYep4DvjnEtz4t77KRio/1/da"><img src="http://feedads.g.doubleclick.net/~a/VGyLFhMBYep4DvjnEtz4t77KRio/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/TjmMovBv-3A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/optimizacion-y-backtesting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/optimizacion-y-backtesting/</feedburner:origLink></item>
		<item>
		<title>Automatizando el MagicNumber</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/jZbmykDOfJ0/</link>
		<comments>http://www.programandoforex.com/automatizando-el-magicnumber/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 09:35:27 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Expert Advisors EA]]></category>
		<category><![CDATA[MagicNumber]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=590</guid>
		<description><![CDATA[

El MagicNumber es un parámetro de las órdenes de MetaTrader que sirve para identificar qué EA la ejecutó. Cuando queremos probar un expert en varios gráficos ya sea en en distintos símbolos o en el mismo pero con distintos periodos de tiempo, hay que modificar el parámetro del EA y asignar un MagicNumber distinto a [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-590"></span><!--noteaser--></p>
<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/08/identificadores.jpg" alt="identificadores" title="identificadores" width="470" height="310" class="aligncenter size-full wp-image-592" /></p>
<p>El <strong>MagicNumber</strong> es un parámetro de las órdenes de MetaTrader que sirve para identificar qué <a href="http://www.programandoforex.com/primer-expert-advisor-metatrader/">EA</a> la ejecutó. Cuando queremos probar un expert en varios gráficos ya sea en en distintos símbolos o en el mismo pero con distintos periodos de tiempo, hay que modificar el parámetro del EA y asignar un MagicNumber distinto a cada gráfico. Vamos a ver cómo hacer esto de forma automática.</p>
<p>Es muy sencillo, símplemente necesitamos un identificador único para cada gráfico, buscando en las funciones de ventanas de MetaTrader nos encontramos con la función WindoHandle, manejador de ventanas.</p>
<blockquote><p>
int WindowHandle( string symbol, int timeframe)<br />
Returns the system window handler containing the given chart. If the chart of symbol and timeframe has not been opened by the moment of function calling, 0 will be returned.</p>
<p>Parameters:<br />
symbol   &#8211;   symbol name.<br />
timeframe   &#8211;   Timeframe. It can be any of Timeframe enumeration values. 0 means the current chart timeframe. </p>
<p>Sample:<br />
  int win_handle=WindowHandle(&#8221;USDX&#8221;,PERIOD_H1);<br />
  if(win_handle!=0)<br />
    Print(&#8221;Window with USDX,H1 detected. Rates array will be copied immediately.&#8221;);
</p></blockquote>
<p>Ya solo queda asignar al MagicNumber este identificador único:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> MagicNumber<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
   MagicNumber <span style="color: #000080;">=</span> WindowHandle<span style="color: #008000;">&#40;</span>Symbol<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   Comment<span style="color: #008000;">&#40;</span>MagicNumber<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Listo para utilizarlo en cada llamada a OrderSend que realice el EA. Como veis en la imagen cada nuevo gráfico sobre el que carguemos el EA mostrará en el Comment un MagicNumber único. De momento nos arreglamos así, esperemos que en el nuevo <a href="http://www.programandoforex.com/metatrader-5-mql5/">MetaTrader5</a> hayan contado ya con esto.</p>
<p><img src="http://www.programandoforex.com/wp-content/uploads/2009/08/mimagicnumber.jpg" alt="mimagicnumber" title="mimagicnumber" width="470" height="300" class="aligncenter size-full wp-image-595" /></p>
<p>Ahora bien, este código todavía no funciona correctamente del todo. Cuando hagamos <a href="http://www.programandoforex.com/optimizacion-y-backtesting/">backtesting de EA</a>s notaremos que no abre operaciones cuando desmarcamos la casilla visual y sí las abre cuando la marcamos ¿cómo es posible? pues como ya habréis adivinado al <a href="http://www.programandoforex.com/optimizacion-y-backtesting/">hacer un backtesting</a> desmarcando el modo visual la plataforma <a href="http://www.programandoforex.com/tag/metatrader">MetaTrader</a> <strong>NO crea una nueva ventana gráfica</strong> y por lo tanto estamos utilizando mal la función <strong>WindowHandle</strong> (¿manejar qué ventana?), hay que preveer esta situación y asignar un número mágico fijo para el caso en el que estemos haciendo un backtesting no visual. Lo haremos de la siguiente forma:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> MagicNumber<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>IsTesting<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> MagicNumber <span style="color: #000080;">=</span> WindowHandle<span style="color: #008000;">&#40;</span>Symbol<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>IsVisualMode<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> MagicNumber <span style="color: #000080;">=</span> <span style="color: #0000dd;">23</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Con este código ya no necesitamos estar siempre pendientes de asignar nuevos MagicNumber únicos a cada gráfico.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/zKa-rC2s78BrnuZmpT7fh28EKjo/0/da"><img src="http://feedads.g.doubleclick.net/~a/zKa-rC2s78BrnuZmpT7fh28EKjo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zKa-rC2s78BrnuZmpT7fh28EKjo/1/da"><img src="http://feedads.g.doubleclick.net/~a/zKa-rC2s78BrnuZmpT7fh28EKjo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/jZbmykDOfJ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/automatizando-el-magicnumber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/automatizando-el-magicnumber/</feedburner:origLink></item>
		<item>
		<title>Cómo instalar un EA</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/-cQd43ef2Go/</link>
		<comments>http://www.programandoforex.com/como-instalar-un-ea/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 18:00:34 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[MetaTrader]]></category>
		<category><![CDATA[EA]]></category>
		<category><![CDATA[indicador]]></category>
		<category><![CDATA[instalar]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=577</guid>
		<description><![CDATA[

Supongamos que tenemos un nuevo Expert Advisor para utilizar, el programa viene normalmente en dos ficheros: el de extensión mq4 es el código fuente y el otro con extensión ex4 es el programa ejecutable. El resto de programas de MetaTrader como indicadores y scripts vienen con el mismo par de extensiones.
Normalmente los EA utilizan indicadores [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-577"></span><!--noteaser--></p>
<p><img class="aligncenter size-full wp-image-582" title="carpetas" src="http://www.programandoforex.com/wp-content/uploads/2009/08/carpetas.jpg" alt="carpetas" width="468" height="370" /></p>
<p>Supongamos que tenemos un nuevo <a href="http://www.programandoforex.com/primer-expert-advisor-metatrader/">Expert Advisor</a> para utilizar, el programa viene normalmente en dos ficheros: el de extensión <strong>mq4</strong> es el código fuente y el otro con extensión <strong>ex4</strong> es el programa ejecutable. El resto de programas de MetaTrader como indicadores y scripts vienen con el mismo par de extensiones.</p>
<p>Normalmente <a href="http://www.programandoforex.com/utilizar-indicadores-en-un-ea-con-icustom/">los EA utilizan indicadores personalizados</a> para operar, es por eso que cuando adquirimos un nuevo programa normalmente vienen varios ficheros de distinto nombre. Lo vemos con un ejemplo: supongamos que tenemos un Expert Advisor que se llama FoxiDNA, sabemos que utiliza un indicador basado en las Bollinger Bands llamado BBands. Bien, estos son los ficheros de los que dispondremos:</p>
<ol>
<li>FoxiDNA.mq4</li>
<li>FoxiDNA.ex4</li>
<li>BBands.mq4</li>
<li>BBands.ex4</li>
</ol>
<p>Y como ya hemos dicho los que nos van a servir para operar son los ex4 (ejecutables). Tenemos que copiar los ficheros mq4 y ex4 en la carpeta del MetaTrader, de la siguiente manera:</p>
<ul>
<li>FoxiDNA.mq4 y FoxiDNA.ex4 van en C:\CarpetaMetaTrader\experts</li>
<li>BBands.mq4 y BBands.ex4 van en C:\CarpetaMetaTrader\experts\indicators</li>
<li>Si hubiera algún script iría en C:\CarpetaMetaTrader\experts\scripts</li>
</ul>
<p>Y después reiniciamos la plataforma (cerrando y volviendo a abrir). En la siguiente imagen vemos el panel Navigator con los Expert Advisor cargados.</p>
<p><img class="aligncenter size-full wp-image-578" title="navigator" src="http://www.programandoforex.com/wp-content/uploads/2009/08/navigator.jpg" alt="navigator" width="204" height="303" /></p>
<p>Si os fijáis hay otro expert CruceDeMedias que está en gris, eso es porque no disponemos del fichero mq4 de código sino sólo del ejecutable ex4, es decir que lo podemos utilizar pero no modificar.</p>
<p>Los EA se cargan sobre el gráfico que queramos símplemente arrastrando. En la esquina superior derecha nos aparecerá una carita sonriente <img src='http://www.programandoforex.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  o triste <img src='http://www.programandoforex.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  en función de que la plataforma permita operar con automáticos o no, tenemos que decirle que permita a los EA operar. Para eso vamos al menú Herramientas » Opciones y marcamos las casillas siguientes:</p>
<ul>
<li>Permitir Expert Advisors.</li>
<li>Desactivar Experts cuando cambiamos de cuenta.</li>
<li>Desactivar Experts cuando cambiamos de perfil.</li>
<li>Permitir live trading.</li>
</ul>
<p><img class="aligncenter size-full wp-image-579" title="options" src="http://www.programandoforex.com/wp-content/uploads/2009/08/options.jpg" alt="options" width="470" height="294" /></p>
<p>Ahora que ya podemos operar con EAs (carita sonriente <img src='http://www.programandoforex.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) cuando carguemos FoxiDNA sobre el gráfico podremos configurarlo. Una de las pestañas es la pestaña de entradas donde aparecen todos los parámetros del EA.</p>
<p><img class="aligncenter size-full wp-image-584" title="inputs" src="http://www.programandoforex.com/wp-content/uploads/2009/08/inputs.jpg" alt="inputs" width="470" height="236" /></p>
<p>Ahí podemos modificar todos los parámetros que queramos&#8230; A veces preferimos utilizar un valor de un parámetro distinto al que viene por defecto y cada vez que cargamos el EA hay que cambiarlo. Si disponemos del código (fichero mq4) podemos cambiar el valor por defecto. Abrimos el MetaEditor, modificamos el parámetro y compilamos de nuevo.</p>
<p>Con todo esto ya podemos instalar y configurar los EAs que adquiramos. En un próximo artículo hablaremos sobre la consola de <a href="http://www.programandoforex.com/optimizacion-y-backtesting/">backtesting y el fascinante proceso de optimización</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/unY9yhFPI0y20kchAygNowgtEak/0/da"><img src="http://feedads.g.doubleclick.net/~a/unY9yhFPI0y20kchAygNowgtEak/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/unY9yhFPI0y20kchAygNowgtEak/1/da"><img src="http://feedads.g.doubleclick.net/~a/unY9yhFPI0y20kchAygNowgtEak/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/-cQd43ef2Go" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/como-instalar-un-ea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/como-instalar-un-ea/</feedburner:origLink></item>
		<item>
		<title>Debugging: Eliminar errores en MQL</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/DVNJ1QqGc6g/</link>
		<comments>http://www.programandoforex.com/debugging-eliminar-errores-mql/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 11:01:06 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Expert Advisors EA]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[debug]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=439</guid>
		<description><![CDATA[

A priori la única forma de depurar un programa es utilizar el sistema de backtesting de MetaTrader e ir deteniendo el código con el botón de pausa, es un método básico y bastante rudimentario. Pero existe una forma de meter BreakPoints en el código MQL, los BreakPoints detienen la ejecución del programa exactamente en la [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-439"></span><!--noteaser--></p>
<p><img class="aligncenter size-full wp-image-444" title="first-computer-bug" src="http://www.programandoforex.com/wp-content/uploads/2009/06/first-computer-bug.jpg" alt="first-computer-bug" width="470" height="198" /></p>
<p>A priori la única forma de depurar un programa es utilizar el sistema de backtesting de <a href="http://www.programandoforex.com/metatrader/">MetaTrader</a> e ir deteniendo el código con el botón de pausa, es un método básico y bastante rudimentario. Pero existe una forma de meter <strong>BreakPoints</strong> en el código MQL, los <strong>BreakPoints</strong> detienen la ejecución del programa exactamente en la línea de código elegida para que puedas observar el estado. <a href="http://articles.mql4.com/477">La idea original aparece en este artículo</a>, nosotros explicaremos aquí la versión propia que utilizamos diariamente.</p>
<p>Vamos a añadir a un <a href="http://www.programandoforex.com/expert-advisor/">EA</a> cualquiera el sistema de debugging. Primero introduciremos esta función:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// DEBUG</span>
<span style="color: #0000ff;">void</span> BreakPoint<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">bool</span> Condicion <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>DEBUG<span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>IsVisualMode<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> <span style="color: #000040;">!</span>Condicion<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
   keybd_event<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">19</span>,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   Sleep<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   keybd_event<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">19</span>,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">2</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Y añadimos en la cabecera del programa un par de líneas:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;WinUser32.mqh&gt;</span>
<span style="color: #0000ff;">bool</span> DEBUG <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span></pre></div></div>

<p>La primera añade una librería que necesita nuestra función y la segunda es el interruptor global del sistema de debugging, si ponemos la variable DEBUG a false nuestro <a href="http://www.programandoforex.com/expert-advisor/">EA</a> no se detendrá nunca cuando hagamos el backtesting.</p>
<p>Ahora sólo nos queda colocar la linea</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">BreakPoint<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>en cualquier parte del código para que este se detenga al llegar. Fijándonos en el único parámetro que recibe la función BreakPoint() vemos que podemos llamarla también de la forma</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">BreakPoint<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>y así la anulamos. ¿Para qué sirve esto? Pues es un interruptor que desactiva en concreto ese BreakPoint. Así que resumiendo tenemos dos interruptores: uno general que desactiva todo el sistema de depurado y luego uno que desactiva cada BreakPoint en particular. De esta forma podríamos añadir BreakPoints al momento en el que se abre una operación de compra, otro al momento en el que se abre una venta y otro al cierre de cualquier operación y activar cualquiera de los tres, su combinaciones, desactivarlos todos, etc.</p>
<p>En el <a href="http://www.programandoforex.com/ea-rsi-macd/">Expert Advisor basado en MACD y RSI</a> del que hablamos el otro día he colocado el sistema de debugging para que podáis comprobar cómo funciona utilizando el backtesting. Este <a href="http://www.programandoforex.com/expert-advisor/">EA</a> se detiene en backtesting cada vez que abre una operación de compra o de venta.</p>
<p><strong>El código para descargar: <a href="http://www.programandoforex.com/wp-content/uploads/2009/06/macdrsi_debug.mq4">macdrsi_debug</a></strong></p>

<p><a href="http://feedads.g.doubleclick.net/~a/SL8BLv8C5sAoo1WRuZx8JJ3rpLk/0/da"><img src="http://feedads.g.doubleclick.net/~a/SL8BLv8C5sAoo1WRuZx8JJ3rpLk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/SL8BLv8C5sAoo1WRuZx8JJ3rpLk/1/da"><img src="http://feedads.g.doubleclick.net/~a/SL8BLv8C5sAoo1WRuZx8JJ3rpLk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/DVNJ1QqGc6g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/debugging-eliminar-errores-mql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/debugging-eliminar-errores-mql/</feedburner:origLink></item>
		<item>
		<title>Problema: Script para cerrar todas las órdenes</title>
		<link>http://feedproxy.google.com/~r/programandoforex/feedburner/~3/fROayKwN694/</link>
		<comments>http://www.programandoforex.com/script-para-cerrar-ordenes-metatrader/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 19:53:08 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[close]]></category>

		<guid isPermaLink="false">http://www.programandoforex.com/?p=424</guid>
		<description><![CDATA[
Hoy quiero daros un problema a resolver, el siguiente script es muy sencillo, explicaremos qué hace y cómo lo hace. Pero hay un error que tenéis que detectar y resolver, podéis dejar un comentario con vuestra respuesta.
El script CierraTodasLasOrdenes hace lo que su nombre indica: cerrar todas las órdenes abiertas que tenemos en la plataforma [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-430" title="cerrado" src="http://www.programandoforex.com/wp-content/uploads/2009/06/cerrado.jpg" alt="cerrado" width="470" height="351" /></p>
<p>Hoy quiero daros un problema a resolver, el siguiente script es muy sencillo, explicaremos qué hace y cómo lo hace. Pero hay un error que tenéis que detectar y resolver, podéis dejar un comentario con vuestra respuesta.</p>
<p>El script <strong>CierraTodasLasOrdenes</strong> hace lo que su nombre indica: cerrar todas las órdenes abiertas que tenemos en la plataforma MetaTrader. ¿En qué momento puede sernos útil? A todo trader le ha pasado alguna vez que operando manualmente se ha emocionado en exceso (demasiada confianza) por la última racha positiva y ha empezado a abrir posiciones sin control. En un momento te das cuenta que no puedes seguir tantas operaciones, están empezando a perder y se están comiendo tus ganancias&#8230; tienes que cerrar. Cerrar todo, respirar hondo y volver a empezar. ¿Os suena?</p>
<p>Veamos cómo programar un script que cierre posiciones. El código es el siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> start<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> error<span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> pos <span style="color: #000080;">=</span> OrdersTotal<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> pos <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> pos<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
      Print<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Cerrando orden #&quot;</span>,pos<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      OrderSelect<span style="color: #008000;">&#40;</span>pos,SELECT_BY_POS,MODE_TRADES<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>OrderType<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> OP_BUY<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
         RefreshRates<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>OrderClose<span style="color: #008000;">&#40;</span>OrderTicket<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,OrderLots<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,Bid,<span style="color: #0000dd;">3</span>,Yellow<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>error<span style="color: #000080;">=</span>GetLastError<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> Print<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;LastError = &quot;</span>,error<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
      <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>OrderType<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> OP_SELL<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
         RefreshRates<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>OrderClose<span style="color: #008000;">&#40;</span>OrderTicket<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,OrderLots<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,Ask,<span style="color: #0000dd;">3</span>,Yellow<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>error<span style="color: #000080;">=</span>GetLastError<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> Print<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;LastError = &quot;</span>,error<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
      <span style="color: #008000;">&#125;</span>
   <span style="color: #008000;">&#125;</span>
&nbsp;
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>La linea más importante es la del bucle for:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> pos <span style="color: #000080;">=</span> OrdersTotal<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> pos <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> pos<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span></pre></div></div>

<p>Vamos a recorrer las posiciones (que corresponden a operaciones abiertas), las recorremos en orden descendente. Si hay 10 posiciones abiertas MetaTrader numera a la primera con un 0, a la segunda con un 1, y así sucesivamente hasta la décima con un 9. Es decir, 10 posiciones numeradas del 0 al 9.</p>
<p>Por eso, inicializamos la variable <strong>pos</strong> con <strong>OrdersTotal()-1</strong>, y vamos descontando <strong>pos&#8211;</strong>. ¿Por qué decreciente? Porque si lo hacemos creciente, cuando cerremos la orden 0, la orden 1 pasará a numerarse como 0&#8230; y nuestro bucle for pasará a la siguiente operación numerada con 1, saltandose una posición.</p>
<p>Lo demás es muy sencillo, tomamos cada posición:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">OrderSelect<span style="color: #008000;">&#40;</span>pos,SELECT_BY_POS,MODE_TRADES<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Y en función del tipo (BUY o SELL) la cerramos a un precio u otro (Bid o Ask).</p>
<p>Sin embargo este script no funciona&#8230; No cierra ninguna posición, debe tener algún error y para encontrarlo hemos utilizado la función <strong>GetLastError</strong>. Esto ya nos debería dar una pista de cuál es el error&#8230; Pero ¿sabéis cómo resolverlo?</p>
<p>La respuesta en los comentarios del foro&#8230;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/VeImiCBX0dfhKGFAbtys5C3-DzE/0/da"><img src="http://feedads.g.doubleclick.net/~a/VeImiCBX0dfhKGFAbtys5C3-DzE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VeImiCBX0dfhKGFAbtys5C3-DzE/1/da"><img src="http://feedads.g.doubleclick.net/~a/VeImiCBX0dfhKGFAbtys5C3-DzE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/programandoforex/feedburner/~4/fROayKwN694" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.programandoforex.com/script-para-cerrar-ordenes-metatrader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.programandoforex.com/script-para-cerrar-ordenes-metatrader/</feedburner:origLink></item>
	</channel>
</rss>
