¿Cómo calcula MetaTrader 5 los beneficios?

 

Ejecutando un simple script:

//+------------------------------------------------------------------+
//|                                                       profit.mq5 |
//+------------------------------------------------------------------+
string com;
string Sy[28]={"EURGBP","EURAUD","EURNZD","EURUSD","EURCAD","EURCHF","EURJPY","GBPAUD","GBPNZD","GBPUSD",
              "GBPCAD","GBPCHF","GBPJPY","AUDNZD","AUDUSD","AUDCAD","AUDCHF","AUDJPY","NZDUSD","NZDCAD",
              "NZDCHF","NZDJPY","USDCAD","USDCHF","USDJPY","CADCHF","CADJPY","CHFJPY"};
double a[28],b[28],BuyPlus[28],BuyMinus[28],SellPlus[28],SellMinus[28];
double diff=0.001;

void OnStart()
  {com="";
   for(int i=0;i<28;i++)
      {b[i]=SymbolInfoDouble(Sy[i],SYMBOL_BID);a[i]=SymbolInfoDouble(Sy[i],SYMBOL_ASK);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]+diff,BuyPlus[i]);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]-diff,BuyMinus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]+diff,SellPlus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]-diff,SellMinus[i]);
       
       com=com+"\n"+Sy[i]+"  BuyPlus="  +DoubleToString(BuyPlus[i],4)
                         +"  BuyMinus=" +DoubleToString(BuyMinus[i],4)
                         +"  SellPlus=" +DoubleToString(SellPlus[i],4)
                         +"  SellMinus="+DoubleToString(SellMinus[i],4);
      }//for
   Comment(com);
  }//start

El error es claramente visible...

El problema debe venir deSYMBOL_TRADE_TICK_VALUE_PROFITySYMBOL_TRADE_TICK_VALUE_LOSS.

NecesitaremosSYMBOL_TRADE_TICK_VALUE_LONG y SYMBOL_TRADE_TICK_VALUE_SHORT.

La búsqueda dio como resultado algo interesante:

Renat:

Я вчера, когда смотрел код, неверно выразился по поводу разной стоимость пункта в зависимости от направления.

Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid.


Esto es un error, por supuesto. Para una posición corta, el precio es al revés....

¡Realmente espero que el error sea involuntario! ¿Puede corregirlo, por favor?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Lamentablemente, la pregunta no está claramente formulada y no hay ninguna conclusión del ejemplo propuesto. No está claro qué es exactamente lo que se indica como error.

Formule su pregunta con precisión, adjunte los resultados obtenidos e indique dónde está el error en ellos, por favor.

Por ejemplo, indique aquí dónde está el error:

EURGBP  BuyPlus=158.40000000  BuyMinus=-158.48000000  SellPlus=-158.48000000  SellMinus=158.40000000  Profit=1.58398000  Loss=1.58482000

He añadido los valores SYMBOL_TRADE_TICK_VALUE_PROFIT y SYMBOL_TRADE_TICK_VALUE_LOSS al final.

Puede ver que el beneficio realmente tiene en cuenta diferentes valores de un tick, dependiendo de la rentabilidad o pérdida de una operación. Esto se debe a que existe una operación de conversión implícita a la moneda de depósito, cuando se tiene que vender (si es ganancia) o recomprar (si es pérdida) el resultado financiero obtenido en una moneda para su conversión.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

 

El valor de un tick no depende de las ganancias o pérdidas de una operación.

Las ganancias y las pérdidas se cerrarán al mismo precio. La conversión es la misma.

Sólo las operaciones cortas y largas pueden tener una diferencia en el valor del tick y pueden contarse de forma diferente para la conversión en la moneda del depósito.

El ejemplo de BuyPlus y BuyMinus sería igual. SellPlus y SellMinus también. Sólo se puede comprar.... es diferente de Vender...

Usted está confundiendo algo aquí :

Renat:

... Cuando tenga quevender(si es un beneficio) orecomprar(si es una pérdida) el resultado financiero resultante en una moneda para la conversión.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 

Cuando usted abre una operación para el EURGBP, y la moneda del depósito es el USD,básicamente tiene (aproximadamente) Comprar EURUSD y Vender GBPUSD. (La diferencia de volumen no importa, porque no cambian al cerrar)

Para abrir:Comprar EURUSD a Ask(EURUSD) y Vender GBPUSD a Bid(GBPUSD).

Al cierre(si es una ganancia,si es una pérdida) tiene el mismo precio: Bid(EURUSD) y Ask(GBPUSD).

¿Por qué el valor del tick es diferente paralos beneficios/pérdidas?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 

Esto es el resultado de un error de larga data de los desarrolladores:

Renat:

Es más exacto decir que el TickValue al convertir a la moneda de destino depende de si es una pérdida o no. Es decir, si tenemos una pérdida de 1 pip, tenemos que volver a comprarlo al precio Ask, y si tenemos un beneficio de 1 pip, tenemos que venderlo al precio Bid.

 
Manov:

Elvalor de un tick no depende de si una operación es rentable o no.

Las ganancias y las pérdidas se cerrarán al mismo precio. En la conversión, también lo hará el precio.

Eso es lo que hace.

Para ello, hay que entender las matemáticas de los cálculos con conversiones cruzadas complejas. Mientras se opere con las principales divisas como el EURUSD y el GBPUSD, no se verá nada.

Sí, a primera vista puede parecer que no depende de ella, pero si se examinan las cruces en detalle, se verá que sí.

 
Renat:

Esa es la cuestión, depende.

En realidad, esto es un punto discutible. La lógica de Renat es clara y parece incluso correcta a primera vista:

Cuando se realiza una operación de cruce, se obtiene un beneficio en su moneda base. Por ejemplo, el beneficio de una operación EURGBP se mide en GBP. Pero no existe el concepto de beneficio multidivisa en MT5, por lo que el beneficio en GBP se convierte a la moneda de la cuenta sobre la marcha. Por lo tanto, parece que en caso de beneficio positivo se debe convertir al tipo de cambio actual GBPUSD_Bid, y en caso de negativo - GBPUSD_Ask.

Sin embargo, he aquí un contraejemplo:

  1. Tienes dos cuentas independientes. Ha decidido transferir fondos de uno a otro.
  2. En el EURGBP se establece un spread interno en una cuenta BuyLimit. En consecuencia, el precio de la oferta se convierte en el suyo.
  3. En la otra cuenta, utilizando una orden de mercado se ejecuta la VENTA.
  4. Con esta sencilla operación te has vendido a ti mismo.
  5. Pasa un tiempo y se decide a cerrar los tratos.
  6. En la primera cuenta se establece el SellLimit dentro del spread. Ahora su precio se convierte en el precio de venta.
  7. En la otra cuenta, se utiliza la orden de mercado para COMPRAR.
  8. Resulta que ahora has comprado desde tu propia cuenta.
  9. Las dos operaciones de cada cuenta se han cerrado. Te has comprado y vendido a ti mismo.
  10. En una cuenta tienes beneficios positivos y en la otra negativos.
  11. ¿Crees que la cantidad de fondos en tus dos cuentas ha cambiado (sin incluir la comisión del corredor)?
  12. Según la lógica de Renat, ha cambiado. Porque el beneficio de una cuenta no será igual a la pérdida de la otra. Y esto a pesar de que usted mismo estaba comprando y vendiendo.
  13. ¿Es eso correcto?

Hablamos de las condiciones del mercado - broker ECN/STP.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
hrenfx:

Sin embargo, un contraejemplo:
  1. ¿Es esto lo correcto?

Se trataba de las condiciones del mercado - broker ECN/STP.

Considere que hay al menos otras dos operaciones de conversión interna con sus propios diferenciales.
 
Renat:

Esa es la cuestión: depende.

Para ello hay que profundizar bastante en las matemáticas de los cálculos con complejas conversiones cruzadas. Mientras se opere con las principales divisas como el EURUSD y el GBPUSD, no se verá nada.

Sí, a primera vista parece que no debería depender, pero si examina los cruces en detalle, verá que sí.

El cálculo del Ask/Bid puede sercomplicado, pero de hecho,para todos los cruces, usted tiene 2 operaciones:

1. comprar o venderSYMBOL_CURRENCY_BASE-ACCOUNT_CURRENCY en Ask/Bid

2) Compre o vendaSYMBOL_CURRENCY_PROFIT -ACCOUNT_CURRENCY para Ask/Bid

Cada operación, si la abrimos con Bid, la cerraremos con Ask. Y viceversa...

¡El signo de resultado no importa para los precios de cierre, como lo hace ahora en MetaTrader 5 !

 
Renat:
Tenga en cuenta que hay al menos dos conversiones internas más con sus propios diferenciales.

¿De qué operaciones de conversión estamos hablando? La lógica es sencilla, hay que convertir los beneficios multidivisa a la moneda de la cuenta, nada más. En el caso del ejemplo, el beneficio en libras esterlinas debe convertirse a dólares estadounidenses. No importa si el beneficio es positivo o negativo, hay que convertirlo.

Ha renunciado al esquema de mercado de tomar las ganancias en varias divisas y convertirlas en el momento de la reinversión. Esto se aleja de las condiciones de mercado de MT5, que se posiciona como una plataforma de mercado. Pero en aras de la simplificación, esta desviación puede entenderse y no supone en muchos casos (no en todos) graves costes.

Pero en el caso del cálculo de beneficios, por llamar a las cosas por su nombre, estás contribuyendo, intencionada o accidentalmente, a un esquema fraudulento para quitarle dinero a los clientes a favor de un broker que utiliza MT5. Me explico, en estos momentos un broker está obteniendo un beneficio extra en MT5 por operar con todos los clientes igual (aproximadamente) al volumen de negocio de todos sus clientes en cruces, multiplicado por el correspondiente spread de las majors.

Ha implementado un esquema gratuito para ganar dinero en el spread, y en cualquier spread. Por ejemplo, durante las noticias, en el mismo GBPUSD, el spread puede ser muy amplio y si hay un cierre/abertura en los clientes del broker, el broker gana este enorme spread en un punto plano.

Esto es una desventaja y la renuncia al beneficio de la multidivisa, porque el spread de la multidivisa puede convertirse a precios muy desagradables durante las noticias. Y, de hecho, durante el rollover el beneficio multidivisa se convierte en el neto total de todos los clientes. Y no hay manera de que se produzcan tales desequilibrios, como se muestra en el contraejemplo anterior.

Razón de la queja: