Necesito ayuda con código MQ5

Foro dedicado a todo lo relacionado con la versión 5 de la plataforma de Metaquotes.
Responder
Avatar de Usuario
landorra
Mensajes: 109
Registrado: 07 Abr 2019 20:53

Necesito ayuda con código MQ5

Mensaje 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.

Enseño a crear bots de forex sin necesidad de aprender lenguaje mql4/5.
¿Interesado? Visita my web https://www.theandorraninvestor.eu/es
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12776
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Necesito ayuda con código MQ5

Mensaje 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
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
Nightmare
Mensajes: 459
Registrado: 23 May 2018 09:23

Re: Necesito ayuda con código MQ5

Mensaje 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;
Avatar de Usuario
landorra
Mensajes: 109
Registrado: 07 Abr 2019 20:53

Re: Necesito ayuda con código MQ5

Mensaje por landorra »

Gracias a ambos por la ayuda. Gracias a ella lo he conseguido ;)

Enseño a crear bots de forex sin necesidad de aprender lenguaje mql4/5.
¿Interesado? Visita my web https://www.theandorraninvestor.eu/es
Avatar de Usuario
landorra
Mensajes: 109
Registrado: 07 Abr 2019 20:53

Re: Necesito ayuda con código MQL5

Mensaje 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?

Enseño a crear bots de forex sin necesidad de aprender lenguaje mql4/5.
¿Interesado? Visita my web https://www.theandorraninvestor.eu/es

Avatar de Usuario
cdtrader
Mensajes: 588
Registrado: 28 Dic 2016 17:04

Re: Necesito ayuda con código MQ5

Mensaje 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
Imagen
Avatar de Usuario
landorra
Mensajes: 109
Registrado: 07 Abr 2019 20:53

Re: Necesito ayuda con código MQ5

Mensaje 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. :)

Enseño a crear bots de forex sin necesidad de aprender lenguaje mql4/5.
¿Interesado? Visita my web https://www.theandorraninvestor.eu/es
Avatar de Usuario
cdtrader
Mensajes: 588
Registrado: 28 Dic 2016 17:04

Re: Necesito ayuda con código MQ5

Mensaje 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
Imagen
Nightmare
Mensajes: 459
Registrado: 23 May 2018 09:23

Re: Necesito ayuda con código MQ5

Mensaje 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.
Nightmare
Mensajes: 459
Registrado: 23 May 2018 09:23

Re: Necesito ayuda con código MQ5

Mensaje 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.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Metatrader 5”