MT5 e la velocità in azione - pagina 32

 
Renat Fatkhullin:

Per favore, rispondete allo stato di questa rubrica.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Nuova versione di MetaTrader 5 build 2560: miglioramenti nel sistema di apprendimento incorporato

fxsaber, 2020.08.16 23:02

Storia del trading -> Posizioni -> Colonna dei commenti è vuota per tutti i trade. Questo deve essere un errore.

Non solo è vuoto, ma mangia anche un'enorme fetta di spazio utilizzabile.

 
fxsaber:

https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties#enum_order_state

Lo Started-state non avviene dopo un OrderSendAsync riuscito?

Lo stato può verificarsi, ma il biglietto no.

L'ordine ha semplicemente superato un controllo di correttezza formale, nemmeno una corrispondenza di mercato. L'ordine asincrono è stato semplicemente passato sulla pipeline e il suo destino sarà deciso altrove.

 
fxsaber:

Per favore, rispondete allo stato di questa rubrica.

Non solo è vuoto, ma mangia un'enorme fetta di spazio utilizzabile.

Sì, proprio così.

Si sono dimenticati di spostare correttamente il commento quando si raccolgono le posizioni virtuali dagli affari nella storia. Risolviamo il problema.

 
Renat Fatkhullin:

Lostato può verificarsi, ma il biglietto no.

Questo stato non può essere visto perché OrdersTotal() non cambia.

 
fxsaber:

Questo stato non può essere visto perché OrdersTotal() non cambia.

Non bussare a una porta mancante.

Ho spiegato in dettaglio - "l'ordine è stato controllato per la correttezza formale e inviato da qualche parte". Questo ordine non ha un numero, è stato solo passato al passo successivo del nastro trasportatore. Gli verrà dato un numero solo quando passerà la coda di esecuzione.

Non è possibile ottenere altre informazioni sul pacco asincrono. Il tuo stato di mercato/trading non cambierà fino a quando non riceverai un dettaglio passo dopo passo sulla tua richiesta asincrona dopo un certo tempo, che puoi catturare in OnTradeTransaction.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Renat Fatkhullin:

Non bussare a una porta assente.

Ho spiegato in dettaglio - "l'ordine è stato controllato per la correttezza formale e inviato da qualche parte". Questo ordine non ha un numero, è stato appena passato al passo successivo del nastro trasportatore. Gli verrà dato un numero solo quando passerà la coda di esecuzione.

Non è possibile ottenere altre informazioni sul pacco asincrono. Il vostro stato di mercato/trade non cambierà fino a quando non otterrete un dettaglio passo per passo sulla vostra richiesta asincrona dopo un certo tempo, che potete catturare in OnTradeTransaction.

Grazie per il chiarimento, indagherò.

 

La storia può essere cresciuta.

Ma su b2617 questo EA è tornato agli avvisi.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

MT5 e la velocità in azione

fxsaber, 2020.09.08 19:46

// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}
 

Controlla la beta 2619, per favore.

Abbiamo fatto una serie di ottimizzazioni per accelerare il campionamento della storia. C'è stato un caso di invalidazione forzata della cache.

 
Renat Fatkhullin:

Controlla la beta 2619, per favore.

Abbiamo fatto una serie di ottimizzazioni per accelerare il campionamento della storia. C'è stato un caso di invalidazione forzata della cache.

L'accelerazione è avvenuta, ma purtroppo per qualche motivo l'aggiornamento della cache non è in un millisecondo, quindi avvisa ad ogni passo in cui la storia viene aggiornata.

2020.09.24 05:17:49.541 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:49.543 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:50.526 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:50.527 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:51.569 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:51.571 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:52.530 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:52.532 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.


Per favore, provatelo su una storia più grande.


Suppongo che questo millisecondo sia dovuto all'allocazione di memoria per il refresh della cache. Nient'altro sembra rallentarlo.

 
fxsaber:

Grazie per il chiarimento, lo esaminerò.

Mettete le vostre bandiere, è un vecchio argomento.