Hola
Ya he resuelto este problema. He podido compilar el EA y he intentado hacer un backtest. Pero desgraciadamente no compra ni vende nada.
Aparte de esto parece que funciona, este es el diario:
14:16:18 EL1 entradas: Lots=0.1; Timeframe=240;
14:16:18 ELine GBPUSD,H4: eliminado
14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: cargado con éxito
Y este es el código del EA:
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
extern double Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="ninguno";
string strDirPrevious="none";
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int inicio()
{
// comprueba la dirección actual
if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="largo";
if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="corto";
// comparar con la dirección anterior y abrir una posición si hubo un cambio
if(strDirCurrent=="long" && strDirPrevious=="short")
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green);
if(strDirCurrent=="short" && strDirPrevious=="long")
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Red);
strDirPrevious=strDirCurrent;
}
// el final.
¡¡¡Cualquier ayuda es muy bienvenida !!!
Gracias
Eric
si buscas en el curso de desarrollo en este tablero, encontrarás "My_First_EA", un codind con cruce de MAs
No pude obtener ningún resultado probando su EA y soy muy nuevo en EA-Proramming también. Lo siento
Gracias balue. El espacio en NULL es sólo de copiar y pegar, en mi código está escrito correctamente. Y sí compila (la segunda versión).
Conozco el curso de MQL (aunque todavía no lo he terminado).
He escrito un EA similar para ADX para probarlo y allí funciona. Solo que cuando trato de usar mi indicador personalizado no opera..
Por favor, adjunte su indicador - para que podamos hacer backtesting
Hola
Gran código - Me encantaría hacer backtesting - por favor danos tu icustom Eline.
He modificado su código ampliamente.
/*
* Created by SharpDevelop.
* User: CARDIO
* Date: 1/17/2006
* Time: 4:55 AM
*
*Todo: if there is an ope position - close it- then open in opposite direction.
*
*/
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
#include
extern double Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="none";
string strDirPrevious="none";
int cnt, magicEA;
bool isclosing = false;
double slippage = 3;
int init() {
return(0);
}
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
magicEA = 16384;
// check for current direction
if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))
{
strDirCurrent="long";
}
if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))
{strDirCurrent="short";
}
// compare to previous direction and open a position if there was a change
if(strDirCurrent=="long" && strDirPrevious=="short")
{
//firs close open positions
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);
return(0);
}
if(strDirCurrent=="short" && strDirPrevious=="long")
{
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);
return(0);
}
strDirPrevious=strDirCurrent;
return(0);
}
// the end.
void isclosing1(){
//Close all open orders
//todo: get a requote on the prices if error 138 occurs, use refreshrates
//todo: check if the last 3 closes where losers - if so stop the ea
int totalOrders = OrdersTotal();
int numPos = 0;
for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...
OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders
if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA
numPos++;
if(OrderType() == OP_BUY) { // Check for close signal for bought trade
if(isclosing) {
if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade
//writetofile("10","Closed buy", OrderTicket());
//prtAlert("Day Trading: Closing BUY order");
} else {
// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));
}
}
} else { // Check sold trade for close signal
if(isclosing) {
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);
//writetofile("10","Closed buy", OrderTicket());
// prtAlert("Day Trading: Closing SELL order");
}else {
//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));
}
}
}
}
}
Arreglado, espero
Molestias arregladas. Prueba esto
Todavía tenemos que trabajar en la gestión del dinero, etc.
Gracias, ahora me sale esto
2006.01.17 18:59:10 2006.01.12 08:20 EL1: número doble no válido como parámetro 7 para la función OrderSend
2006.01.17 18:59:10 2006.01.12 08:10 EL1: el comentario de la función OrderSend debe ser una cadena
2006.01.17 18:59:09 EL1: cargado con éxito
y el error se repite como un millón de veces ;-)
pero creo que este es fácil de arreglar.
todavía tratando de arreglar - sólo espera que voy a publicar ahora
Todavía se está arreglando
Corregido - con suerte
Solo te faltaba un valor de take profit (tp) en realidad.
¿No quieres un tp y un stoploss?
Buena suerte
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola
Estoy tratando de codificar un EA muy simple, pero no soy un programador y nunca he hecho un EA antes.
Tomé el ejemplo del MACD de MT4 y edité algunas partes y eliminé todo el resto que pensé que no necesitaba.
Estoy seguro de que mi código es realmente horrible![](https://c.mql5.com/forextsd/smiles/rolleyes.png)
Me gustaría que el EA funcionara así:
Mi indicador personalizado ELine tiene dos líneas que se mueven por pasos. A veces una es más alta que la otra, a veces son iguales.
Cuando una línea cruza la otra me gustaría que el EA entrara en una posición larga o corta, dependiendo de la línea que cruza hacia arriba.
Siempre hay una posición abierta, excepto al inicio del EA.
Cuando intento compilarlo me dice "si" - se espera un punto y coma (20,7)
Entonces en el siguiente paso debería cerrar siempre una posición ya existente cuando abre una nueva, pero no he podido codificar esto hasta ahora.
¿Podría alguien corregir los errores en mi código y tal vez decirme cómo puedo cerrar las posiciones cada vez que el EA entra en una nueva?
Muchas gracias.