Discussão do artigo "Ordens, posições e negócios no MetaTrader 5" - página 5

 

Aqui estão as informações do fxsaber sobre esseproblema:https://www.mql5.com/ru/forum/366029/page3#comment_22547881 https://www.mql5.com/ru/forum/366029/page3#comment_22547881


@RashidUmarov

peça aos desenvolvedores que respondam.

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.05.21
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 

Após a publicação dos freios do trabalho com o histórico, os desenvolvedores trabalharam muito para criar caches. Os freios desapareceram.

Talvez exista um mecanismo de armazenamento em cache mais econômico. Mas certamente é impossível permitir freios.


ZY Não há comentários sobre como trabalhar com o histórico da maneira mais rápida. No momento, a maneira 100% rápida é chamar apenas HistorySelect em todos os lugares.

HistorySelect(0, INT_MAX)
 
fxsaber:

Após a publicação dos freios do trabalho com o histórico, os desenvolvedores trabalharam muito para criar caches. Os freios desapareceram.

Talvez exista um mecanismo de armazenamento em cache mais econômico. Mas certamente é impossível permitir freios.


ZY Não há comentários sobre a maneira mais rápida de trabalhar com o histórico. No momento, a maneira 100% rápida é chamar apenas HistorySelect em todos os lugares.

Por que não
HistorySelect(t, INT_MAX)

onde t é uma data arbitrária que não é muito antiga e não muda de chamada para chamada (uma constante unificada para todo o programa)?

 
mktr8591:
Por que não

onde t é uma data arbitrária que não é muito antiga e não muda de chamada para chamada (uma constante, uniforme para todo o programa)?

Não tenho certeza de que isso tornará o cache menor.

 
fxsaber:

Não tenho certeza se isso tornaria o cache menor.

O consumo é reduzido. Eu costumava prescrevê-lo no início.

bool HistorySelect2( const datetime From, const datetime To )
{
  static const datetime NewFrom = ::TimeCurrent() - 24 * 3600 & 30; // -Mês.
  
  return(::HistorySelect(From ? From : NewFrom, To));
}

#define HistorySelect HistorySelect2

Mas tive que desistir por causa de problemas sérios.

 
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
  
  if (HistorySelect(0, INT_MAX))
  {
    PRINT(HistoryDealsTotal());
    PRINT(HistoryOrdersTotal());
    
    PRINT(MQLInfoInteger(MQL_MEMORY_USED));
    PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
  }
}

Execute o resultado no Terminal com um gráfico M1, 5.000 barras, um símbolo, sem recursos e sem gráficos.

TerminalInfoInteger(TERMINAL_MEMORY_USED) = 426
HistoryDealsTotal() = 134502
HistoryOrdersTotal() = 218740
MQLInfoInteger(MQL_MEMORY_USED) = 1
TerminalInfoInteger(TERMINAL_MEMORY_USED) = 789

É muito. 10 EAs síncronos (OrderSend) consomem 4 gigas. Duas opções:

  1. Abrir uma nova conta, transferir fundos para ela e continuar negociando com ela. Infelizmente, isso nem sempre é possível.
  2. Combinar todos os bots em um só por meio de assincronia(OrderSendAsync). Essa é uma variante muito difícil de detectar bugs em caso de negociação superativa.
No segundo ponto, ainda é necessário escrever um gerenciador (GUI e assim por diante) de bots incorporados em um único Expert Advisor.
 
fxsaber:



  1. Combine todos os bots em um só por meio de assincronia(OrderSendAsync). Variante muito pesada de captura de bugs em negociações superativas.

Não há outra maneira. (a menos, é claro, que você corte o histórico antigo e refaça todo o algoritmo de trabalho com o histórico, mas isso somente se o MQ não retornar a classificação antiga).

 

Olá, pessoal!

Seria útil que a @MetaQuotes atualizasse este artigo com as classes de negociação(CAccountInfo, CSymbolInfo, COrderInfo, CHistoryOrderInfo, CPositionInfo, CDealInfo, CTrade, CTerminalInfo). Desenvolver um EA sob o paradigma orientado a objetos poderia modificar (e simplificar) essas operações de sincronização de cache e obter dados sobre símbolos, ordens, posições, negócios, transações etc.

Estou certo?

Documentation on MQL5: Standard Library / Trade Classes / CAccountInfo
Documentation on MQL5: Standard Library / Trade Classes / CAccountInfo
  • www.mql5.com
CAccountInfo - Trade Classes - Standard Library - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 

Por favor, como calcular a comissão do pedido com lucro para que seja assim

" Lucro += lucro + swap + comissão "

 

Por favor, ajude com a resposta à pergunta!

Os indicadores de posição flutuante "Valor de mercado" e "Lucro" no terminal MT5 são calculados pelo próprio terminal com base nas cotações traduzidas e na especificação de símbolos, ou são traduzidos pelo servidor MT5 e armazenados em cache no disco?

Se forem armazenados em cache, é provável que ocorra uma dessincronização entre as cotações recebidas e os indicadores atuais de "Valor de mercado" e "Lucro"?