por Pepito454 » 18 Abr 2015, 12:00
Bueno, parece ser que di con al fallo, atendiendo a vuestras ideas he dado con ello.
Las variables "cierreAlc" y "cierreBaj", las he puesto a cero dentro de "Void OnTick" y las variables "EntrBajista" y "EntrAlcista" las he puesto a también a cero dentro de las condiciones de salida de venta y compra respectivamente.
Os dejo el programa con los cambios, por si a alguien le puede interesar y os agradezco mucho el tiempo que habéis utilizado para solucionar mis dudas, aunque esto solo es el principio del programa porque ya preveo posibles cambios en el sistema, espero no tener que molestaros mucho, aunque esto también puede ayudar a gente como yo no tenemos muchos conocimientos de programación.
Un saludo.
bool zonaBajista = 0;
bool zonaAlcista = 0;
bool SalBajista = 0;
bool SalAlcista = 0;
bool EntrBajista = 0;
bool EntrAlcista = 0;
bool OrdSel;
bool OrdClo;
bool cierreAlc = 0;
bool cierreBaj = 0;
bool VelaNueva = False;
int ticket;
int numOrd = 1;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double kijun = iIchimoku(NULL,0,9,26,52,MODE_KIJUNSEN,1);
double spanA = iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANA,1);
double spanB = iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANB,1);
double OrdenesMercado = OrdersTotal();
//condiciones para entrada venta
cierreAlc = 0;
cierreBaj = 0;
if ((kijun<spanA) && (kijun<spanB))
{
zonaBajista = 1;
if ((High[1]<kijun) && (Low[1]<kijun))
{
EntrBajista = 1;
Comment ("Orden Bajista");
}
else
Comment("");
}
//condiciones para entrada compra
if ((kijun>spanA) && (kijun>spanB))
{
zonaAlcista = 1;
if ((Low[1]>kijun) && (High[1]>kijun))
{
EntrAlcista = 1;
Comment ("Orden Alcista");
}
else
Comment("");
}
//condiciones para salida venta
if (EntrBajista == 1)
{
if (((Low[1]>kijun) && (High[1]>kijun)) || (High[1]>=spanA))
{
EntrBajista = 0;
cierreBaj = 1;
Comment ("Salida Orden Bajista");
}
else
Comment("");
}
//Condicione para salida compra
else if (EntrAlcista == 1)
{
if (((High[1]<kijun) && (Low[1]<kijun)) || (Low[1]<=spanA))
{
EntrAlcista = 0;
cierreAlc = 1;
Comment ("Salida Oreden Alcista");
}
else
Comment("");
}
//Entradas en el mercado
if (OrdenesMercado < numOrd)
{
if (EntrBajista == 1)
{
ticket = OrderSend(NULL,OP_SELL,0.03,Bid,3,0,0,NULL,0,0,clrBlack);
}
else if (EntrAlcista == 1)
{
ticket = OrderSend(NULL,OP_BUY,0.03,Ask,3,0,0,NULL,0,0,clrBlue);
}
}
//Salidas del mercado
if (OrdenesMercado == numOrd)
{
//seleccion de orden para el cierre
OrdSel = OrderSelect (ticket,SELECT_BY_TICKET);
if ((OrderType() == OP_BUY) && (cierreAlc == 1))
{
OrdClo = OrderClose (ticket, 0.03, Bid, 3, clrRed);
}
else if ((OrderType() == OP_SELL) && (cierreBaj == 1))
{
OrdClo = OrderClose (ticket, 0.03, Ask, 3,clrRed);
}
}
}