Zyco como me has pedido ayuda en privado voy a contestar en público para que puedan hacer el estudio más gente y a ver si se animan a aprender este lenguaje.
Yo estoy bastante ocupado programando expertos y trabajando con varios usuarios del foro, no quiero cogerme más trabajo pero intentaré ayudar en lo que pueda.
La programación es igual que el trading en sí, por tanto se tiene que hacer un análisis previo.
Sobre los indicadores que me hablas, “FreeDomBar” y “Heiken Ashi-Overlay”.
FreeDomBar es simplemente un indicador que adapta el indicador Heiken Ashi-Overlay a Periodos más pequeños, para el caso que nos ocupa dibuja las señales en gráficos de un minuto las señales de Heiken Ashi-Overlay en 5 minutos. Por tanto yo descartaría llamar a FreeDomBar en el experto pudiendo llamar a Heiken Ashi-Overlay directamente.
Es importante que meta las órdenes cuando el cuadrado anterior esté cerrado, es decir...introduce órdenes en el momento que sabemos el color del cuadrado n-1, el que acaba de cerrar.
Es contadas ocaciones se podrá ver que repinta algún cuadrado, pero no es muy importante ya que las microtendencias no se ven afectadas.
Repintará porque la barra de 5 minutos está en formación y hasta que no esté cerrada no se sabrá con certeza el color.
En el caso del Chart en un minuto la condición del n-1 se tendrá que evaluar en los minutos diferentes al cero y al 5 por tanto en esos minutos no se comprobará si hay señal.
Decir también que las señales del FreeDomBar están en los buffers 2 y 3 cuando deberían estar en los buffers 0 y 1, parece que este indicador es una modificación de otro porque le sobran buffers y colores.
Suelo poner las señales en funciones diferentes para poder acceder a ellas cuando se requiera, te he hecho un ejemplo de cómo extraer las señales de Heiken Ashi-Overlay.
Puedes lanzar este experto en el tester en modo visual y ver las señales que da.
En el comentario puedes ver la señal que extrae la función y los valores que da de Heiken Ashi-Overlay en sus dos Buffers.
Código: Seleccionar todo
//+------------------------------------------------------------------+
//| HA_zyco.mq4 |
//| Copyright © 2009, NsTrader |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, NsTrader"
#property link "[email protected]"
extern int TF = 5;
int Last.Signal = 2;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
Comment("Signal: ", HA.Overlay.Signal()," | Last.Signal: ",Last.Signal," || ",iCustom(NULL,TF,"Heiken Ashi-Overlay",0,0)," | ",iCustom(NULL,TF,"Heiken Ashi-Overlay",1,0));
if(HA.Overlay.Signal() > 0 && (Last.Signal == -1 || Last.Signal == 2))// && Orders.Buy == 0 (Comprobar si hay orden abierta y ponerlo tambien en la condición)
{
//Abrir Buy
//OrderSend(..........
Last.Signal = 1;
}
if(HA.Overlay.Signal() < 0 && (Last.Signal == 1 || Last.Signal == 2))// && Orders.Sell == 0
{
//Abrir Sell
//OrderSend(..........
Last.Signal = -1;
}
//----
return(0);
}
//+------------------------------------------------------------------+
int HA.Overlay.Signal()
{
int HA.Overlay.0;
int HA.Overlay.1;
int HA.Signal = 0;// No hay señal
if(Period() == PERIOD_M1 && TF == PERIOD_M5)
{
HA.Overlay.0 = iCustom(NULL,TF,"Heiken Ashi-Overlay",0,0);//Barra en Formación
HA.Overlay.1 = iCustom(NULL,TF,"Heiken Ashi-Overlay",1,0);//Barra en Formación
if(TimeMinute(TimeCurrent()) != 0 && TimeMinute(TimeCurrent()) != 5)//Minuto siguiente de empezar a formarse la barra.
{
if(HA.Overlay.1 == 1) HA.Signal = 1;//Alcista
else if(HA.Overlay.0 == 1) HA.Signal = -1;//Bajista
}
}
else
if(Period() >= PERIOD_M5 && TF >= Period())
{
HA.Overlay.0 = iCustom(NULL,TF,"Heiken Ashi-Overlay",0,1);//Barra anterior cerrada
HA.Overlay.1 = iCustom(NULL,TF,"Heiken Ashi-Overlay",1,1);//Barra anterior cerrada
if(HA.Overlay.1 == 1) HA.Signal = 1;//Alcista
else if(HA.Overlay.0 == 1) HA.Signal = -1;//Bajista
}
return(HA.Signal);
}