Bibliotecas: MT4Orders - página 87

 
fxsaber #:

No testador, para a primeira execução bem-sucedida de MT5-OrderSend/OrderSendAsync, é sempre MqlTradeResult.request_id == 0.

Considero esse comportamento uma falha por parte do MQ, pois o request_id deve começar com um.


Esse é um dos motivos pelos quais o MT4Orders não implementa o OrderSendAsync para o Tester. Há outro motivo menos bom(do livro).

Obrigado pelas informações adicionais!
 

Peço desculpas, mas não li todo o tópico. Para obter o número de posições abertas sem ordens, existe algum tipo de sobrecarga de OrdersTotal() ou preciso escrever esse código todas as vezes?

int GetOpenTradesCount()
{
    int count = 0;
    for (int i = 0; i < OrdersTotal(); i++)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Selecionar ordem por posição
        {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) // Contar apenas ordens de mercado
            {
                count++;
            }
        }
    }
    return count;
}
 
mbjen posições abertas sem ordens, existe algum tipo de sobrecarga de OrdersTotal() ou você precisa escrever um código semelhante todas as vezes:
#include <MT4Orders.mqh>

int GetOpenTradesCount1()
{
  return(PositionsTotal());
}

int GetOpenTradesCount2()
{
  return(OrdersTotal() - OrdersTotal(false));
}

Seu código original é melhor, pois considera uma ordem do MT5 para abrir uma posição como uma posição aberta. O que GetOpenTradesCount1 não fará.

Sua variante de origem é melhor porque não conta a ordem do MT5 para fechar uma posição. O que o GetOpenTradesCount2 não fará.

 
fxsaber #:

OrdersTotal(false)

'OrdersTotal' - contagem de parâmetros incorreta

 
mbjen #:

OrdersTotal(false)

'OrdersTotal' - contagem de parâmetros incorreta

#include <MT4Orders.mqh>
 
fxsaber #:
aa inclusão estava abaixo no código. Obrigado.
 
fxsaber #:

Sua variante original é melhor, pois conta a ordem do MT5 para abrir uma posição como uma posição aberta. O que GetOpenTradesCount1 não fará.

Sua variante de origem é melhor porque não conta a ordem do MT5 para fechar uma posição. O que o GetOpenTradesCount2 não fará.

e se a biblioteca virtual também estiver conectada, ela falhará em OrdersTotal(false)

 
// Lista de modificações:
// 26.03.2025
// Correção: OrderType lida melhor com os tipos de transação de saldo.
// Correção: no modo ByPass, ao trabalhar com o histórico de negociações, o número de chamadas para HistorySelect é reduzido.
// Adicionar: a macro MT4ORDERS_LIBRARY ativa o modo de biblioteca: #import "MT4Orders.ex5".
 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: MT4Orders

fxsaber, 2025.03.26 10:50 pm.

// Lista de modificações:
// 26.03.2025
// Correção: OrderType lida melhor com os tipos de transação de saldo.
// Correção: no modo ByPass, ao trabalhar com o histórico de negociações, o número de chamadas para HistorySelect é reduzido.
// Adicionar: a macro MT4ORDERS_LIBRARY ativa o modo de biblioteca: #import "MT4Orders.ex5".

Houve comentários justos de que a biblioteca causa uma séria lentidão na compilação. Por isso, adicionamos um modo alternativo de biblioteca completa na forma de biblioteca EX5 importada.


Velocidade de compilação.

Medições da velocidade de compilação no MT4/5 (MT5 - otimização máxima X64_Regular) do seguinte script de plataforma cruzada.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Como você aprendeu MQL4/5?

fxsaber, 2024.12.03 14:30

#define  MT4ORDERS_LIBRARY // modo de biblioteca: #importar "MT4Orders.ex5".
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006

bool Buy( const double Lots = 0.1, const string Symb = NULL, const string Comm = NULL )
{
  return(OrderSend(Symb, OP_BUY, Lots, SymbolInfoDouble(Symb, SYMBOL_ASK), 0, 0, 0, Comm) != -1);
}

bool Sell( const double Lots = 0.1, const string Symb = NULL, const string Comm = NULL )
{
  return(OrderSend(Symb, OP_SELL, Lots, SymbolInfoDouble(Symb, SYMBOL_BID), 0, 0, 0, Comm) != -1);
}

void OnStart()
{
  Buy();
  Sell();
}

MT4_b1440 MT5_b4885 + MT4Orders MT5_b4885 + MT4Orders_library
90 mseg 5050 mseg 255 mseg
6,0 KBytes 125,4 KBytes 13,3 KBytes

O código no novo modo é compilado no MT5 com velocidade semelhante à do MT4. A velocidade de compilação é mais rápida do que quando se usa, por exemplo, o CTrade. Isso ocorre porque todas as funções de negociação são importadas por analogia, como acontece no MT4 - o compilador não perde tempo com elas.


Há um impacto correspondente no tamanho do EX5.


Como habilitar.

Você só precisa criar um arquivo de duas linhas MQL5\Libraries\MT4Orders.mq5 e compilá-lo uma vez.

#property library

// #define MT4ORDERS_BYPASS_MAXTIME 1000000 // Tempo máximo (em µs) para aguardar a sincronização do ambiente de negociação.
// #define MT4ORDERS_AUTO_VALIDATION // As ordens de negociação são enviadas somente no caso de uma verificação de exatidão bem-sucedida
// #define MT4ORDERS_ORDERS_SORT // Formação do histórico de ordens do MT4 classificado por hora de fechamento/exclusão.
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006


Em seguida, em seu código, antes de ativar o MT4Orders, escreva uma macro.

#define  MT4ORDERS_LIBRARY // modo de biblioteca: #importar "MT4Orders.ex5".
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006


E a biblioteca não afetará mais a duração da compilação.


Sinais externos do modo.

Ao iniciar seu programa, você pode ver a presença da chamada MT4Orders na guia Dependencies (Dependências).

As DLLs não são usadas, o código-fonte é aberto.

Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
Учебник по MQL5: Расширенные средства языка / Разработка и подключение библиотек двоичных форматов / Создание ex5-библиотек и export функций
  • www.mql5.com
Для описания библиотеки следует добавить в исходный код главного (компилируемого) модуля директиву #property library (обычно, в начало файла)...
 
fxsaber #:

Houve comentários justos de que a biblioteca causa séria lentidão na compilação. Por isso, foi adicionado um modo alternativo de biblioteca completa na forma de biblioteca EX5 importada.


Velocidade de compilação.

Medições da velocidade de compilação no MT4/5 (MT5 - otimização máxima X64_Regular) do seguinte script de plataforma cruzada.


MT4_b1440 MT5_b4885 + MT4Orders MT5_b4885 + MT4Orders_library
90 mseg 5391 mseg 255 mseg

O código no novo modo é compilado no MT5 com velocidade semelhante à do MT4. A velocidade de compilação é mais rápida do que quando se usa, por exemplo, o CTrade. Como todas as funções de negociação são importadas por analogia, como acontece no MT4, o compilador não perde tempo com elas.


Como habilitar.

Você só precisa criar um arquivo de duas linhas MQL5\Libraries\MT4Orders.mq5 uma vez e compilá-lo.


Em seguida, em seu código, antes de ativar o MT4Orders, escreva uma macro.


E a biblioteca não afetará mais o tempo de compilação.


Sinais externos do modo.

Quando você executa seu programa, pode ver a presença da chamada MT4Orders na guia Dependencies (Dependências).

DLLs não são usadas, código-fonte aberto.

É uma péssima opção... um ancinho no chão.

Com muita frequência, o ex5 é declarado "obsoleto", e as diretivas #import também estão sujeitas a isso.