Bibliotecas: MT4Orders - página 28

 
fxsaber:

Hay muchos casos en los que no es así. Cada orden de rejilla generará docenas de posiciones, y cada posición, cerrándose por el mismo TP, generará docenas de posiciones cerradas.

1) Para tu información, las posiciones parciales en MT4 tampoco se generan así como así (al menos en brokers normales), sino sólo con comentarios "desde#" y "hasta#". ¿Algún otro argumento?

2) En realidad, es tu librería la que ha fallado en este momento concreto porque, como ya he dicho, las librerías no están escritas para un mundo ideal, sino para nuestro pecador, imperfecto y miserable mundo. Aunque entiendo perfectamente tu postura y probablemente yo mismo nunca escribiría un código así. Y si lo hubiera escrito, no discutiría contigo sobre este tema y lo reharía tranquilamente. Pero el problema es que yo no escribí ese código :) Vale, gracias por el diálogo, me voy a pensar

 
Ilya Malev:

1) Para tu información, las posiciones parciales en MT4 tampoco se generan así como así (al menos en los brokers normales), sino sólo con comentarios "desde#" y "hasta#". ¿Tienes más argumentos?

Cualquier sistema que tenga en cuenta el historial de trading de combate para la toma de decisiones está torcido. La excepción es el historial de operaciones virtuales, ya que ahí la ejecución es perfecta. Pero esa es otra historia.

2) De hecho, es tu biblioteca la que no podría soportar el "uso en combate" en este momento concreto, porque como ya he dicho las bibliotecas no están escritas para el mundo ideal, sino para nuestro pecador, imperfecto y miserable mundo. Aunque entiendo perfectamente tu postura y probablemente yo mismo nunca escribiría un código así. Y si lo hubiera escrito, no discutiría contigo sobre este tema y lo reharía tranquilamente. Pero el problema es que yo no escribí ese código :) Bueno, gracias por el diálogo, voy a ir a pensar

MT4-codificadores no se debe permitir acercarse a MT5, especialmente a la biblioteca. Me alegro de que usted no es uno de ellos.

Es un hecho, un torcido MT4-advisor no puede ser digerido por la biblioteca. Un MT4-asesor correctamente escrito - no hay problema.


ZY Sólo tienes que aprender a no añadir SELECT_BY_TICKET para "hacerlo más fácil".

 

Me he encontrado con el problema de cambiar un ticket sin usar SelectByTicket. Lo he solucionado así

                #ifdef __MQL5__
                        long ticket = OrderTicketOpen();
                        ticket = HistoryDealGetInteger( ticket, DEAL_ORDER );
                #endif 
 
Andrey Khatimlianskii:

Me he encontrado con el problema de cambiar un ticket sin usar SelectByTicket. Lo he solucionado así

Por favor, aclárelo.

 
fxsaber:

Por favor, aclárelo.

Ya lo discutimos en el proceso de decisión.

Hay cierta información vinculada a un pedido. Y al establecer nuevos pedidos, era necesario analizar estos datos para todos los pedidos del historial.

 
Andrey Khatimlianskii:

Lo discutimos entonces, en el proceso de decisión.

Hay cierta información vinculada a un pedido. Y al configurar nuevos pedidos, era necesario analizar estos datos para todos los pedidos del historial.

Entendido. Necesitábamos entender cómo se estaba desperdiciando la posición.

 

OrderSend devuelve ERR_TRADE_SEND_FAILED en lugar de TRADE_RETCODE_INVALID_PRICE:

2018.12.14 01:00:18.479 2016.02.11 15:40:40   failed buy stop 0.08 EURUSD.m at 1.13196 [Invalid price]
2018.12.14 01:00:18.479 2016.02.11 15:40:40   Alert: #4756,  Не удалось отправить торговый запрос: CommonExpert.mqh|2438 | OrderSend buy stop 0.08 @1.13196

Normalmente en mis errores de programación, ERR_TRADE_SEND_FAILED significa pasar un ticket no válido (ya cerrado o nulo). Y de esta forma no puedo distinguir la diferencia programáticamente.

 
Edgar:

OrderSend devuelve ERR_TRADE_SEND_FAILED en lugar de TRADE_RETCODE_INVALID_PRICE:

Normalmente en mis errores de programación, ERR_TRADE_SEND_FAILED significa pasar un ticket no válido (ya cerrado o nulo). Y de esta forma no puedo distinguir la diferencia programáticamente.

#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)

void OnStart()
{
  if (OrderSend(_Symbol, OP_SELLLIMIT, 1, Bid - 100 * _Point, 0, 0, 0) < 0)
  {
    Print(GetLastError());                     // ERR_TRADE_SEND_FAILED
    Print(MT4ORDERS::LastTradeResult.retcode); // TRADE_RETCODE_INVALID_PRICE
  }
}


Registro completo de ejecución del script

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 0
Request.symbol = EURUSD
Request.volume = 1.0
Request.price = 1.13473
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_SELL_LIMIT (3)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Result.retcode = 10015
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = Invalid price 0.082 ms
Result.request_id = 0
Result.retcode_external = 0

4756
10015
 
Gracias
 
Interesante lo de la comisión. MT5 la divide por la mitad a la entrada y salida de una operación (si una posición tiene 2 operaciones). OrderCommission devuelve 2x el tamaño de la comisión para las operaciones (¿se calcula por PositionID? No lo he mirado). Pero para obtener los mismos indicadores de informe como en el probador, tenemos que tener en cuenta la mitad de la comisión para las operaciones rentables, y la parte que se retiró al entrar en un comercio debe tenerse en cuenta en la pérdida total. Es decir, las operaciones rentables cuentan 1/2 de OrderCommission(), y las no rentables cuentan toda la comisión, y +1/2 por cada ganancia en la pérdida total.... Esto es en el caso más simple, cuando no hay entradas/salidas parciales, no quiero pensar en otros más complicados todavía))). Me pregunto si es lo mismo con OrderSwap()? P.D. No, parece que swap sólo se carga en la dirección de salida.
En general, genial la librería, gracias de nuevo a saber.