Discussão do artigo "Outras classes na biblioteca DoEasy (Parte 70): extensão da funcionalidade e atualização automática da coleção de objetos-gráficos"
Limit Order, usando o botão DeletePending, gera muitos eventos OnChartEvent idênticos, mas deveria haver eventos diferentes, certo?
Ou, por meio de operações em massa, a exclusão de ordens limitadas também gera muitos eventos idênticos.
Se você fechar manualmente, os eventos serão sequenciais.
2023.03.07 14:58:31.385 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:57:59.055 - 2023.03.07 14:58:31.385 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090285 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 4718715 (123), G1: 8, G2: 4 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:57:58.395 - 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090282 at price 1.19640, sl 1.19490, tp 1.19790, Magic number 10223739 (123), G1: 12, G2: 9 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:58:00.613 - 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090287 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 6357115 (123), G1: 1, G2: 6 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:57:59.669 - 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090286 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 393339 (123), G1: 6 2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed 2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed 2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed 2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed
Ou, por meio de operações em massa, a exclusão de ordens limitadas gera muitos eventos idênticos
Se você fechar manualmente, os eventos serão sequenciais.
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Se estiver trabalhando no testador, saia //se(MQLInfoInteger(MQL_TESTER)) // retornar; int idx=id-CHARTEVENT_CUSTOM; //--- Extrair de lparam (1) os milissegundos da hora do evento, (2) a causa, (3) a origem do evento e (4) definir a hora exata do evento ushort msc=engine.EventMSC(lparam); ushort reason=engine.EventReason(lparam); ushort source=engine.EventSource(lparam); long time=::TimeCurrent()*1000+msc; //--- Processamento de eventos comerciais if(idx>TRADE_EVENT_NO_EVENT && idx<TRADE_EVENTS_NEXT_CODE) { //--- Obter a lista de todos os eventos de negociação CArrayObj *list=engine.GetListAllOrdersEvents(); if(list==NULL) return; //--- obter o deslocamento do índice do evento em relação ao final da lista //--- no testador, o deslocamento é passado pelo parâmetro lparam para o manipulador de eventos //--- não no testador - cada evento é enviado um de cada vez e tratado em OnChartEvent() int shift=(engine.IsTester() ? (int)lparam : 0); CEvent *event=list.At(list.Total()-1-shift);
Foi assim que corrigi o problema e parece que está funcionando.
int shift=(engine.IsTester() ? (int)lparam : 0); static int NEvents =list.Total()-1-shift; CEvent *event=list.At(NEvents); NEvents++;
Foi assim que resolvi o problema e parece que está funcionando.
Você quis dizer que a biblioteca envia os eventos errados para o manipulador de eventos?
Sim, foi isso que eu quis dizer. Acho que consertei o problema, mas não tenho certeza sobre a solução, pois não entendo realmente quais seriam as desvantagens.
int shift=(engine.IsTester() ? (int)lparam : 0); static int NEvents =list.Total()-1-shift; CEvent *event=list.At(NEvents); NEvents++; if(event==NULL) { event=list.At(list.Total()-1-shift); if(event==NULL)return; }

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Outras classes na biblioteca DoEasy (Parte 70): extensão da funcionalidade e atualização automática da coleção de objetos-gráficos foi publicado:
Neste artigo, vamos expandir a funcionalidade dos objetos-gráficos, criaremos a navegação em gráficos, geraremos capturas de tela, salvaremos e aplicaremos modelos aos gráficos. Faremos também uma atualização automática da coleção de objetos-gráficos, suas janelas e indicadores.
Resta testar a criação de capturas de tela do gráfico atual. Cada vez que o botão é pressionado, uma captura de tela do gráfico é criada com um determinado tamanho. Primeiro pressionamento - captura de tela 800x600, segundo pressionamento - captura de tela 750x562, terceiro pressionamento - captura de tela com o tamanho do gráfico atual:
Depois de criar três capturas de tela com diferentes resoluções, com as devidas mensagens no log,
Também examinamos o conteúdo da pasta na qual essas capturas de tela são salvas.
Antes de fazer as capturas de tela, movi o cursor em lugares diferentes das duas janelas do gráfico atual, e nos comentários do gráfico podemos ver a hora, preço, número da subjanela e as coordenadas X e Y do cursor em pixels. A coordenada Y do cursor tem dois valores. O primeiro valor exibe a coordenada Y relativa às coordenadas iniciais da janela do símbolo principal, o segundo valor exibido (entre colchetes) mostra o valor da coordenada Y relativa à borda superior da janela onde o cursor está localizado.
Autor: Artyom Trishkin