Página 1 de 1

Necesito ayuda con código MQ5

Publicado: 06 Ago 2021 16:12
por landorra
Hola a todos,

Necesito un pedazo de código que no sé cómo hacer. He creado una parámetro de entrada "A" para seleccionar un número del 1 al 4. Según el número seleccionado, una variable llamada "B" debe adoptar uno de los valores del método de cálculo de una media móvil. Así, si se escoge 1, es media móvil simple, si es 2, esponencial, etc.

Ya sé que se puede escoger directamente el listado de opciones desplegable en el parámetro de entrada, pero yo quiero que el usuario escoja un número. ¿Alguien sería tan amable de dcirme cómo puedo asignar el valor de la variable en función de lo dicho?

Muchas gracias de antemano.

Re: Necesito ayuda con código MQ5

Publicado: 06 Ago 2021 16:16
por X-Trader
Hola landorra, creo que lo que buscas es la función switch, mírate este enlace:

https://www.mql5.com/es/docs/basis/operators/switch

Saludos,
X-Trader

Re: Necesito ayuda con código MQ5

Publicado: 07 Ago 2021 09:37
por Nightmare
1. un metodo
ENUM_MA_METHOD MethodoMA(int method)
{
switch(method)
{
case 0: return(MODE_SMA);
case 1: return(MODE_EMA);
case 2: return(MODE_SMMA);
case 3: return(MODE_LWMA);
default: return(MODE_SMA);
}
}

2. como input ingresado desde el sert aunque debes cambiarlo para el mode de ma
enum Per
{
M1=PERIOD_M1,
M5=PERIOD_M5,
M15=PERIOD_M15,
M30=PERIOD_M30,
// H1=PERIOD_H1,
};

input ENUM_TIMEFRAMES PERIODO__= PERIOD_M15;

Re: Necesito ayuda con código MQ5

Publicado: 08 Ago 2021 09:04
por landorra
Gracias a ambos por la ayuda. Gracias a ella lo he conseguido ;)

Re: Necesito ayuda con código MQL5

Publicado: 24 Feb 2023 18:36
por landorra
Retomo el hilo para hacer otra pregunta de código mql5. No encuentro en la documentación cuál es la función que me permite identificar si un determinado número de ticket pertenece a una posición cerrada. ¿Alguien me puede echar una mano, porfa?

Re: Necesito ayuda con código MQ5

Publicado: 26 Feb 2023 00:42
por cdtrader
Estoy con el celular así que mucho no puedo ver, pero tendrías que ir a orderselect, elegirlo y fijarte que order close time (dentro de las propiedades) es menor que la hora actual


Enviado desde mi iPhone utilizando Tapatalk

Re: Necesito ayuda con código MQ5

Publicado: 02 Mar 2023 17:53
por landorra
Perdón por el retraso en la respuesta. Me temo que no me expliqué como quería. Necesito saber qué código me haría falta para capturar el número de ticket de una operación;
a) En el momento de su apertura.
b) En el momento en que se le realiza uno más cierres parciales.
c) En el momento de su cierre, independientemente de si se le han llevado a cabo cierres parciales.

Este lenguaje no es lo mío, con lo que toda ayuda será más que agradecida. :)

Re: Necesito ayuda con código MQ5

Publicado: 03 Mar 2023 21:48
por cdtrader
Creo que order send devolvía el número de ticket , respecto a lo otro deberías usar en orderselct “mode history” y el de posición 0 sería el último cambio (dependiendo de cómo lo tienes ordenado en “terminal”) con todos los datos


Enviado desde mi iPhone utilizando Tapatalk

Re: Necesito ayuda con código MQ5

Publicado: 05 Mar 2023 00:45
por Nightmare
landorra escribió: 02 Mar 2023 17:53 Perdón por el retraso en la respuesta. Me temo que no me expliqué como quería. Necesito saber qué código me haría falta para capturar el número de ticket de una operación;
a) En el momento de su apertura.
b) En el momento en que se le realiza uno más cierres parciales.
c) En el momento de su cierre, independientemente de si se le han llevado a cabo cierres parciales.

Este lenguaje no es lo mío, con lo que toda ayuda será más que agradecida. :)
CASO A: si usas un EA para abrir o cerrar, parcial o total, el OrderSend() te devuelve el nro de ticket
P.E.

void OpenOrderAtMarket(double argLotSize, int argDirection, int argMagicNumber, string comentario, int stopLose, int takeProfit)
{
string DirectionDesc;
color Color;
double TradePrice;

while(IsTradeContextBusy()) Sleep(10);
RefreshRates();

if (argDirection == OP_BUY)
{
Color = Aqua;
DirectionDesc = "BUY";
TradePrice = Ask;
}

if (argDirection == OP_SELL)
{
Color = Red;
DirectionDesc = "SELL";
TradePrice = Bid;
}

int Ticket = OrderSend(Symbol(), argDirection, argLotSize, TradePrice, SlippagePips, 0, 0, comentario, argMagicNumber, 0, Green);
if(Ticket < 0)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
Print(StringConcatenate("No pude abrir " + DirectionDesc+" ORDER, error: ", ErrorCode," ",ErrDesc));
}
else AddSLPT(Ticket, argDirection, stopLose, takeProfit);
}
****************************************************
y este seria un ejemplo de cierre

void CloseOrderAtMarket(int argTicket, int argDirection)
{
if (OrderSelect(argTicket, SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
double TradePrice;

while(IsTradeContextBusy()) Sleep(10);
RefreshRates();

if (argDirection == OP_SELL) TradePrice = Ask;
if (argDirection == OP_BUY ) TradePrice = Bid;
int Ticket = OrderClose(argTicket, OrderLots(), TradePrice, SlippagePips, Violet);

if (Ticket < 0)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
Print(StringConcatenate("No pude cerrar orden con ticket nro " + Ticket + " - ", ErrorCode,": ",ErrDesc));
}



Nota que OrderSend() u OrderClose(), te devuelve el nro de ticket, el cual puedes usarlo como gustes.
Recuerda que ambos estan en un constante bucle buscando condiciones de entrada o salida, y son esas condiciones las que disparan las funciones de ejemplo.

Re: Necesito ayuda con código MQ5

Publicado: 05 Mar 2023 00:47
por Nightmare
Caso B: Si se cierra por sl, tp, o manual, o se abre manual o por ordenes pendientes.

en ese caso si tienes el nro de ticket, usar OrdeSelect() pasando como uno de los parametros el ticket, o en otros casos debes obtener de la historia las operaciones abiertas o las operaciones cerradas y buscar la que desees, ya sea filtrando por par, loss/gain, dia, hora, la ultima cerrada (que seria la primera que encuentres)

for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if ( OrderSelect(i, SELECT_BY_POS, MODE_HISTORY ) ) // O MODE_TRADES segun desees
{ if ( OrderSymbol() == Symbol() ) // aca los filtros que identifiquen la orden que buscas
.....
}
}

Ahi, estarias tomando una por una las ordenes, ya sean las activas, o las cerradas, para que puedas aplicar los filtros con los cuales identificaras la orden que deseas.