Problema órdenes con indicador externo a EA

Foro para cuestiones generales sobre la plataforma MetaTrader 4.

Problema órdenes con indicador externo a EA

Notapor pelaez » 04 Jul 2015, 03:35

Hola, he creado este expert advisor:

extern int kama_period4=4;
extern int kama_period18=18;
extern int kama_period40=40;
extern double fast_ma_period=2.0;
extern double slow_ma_period=30.0;
bool modificacionfallobajista;

bool dzonapeligro;
bool zonapeligro; // 1 - Alcista
// 0 - Bajista

int dalerta = 0;
int alerta = 0; // 3 - DF Bajista


bool velanueva = False; // Variable que nos detecta la vela
extern double lotes = 0.04;
extern double stoploss1 = 0;
extern double stoplossmedia = 0;
extern int periodolargo = 40;//Media larga
extern int periodocorto = 18;//Media corta
extern int periododisparo = 4;//Media 4
extern int numordenes = 1;
extern int NumeroMagico = 3;



double stop1 = NormalizeDouble(stoploss1*Point,0);

double stopmedia = NormalizeDouble(stoplossmedia*Point,0);

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// Definimos variables locales


bool tendenciacorta;

//---
nuevabarra ();

int totalordenes = OrdersTotal();
for (int i=0; i <= (totalordenes); i++){

//Seleccionamos la orden del mercado
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==TRUE){
if (OrderSymbol()==Symbol() && OrderMagicNumber()==NumeroMagico)
{
// Comprobando modificacion
double precioentrada = OrderOpenPrice();
double precioactual = MarketInfo(Symbol(),MODE_ASK);







if (precioentrada < Low[3] && Low[3]<Low[2] && Low[2]<Low[1] ){
//Modificando
int modificar1;
modificar1 = OrderModify(OrderTicket(),precioentrada,Low[3]-stop1,OrderTakeProfit(),0,Black);
return;
}

}
}
}

if (velanueva == True){


double medialarga = iCustom(Symbol(),60,"KAMA40",kama_period40,fast_ma_period,slow_ma_period,0,0);
double mediacorta = iCustom(Symbol(),60,"KAMA18",kama_period18,fast_ma_period,slow_ma_period,0,0);
double mediadisparo = iCustom(Symbol(),60,"KAMA4",kama_period4,fast_ma_period,slow_ma_period,0,0);



string texto = "Sin determinar";
color visual = Black;


if (totalordenes >=numordenes) {
alerta = 0;
return;
}

if (mediadisparo < mediacorta){
tendenciacorta = 0; // Media Corta Bajista
}
else if (mediadisparo > mediacorta){
tendenciacorta = 1; // Media Corta Alcista
}

if (mediacorta < medialarga){
texto = "Zona de peligro Bajista";
visual = Red;
zonapeligro = 0;
if ( (mediadisparo < medialarga)&& zonapeligro == 0){
texto = "Posible entrada al mercado, DF Bajista";
alerta = 3;
}
}

else if (mediacorta > medialarga){
texto = "Zona de peligro Alcista";
visual = Green;
zonapeligro = 1;
if (( tendenciacorta == 0) && ( mediadisparo > medialarga)){
texto = "Posible entrada al mercado, DF Alcista";
alerta = 1;
}
}



//Fallo FD Bajista
if ((alerta == 3) && (mediadisparo > medialarga)&& (mediacorta<medialarga)){
int fallobajista;
fallobajista = OrderSend(Symbol(),OP_BUY,lotes,Ask,3,mediacorta - stopmedia,0,NULL,NumeroMagico,0,Green);


return;
}



ObjectDelete ("Tendencia");
ObjectCreate ("Tendencia",OBJ_LABEL,0,0,0);
ObjectSet ("Tendencia",OBJPROP_CORNER,1);
ObjectSet ("Tendencia",OBJPROP_XDISTANCE,30);
ObjectSet ("Tendencia",OBJPROP_YDISTANCE,30);
ObjectSetText ("Tendencia",(string)texto,10,"Arial",visual);


}
}
//+------------------------------------------------------------------+

// Funcion encargada de cambiar la variable nuevavela
void nuevabarra(){

static datetime nuevotime = 0; //Detectar nuevo tiempo

velanueva = False; // 0 - misma vela, 1 - vela nueva

if (nuevotime != Time[0]){
nuevotime = Time[0];
velanueva = True;
}

}

El problema que tiene es que no me mete las ordenes cuando quiero hacer una prueba de estrategia y no entiendo por qué.

muchas gracias
pelaez
 
Mensajes: 12
Registrado: 13 Oct 2014, 22:34
Karma: 0

Re: Problema órdenes con indicador externo a EA

Notapor oalfx » 05 Jul 2015, 17:06

Hola pelaes

Si lo que intentas es meter ordenes con trozos de cógido como el que sigue:

//Fallo FD Bajista
if ((alerta == 3) && (mediadisparo > medialarga)&& (mediacorta<medialarga)){
int fallobajista;
fallobajista = OrderSend(Symbol(),OP_BUY,lotes,Ask,3,mediacorta - stopmedia,0,NULL,NumeroMagico,0,Green);
return;
}

Te comento que te falta al go fundamental y es que a la variable que asignas los parametros para conformar el ticket en tu caso (fallobajista) debes incorporar el proceso de ejecución de la misma para que se produzca el impacto en el mercado.

Agregar a continuación del código que está expresado arriba:

if(fallobajista >0 )
{
if(OrderSelect( fallobajista , SELECT_BY_TICKET,MODE_TRADES)){
Print("Order opened: ",OrderOpenPrice() );
}else{
Print("Order Open Failed! );
}

}

Con eso le dices al programa que ejecute fallobajista.

Espero sea comprensile caso contrario con esta guia te podes ubicar mejor de donde hayas sacado el código del EA. Te ha faltado una parte.
A disposición por si necesitas algo más, buena suerte !
Oal FX
Forex Sense
Avatar de Usuario
oalfx
 
Mensajes: 9
Registrado: 29 Jun 2015, 13:56
Karma: 0

Re: Problema órdenes con indicador externo a EA

Notapor MacD » 05 Jul 2015, 19:04

Para ayudarte danos mas pistas sin tener que descifrar linea a linea el code montado, el tiempo es oro.

De entrada no sabemos si es que solo falla al hacer BT, asi das entender, o tambien no hace nada en tiempo real??

Has comprobado si al ejecutar el BT no aparecen fallos en la pestaña Diario, fallos que provocan que no se envien ordenes??

Has monitorizado si las condicones se cumplen para que se envie una orden al servidor??

.....

Que el resultado de la compilacion sea 0 errores, no quiere decir que no existan errores conceptuales o algoritmicos y que por lo tanto un EA no haga lo que uno espera.
MacD
 
Mensajes: 79
Registrado: 08 Jul 2014, 03:48
Karma: 0


Volver a MetaTrader 4

¿Quién está conectado?

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