Necesito ayuda con la codificación

 

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

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.

Archivos adjuntos:
el1.mq4  2 kb
 

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

 

Hola,

cuando cambio NUL L en NULL, no obtengo ningún error de la copilación

 

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.

Archivos adjuntos:
el1.mq4  4 kb
 

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.

 

Pruebe esto

No estoy probando el código - si usted da el indicador - voy a probar - en realidad voy a probar muy pronto con otro indicador. Aun así espero que esto ayude.

Archivos adjuntos:
el1_1.mq4  5 kb
 

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

Archivos adjuntos:
el1_2.mq4  5 kb
Razón de la queja: