Bibliotecas: MT4Orders - página 28

 
Ilya Malev:

Por que ler o tópico, eu já descobri tudo.

Tenho tudo funcionando perfeitamente em vários EAs, sem problemas com a biblioteca

 
fxsaber:

Há muitos casos em que isso não acontece. Cada ordem de grade gerará dezenas de posições, e cada posição, ao ser fechada pelo mesmo TP, gerará dezenas de posições fechadas.

1) Para sua informação, as posições parciais no MT4 também não são geradas dessa forma (pelo menos nas corretoras normais), mas apenas com comentários "from#" e "to#". Algum outro argumento?

2) Na verdade, foi a sua biblioteca que falhou nesse momento específico porque, como já disse, as bibliotecas não são escritas para um mundo ideal, mas para o nosso mundo pecaminoso, imperfeito e miserável. Embora eu entenda perfeitamente sua posição, provavelmente eu mesmo nunca escreveria esse código. E, se eu o tivesse escrito, não discutiria com você sobre esse assunto e o refaria tranquilamente. Mas o problema é que eu não escrevi esse código :) Ok, obrigado pelo diálogo, vou pensar

 
Ilya Malev:

1) Para sua informação, as posições parciais no MT4 também não são geradas dessa forma (pelo menos nas corretoras normais), mas apenas com comentários "from#" e "to#". Você tem mais algum argumento?

Qualquer sistema que leve em conta o histórico de negociação de combate para a tomada de decisões é desonesto. A exceção é o histórico de negociações virtuais, pois nesse caso a execução é perfeita. Mas essa é uma história totalmente diferente.

2) Na verdade, é a sua biblioteca que não poderia suportar o "uso em combate" nesse momento específico, pois, como já disse, as bibliotecas são escritas não para o mundo ideal, mas para o nosso mundo pecaminoso, imperfeito e miserável. Embora eu entenda perfeitamente sua posição, eu provavelmente nunca escreveria esse tipo de código. E, se eu o tivesse escrito, não discutiria com você sobre esse assunto e o refaria tranquilamente. Mas o problema é que eu não escrevi esse código :) Ok, obrigado pelo diálogo, vou pensar

Os codificadores do MT4 não devem ter permissão para se aproximar do MT5, especialmente da biblioteca. Fico feliz que você não seja um deles.

É fato que um consultor MT4 torto pode não ser digerido pela biblioteca. Um consultor MT4 escrito corretamente - sem problemas.


ZY Você só precisa aprender a não adicionar SELECT_BY_TICKET para "facilitar".

 

Encontrei o problema de alterar um tíquete sem usar o SelectByTicket. Consegui contornar o problema da seguinte forma:

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

Encontrei o problema de alterar um tíquete sem usar o SelectByTicket. Consegui contornar o problema da seguinte forma:

Por favor, esclareça.

 
fxsaber:

Por favor, esclareça.

Nós meio que discutimos isso na época do processo de decisão.

Há algumas informações vinculadas a um pedido. E, ao definir novos pedidos, era necessário analisar esses dados para todos os pedidos do histórico.

 
Andrey Khatimlianskii:

Nós meio que discutimos isso na época, no processo de decisão.

Há algumas informações vinculadas a um pedido. E, ao configurar novos pedidos, era necessário analisar esses dados para todos os pedidos do histórico.

Entendi. Precisávamos entender como a posição estava sendo desperdiçada.

 

O OrderSend retorna ERR_TRADE_SEND_FAILED em vez 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, em meus erros de programação, ERR_TRADE_SEND_FAILED significa passar um tíquete inválido (já fechado ou nulo). Dessa forma, não consigo distinguir programaticamente a diferença.

 
Edgar:

O OrderSend retorna ERR_TRADE_SEND_FAILED em vez de TRADE_RETCODE_INVALID_PRICE:

Normalmente, em meus erros de programação, ERR_TRADE_SEND_FAILED significa passar um tíquete inválido (já fechado ou nulo). Dessa forma, não consigo perceber a diferença programaticamente.

#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 da execução do 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
 
Obrigado, senhor