Errores, fallos, preguntas - página 2019

 
fxsaber:

Se ha escrito sobre ello muchas veces. No se ha corregido por alguna razón.

Ya he visto antes que las flechas no siempre pueden mostrarse inmediatamente después de una transacción. Yo también abrí una aplicación de este tipo. Pero para tener esas omisiones en la lista de la pestaña de Historia, aún no he visto ningún puesto.

P.D. Y sí, después de aportar pruebas y todos los datos necesarios para reproducir el bug, por alguna razón se ignoró por completo durante toda una semana, aunque desde el principio se respondió, negándose a aceptar que hay un bug.

 
Anatoli Kazharski:

Ya he visto escrito que las flechas no siempre aparecen inmediatamente después de una operación. Yo también abrí una aplicación de este tipo. Pero aún no he visto tales omisiones en la lista de la pestaña de Historia.

Es necesario cambiar de pestaña varias veces, entonces el historial se vuelve correcto. Es muy desagradable durante la depuración.

 
fxsaber:

Hay que cambiar las pestañas varias veces, entonces el historial se vuelve correcto. Es muy molesto durante la depuración.

Sí, es muy molesto en algunos casos a la hora de desarrollar y depurar estrategias de trading.

No he notado que al cambiar las pestañas haya cambiado de alguna manera el contenido de la lista del historial:


 
Anatoli Kazharski:

No he notado que al cambiar de pestaña se cambie de alguna manera el contenido de la lista del historial:

Haga clic con el botón derecho del ratón y cambie Ofertas/Orden.

 
Anatoli Kazharski:

Sí, esto es un gran obstáculo en algunos casos a la hora de desarrollar y depurar estrategias de negociación.

No he notado que el cambio de pestañas haya cambiado el contenido de la lista del historial de ninguna manera:


Eso existe. Me salvo con un deslizador de velocidad y una pausa.
 
fxsaber:

Haga clic con el botón derecho y cambie Transacciones/Orden.

Sí, estas acciones restauran la lista del historial de acuerdos:


 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 
Todos los símbolos reales de la cuenta tienen la forma "EURUSD.hello". ¿Después de crear un "EURUSD" personalizado no habrá problemas al copiar desde el servicio de Señales?
 

Por favor, añada los siguientes valores

ENUM_DEAL_REASON

Identificador

Descripción

LÍMITE_DE_MOTIVO_DEL_TRATAMIENTO

La operación se ejecutó como resultado de la activación de una orden limitada

ACUERDO_RAZÓN_MERCADO

La operación se ejecutó como resultado de la activación de una orden de mercado

DEAL_REASON_STOP

La operación se ejecutó como resultado de una orden de suspensión que activó


Parece que no es necesario. Pero hay situaciones en las que la orden se ejecutó parcialmente, creando una operación, en cuyocaso se encontrará DEAL_ORDER, pero no estará en la tabla de historial, ya que la orden sigue viva.

En otras palabras, para averiguar el tipo de pedido que ha provocado la operación, no siempre es útil consultar el historial de pedidos. Si no queremos hacer un lío con la búsqueda de órdenes entre las "vivas y muertas", podemos simplemente añadir más banderas de ejecución (después de las banderas existentes) para mantener la compatibilidad con ENUM_ORDER_REASON yENUM_POSITION_REASON. Al mismo tiempo, es conveniente añadir los mismos indicadores aENUM_POSITION_REASON para que sean compatibles

POSITION_REASON_LIMIT  == DEAL_REASON_LIMIT
POSITION_REASON_MARKET == DEAL_REASON_MARKET
POSITION_REASON_STOP   == DEAL_REASON_STOP
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Сделка является отражением факта совершения торговой операции на основании ордера, содержащего торговый приказ. Каждая сделка описывается свойствами, позволяющими получить информацию о ней. Для чтения значений свойств используются функции вида Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая...
 

Una pregunta sobre OrderCalcMargin surgió en un hilo vecinohttps://www.mql5.com/ru/forum/216697/page3


Prueba: vamos a comprobar 2 formas diferentes de calcular el depósito sustituyendo diferentes precios de apertura.

#define  TOSTRING(A) #A+" = "+(string)(A)
void OnStart()
  {
   double margin_1=999,price_1;

   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=10.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=1.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
  }

// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin(const ENUM_ORDER_TYPE action,const string symbol,const double volume,const double price,double &margin)
  {
   double MarginInit,MarginMain;

   const bool Res=SymbolInfoMarginRate(symbol,action,MarginInit,MarginMain);

   margin=Res ? MarginInit*price*volume*SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)/
          (SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;

   return(Res);
  }

Aquí está el LOG

LF      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 88.712
KP      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
CR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19399834 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
ED      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 88.7
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.1904551 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
EP      0       04:28:05.464    test (AUDJPY,H1)        price_1=10.0 = 10.0
HK      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HH      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 2.95270069 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KN      0       04:28:05.464    test (AUDJPY,H1)        price_1=1.0 = 1.0
FS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 0.29527007 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

La función OrderCalcMargin no tiene en cuenta el precio de apertura al calcular el margen

Esto parece estar relacionado con el tipo de cambio de la moneda cotizada, que tiene que ser recalculado para la hora y el precio de apertura.

Si la moneda cotizada es el USD (y la moneda de la cuenta también es el USD), el margen calculado cambiará según el precio de apertura.

Registro para GBPUSD

KK      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 1.32354
CR      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.12 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.118 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
GD      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 1.32341
LS      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NQ      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11366667 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DG      0       05:25:15.763    test (GBPUSD,H1)        price_1=10.0 = 10.0
LM      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NO      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HM      0       05:25:15.763    test (GBPUSD,H1)        price_1=1.0 = 1.0
ED      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
OD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

¿Es un Bug o debería serlo?

OrderCalcMargin и проблема с ним связанная.
OrderCalcMargin и проблема с ним связанная.
  • 2017.10.04
  • www.mql5.com
Один советник работает на счёте MetaQuotes-Demo на семи валютных парах и на трёх парах реальном счёте робо. Итого 10 экземпляров советника запущено...