Problema órdenes con indicador externo a EAHola, 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
Re: Problema órdenes con indicador externo a EAHola 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
Re: Problema órdenes con indicador externo a EAPara 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.
3 mensajes
• Página 1 de 1
|
|
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados