Bibliotecas: MT4Orders - página 22

 
fxsaber:

Isso não deveria afetar o tempo real.

Infelizmente, para mim, afeta.

Há um botão que exibe/oculta o histórico de transações. É claro que não faz sentido exibir todas elas, mas muitas vezes você precisa selecionar várias dezenas de "suas próprias" por símbolo, mágica ou comentário entre milhares de outras. É aí que começam os freios. A ideia é armazenar em cache a lista de "próprios" e atualizá-la somente com novos negócios históricos.

Também vi um corretor com falhas que reencaixava ordens de mercado, e um Expert Advisor em funcionamento podia gerar cem mil ordens reencaixadas no histórico em uma hora. Em seguida, o próprio terminal foi suspenso....

 
fxsaber:

Preciso de um exemplo de um TS em que o histórico de negociações (não o histórico de preços) afete significativamente o tempo de backtest.

Como uma fantasia: construir uma curva de equilíbrio em negociações históricas e calcular o lote de novas negociações dependendo da inclinação da curva.

Se você não mantiver seu cache, terá que vasculhar o histórico completamente antes de cada negociação. Mas aqui, é claro, é mais fácil coletar valores de saldo em uma matriz, pois não é necessário armazenar todas as negociações.

 
Andrey Khatimlianskii:

Eu, infelizmente, estou tendo um efeito.

Há um botão que, ao ser pressionado, exibe/oculta o histórico de transações. É claro que não faz sentido exibir todas elas, mas muitas vezes você precisa selecionar várias dezenas de "suas próprias" por símbolo, mágica ou comentário entre milhares de outras. É aí que começam os freios. A ideia é armazenar em cache a lista dos "nossos" e atualizá-la somente com novos negócios históricos.

Eu entendo o problema. Sim, o cache completo incorporado ao sistema bíblico já deveria ter sido feito. Terei que pensar em como implementá-lo.

Também vi um corretor com falhas que reenviava ordens de mercado, e um Expert Advisor em funcionamento podia gerar cem mil ordens reenviadas no histórico em uma hora. Em seguida, o próprio terminal foi suspenso....

Eu gostaria de ver essa corretora maravilhosa.

 
Andrey Khatimlianskii:

Como uma fantasia: construção da curva de equilíbrio por meio de negócios históricos e cálculo do lote de novos negócios dependendo da inclinação da curva.

Se você não mantiver seu próprio cache, terá que vasculhar o histórico completamente antes de cada negociação. Mas aqui, é claro, é mais fácil coletar valores de saldo em uma matriz, não é necessário armazenar todas as negociações.

Eu pensei nisso, mas esse é o ponto em que o VR de saldo é imediatamente sugerido. Paradoxalmente, parece que o armazenamento em cache do histórico de negociações é necessário apenas para o uso em combate (não para o Tester).

 
fxsaber:

Eu entendo o problema. Sim, o cache completo incorporado à biblah ainda é necessário. Teremos que pensar em como implementá-lo.

Idealmente, será suficiente armazenar um tíquete DEAL_ENTRY_IN para cada negociação, porque 99% do tempo GetPositionDealIn (e HistorySelectByPosition nele) é executado.


fxsaber:

Gostaria muito de ver esse excelente corretor.

PrimeXM-LiveUK.

Essa é uma ponte de muleta para o Saxo Bank.

 
Andrey Khatimlianskii:

Idealmente, será suficiente armazenar o tíquete DEAL_ENTRY_IN para cada negociação, porque 99% das vezes GetPositionDealIn (e nele - HistorySelectByPosition) é executado.

A comparação de hash com o histórico de negociação já foi feita há muito tempo. Portanto, provavelmente o ideal é se aprofundar no lado genérico.

Como motivação para aprender esse método, ele serve! Em algum momento do verão, em um ambiente tranquilo....

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 

Atualização do fxsaber:

// 30.05.2018
// Acrescentar: trabalho acelerado com histórico comercial, selecionado uma média de ouro de realizações entre desempenho e
// consumo de memória - importante para VPS. É usada a biblioteca genérica padrão.
// Se você não quiser usar a biblioteca Generic, o modo antigo de trabalhar com o histórico está disponível.
// Para fazer isso, você precisa escrever a seguinte linha na biblioteca MT4Orders ANTES da biblioteca MT4Orders
//
// #define MT4ORDERS_FASTHISTORY_OFF // Desative a implementação do histórico de negociação rápida - não use a biblioteca genérica.

Trabalhar com um longo histórico agora é muito fácil!

Moderadores, se tiverem uma chance, carreguem o código no banco de dados.

Arquivos anexados:
MT4orders.mqh  77 kb
 
Andrey Khatimlianskii:

Atualização do fxsaber:

Trabalhar com um longo histórico agora é muito fácil!

Moderadores, se puderem, carreguem o código no banco de dados.

Obrigado, atualizado em todos os idiomas

 

Eu uso essa biblioteca em meus Expert Advisors MT4.


Encontrei um momento estranho:

Se o teste for feito nos servidores da Metaquotes - demo, a biblioteca funciona bem. (por exemplo, ao abrir uma ordem)

Se você testar o broker fhtm demo, a função OrderSend abrirá uma transação, mas retornará um erro.

      int ticket=OrderSend(_Symbol,type,lot,price,0,0,0,comment_,magic,0,clrDarkSlateBlue);

Após a depuração, ticket = -1;

O texto do registro está abaixo:

Ao mesmo tempo, o registro também mostra uma mensagem de que tudo está normal.

Por que pode haver esse problema?

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::AccountInfoString(ACCOUNT_SERVER) = ForexTimeFXTM-Demo01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) (bool)::TerminalInfoInteger(TERMINAL_CONNECTED) = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoInteger(TERMINAL_PING_LAST) = 55335

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoDouble(TERMINAL_RETRANSMISSION) = 0.8875739644970414

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoInteger(TERMINAL_BUILD) = 1835

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) (bool)::TerminalInfoInteger(TERMINAL_X64) = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Res = false

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) MT4ORDERS::OrderSendBug = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.action = TRADE_ACTION_DEAL (1)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.magic = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.order = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.symbol = EURUSD

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.volume = 0.01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.price = 1.17681

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.stoplimit = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.sl = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.tp = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.deviation = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type = ORDER_TYPE_BUY (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type_filling = ORDER_FILLING_FOK (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type_time = ORDER_TIME_GTC (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.expiration = 1970.01.01 00:00:00

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.comment =

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.position = 2210821620

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.position_by = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.retcode = 10009

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.deal = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.order = 2210821775

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.volume = 0.01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.price = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.bid = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.ask = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.comment = Request executed 190.826 + 1000.396 ms

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.request_id = 154

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.retcode_external = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) MT4ORDERS: não sincroniza com o histórico! por favor, envie os registros para fxsaber!

2018.06.08 22:55:47.197 EA MT5 (EURUSD,M1) OrderSend with error 4754



[Excluído]  
Rashid Umarov:

Obrigado, atualizado em todos os idiomas

Também seria bom ter o fxsaber de volta.