¡Saludos!

Supongo que estoy siguiendo la historia habitual aquí. Nuevo en MQL4, algunos antecedentes de codificación (BÁSICO y HTML), bla, bla, bla, ahora intento con mis manos escribir mi propio EA.

No es nada especial. Estoy trabajando en un EA de ruptura de EMA. Como es uno de mis primeros, pensé que lo mantendría simple. Entonces, el EA funciona basado en una apertura de barra debajo del EMA 20 y luego cerrándose sobre la línea. La barra siguiente abre una orden a 3 pips por encima de la barra anterior. Como es una EA básica, la orden se cierra al tocar el punto TP o SL, no tiene otra codificación para cerrar una orden.

Este es el problema. La primera versión que tengo abre una orden después de cada tic. Es bueno cuando tienes un negocio rentable, es una mierda cuando no lo tienes. Entonces, en la versión 2 intenté agregar un código de contador de otro EA y descubrí que ahora no abre ningún intercambio.

Aquí está el código de la versión 1 (lo siento, no sé cómo ponerlo en una pequeña caja ordenada):

int start ()
{
//----

int cnt, total, ticket;


doble emaT = iMA (NULL, 0,20,0, MODE_EMA, PRICE_CLOSE, 0);
double MacdCurrent = iMACD (NULL, 0,12,26,9, PRICE_CLOSE, MODE_MAIN, 0);

total = OrdersTotal ();
if (totallt; 1)


bool buy = falso;
bool sell = falso;

if ((Ask == High [1] gt; 3 * Point) (Open [1] lt; emaT) (Cerrar [1] gt; emaT) (MacdCurrent gt; 0)) buy = true;
if ((Low [1] == Bid ??????gt; 3 * Point) (emaT gt; Close [1]) (Open [1] gt; emaT) (MacdCurrent lt; 0)) sell = true;


{
si (comprar)


ticket = OrderSend (Symbol (), OP_BUY, Lots, Ask, 0, Ask-StopLoss * Point, Ask TakeProfit * Point, Momo Trade, magicnumber, 0, Green);
if (ticketgt; 0)

if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES))


return (0);
}

{
si (vender)


ticket = OrderSend (Symbol (), OP_SELL, Lots, Bid, 0, Bid StopLoss * Point, Bid-TakeProfit * Point, Momo Trade, magicnumber, 0, Red);
if (ticketgt; 0)

if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES))

return (0);

}

return (0);
}
//----

La versión 2 es la misma, pero con este código agregado para un contador:

orders = OrdersTotal ();
para (cnt = 0; cntlt; OrdersTotal (); cnt )

{
if (OrderSelect (cnt, SELECT_BY_POS))
OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol () == Símbolo ())
{
if (OrderType () == OP_BUY)



Además, aunque tengo la atención de todos, ¿mi código es correcto para hacer un pedido basado en el altobajo anterior con el código (Ask == High [1] gt; 3 * Point)?

¡Con gracias!