Respuesta

Total P/L ABIERTO en TODOS los pares de divisas.

5 respuestas

Steve Green

Abonado, bbp_participant, comunidad, 47 respuestas.

Visitar el perfil

hace 6 años #197786

Hola a todos,

¿Puede alguien ayudarme con una función personalizada que devuelva el total en dinero de todas las órdenes ABIERTAS en TODOS los pares de divisas, es decir, en todos los gráficos?

Gracias de antemano

Saludos cordiales
Steve

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 6 años #197825

Hola Steven,

Claro, voy a publicar la función

0

Steve Green

Abonado, bbp_participant, comunidad, 47 respuestas.

Visitar el perfil

hace 6 años #197826

Hola Tomas,

No estoy seguro de dónde está el problema en las 3 funciones que he codificado, así que las he pegado todas a continuación. Supongo que podría ser en cualquiera de los 3.

En el tester en Mt4 funciona bien pero cuando lo ejecuto en una cuenta demo añade el saldo de la cuenta a la suma total.

El código de tres funciones custome es el siguiente:

- Inicializo esta variable de la siguiente manera
lv_NumOrdersToday = GetAllOrdersOpenedToday(0, "false");

int GetAllOrdersOpenedToday(int direction, string includePending) {
cadena todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
int operacionesAbridasHoy = 0;

for(int i=0;i<TotalHistorialPedidos();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) {

if(dirección == 1) {
if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// omitir pedidos cortos
continuar;
}
} else if(direction == -1) {
if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP) {
// omitir pedidos largos
continuar;
}
}

if(includePending == "false") {
if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// saltar órdenes pendientes
continuar;
}
}

if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
tradesOpenedToday++;
}
}
}

for (int cc = TotalPedidos() - 1; cc >= 0; cc-) {
if (OrderSelect(cc, SELECT_BY_POS)) {

if(dirección == 1) {
if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// omitir pedidos cortos
continuar;
}
} else if(direction == -1) {
if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP) {
// omitir pedidos largos
continuar;
}
}

if(includePending == "false") {
if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// saltar órdenes pendientes
continuar;
}
}

if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
tradesOpenedToday++;
}
}
}

return(operacionesAbridasHoy);
}

- que se pasa a esta función es lv_NumOrdersToday de la función anterior
double GetAllTotalClosedPLInMoney(int orderMagicNumber, int numberOfLastOrders) {
doble pl = 0;
int recuento = 0;

for(int i=TotalOrdersHistory(); i>=0; i-) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) {
if(orderMagicNumber == 0 | OrderMagicNumber() == orderMagicNumber) {
cuenta++;
pl = pl + OrdenProfit();

if(count >= numberOfLastOrders) break;
}
}
}

return(pl);
}

double GetALLOpenPLInMoney(int orderMagicNumber) {
doble pl = 0;

for(int cnt = 0; cnt < TotalPedidos(); cnt ++)
{
if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
if(orderMagicNumber == 0 | OrderMagicNumber() == orderMagicNumber) continue;

pl += OrderProfit();
}

return(pl);
}

La funcionalidad que estoy tratando de construir es agregar las 2 funciones ((GetALLOpenPLInMoney(0) + GetAllTotalClosedPLInMoney(0, lv_NumOrdersToday)) resultados juntos y ver si está por encima o por debajo de un predeterminado capped Profit o Loss cantidad diaria y si es así entonces suspender el comercio en todos los pares de divisas.

Una vez más, cuando corro en MT4 tester funciona bien, pero cuando corro en una cuenta demo incluye el saldo de la cuenta en la suma por una razón desconocida.

es decir, 5023 en lugar de 23 en una cuenta de 5000.

Gracias

Saludos cordiales
Steve

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 6 años #197897

Hola,

por favor, compruebe su buzón. Le he enviado una respuesta al correo electrónico que nos envió.

0

Steve Green

Abonado, bbp_participant, comunidad, 47 respuestas.

Visitar el perfil

hace 6 años #200400

Hola Tomas,

Este era el problema. Una característica no documentada y como supuse la forma en que se almacenan los datos. Ver enlace: https://www.mql5.com/en/forum/126192

Del enlace un extracto a continuación:
El nombre de OrdersHistoryTotal() es un poco engañoso, porque también incluye el saldo y los extractos de crédito. Así que este método podría ser potencialmente poco fiable... Una solución mejor sería hacer un bucle en los pedidos del historial y contarlos (filtrando el saldo y los extractos de crédito).

 

Para su información, aunque no está documentado oficialmente, estos son los OrderType() de los extractos de saldo/crédito cuando se seleccionan:

 

Declaración 'Balance': OrderType()==6
Declaración 'Crédito': OrderType()==7

 

He realizado los cambios pertinentes y todo funciona según lo previsto.

 

Para que lo sepas.

Saludos cordiales
Steve

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 6 años #200732

Hola,

Me alegro de que funcione para usted ahora. Estoy comprobar la función de P / L abierta ahora que envió a nuestro correo electrónico

0

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)