Se crean ordenes por tick

Foro para cuestiones generales sobre la plataforma MetaTrader 4.

Re: Se crean ordenes por tick

Notapor cdtrader » 16 Abr 2015, 20:28

MacD escribió:Definir esas variables como globales e inicializarlas esta bien, el fallo sera que en el bucle principal del EA ( OnTick()) esas variables no las gestiona bien y no las actualiza al valor que deberian de tener segun su estado.

Si esas variables las defines dentro del cuerpo de la funcion OnTick(), a cada nuevo tick se inicializan a 0 y perderan su funcion de variable de estado.


la cuestion es que analiza para cuando si se cumple la condicion, no para cuando no.
si quieres puedes poner un "else" luego del if en el cual lo define como 1, o puedes inicializarla de forma global y luego definirlas nuevamente como 0 al principio. simplemente me parece mas simple definirlas al principio del programa y listo. no consumira muchos recursos.
Imagen
Avatar de Usuario
cdtrader
 
Mensajes: 1428
Registrado: 23 Ago 2014, 13:47
Karma: 17

Re: Se crean ordenes por tick

Notapor 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);

}
}

}
Pepito454
 
Mensajes: 23
Registrado: 18 Jun 2014, 11:27
Karma: 0

Anterior

Volver a MetaTrader 4

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados