Ei pessoal! Sou novo no MQL5 e estou tentando adicionar elementos a um array. Este Vector é um Buffer de um indicador. Eu venho da linguagem python, e aí, só preciso usar a função append() para adicionar meus dados ao final do meu vetor. Meus dados serão fornecidos por eventos no DOM, então não é possível adicionar dados com um for(). Alguém poderia me ajudar nessa situação?
Muito obrigado antecipadamente!!
Seria interessante mostrar o código, mas falando assim recomendaria a voce ler a documentação com atenção. Nela é falado que quando definimos um buffer que irá ser plotado pelo mt5, quem gerencia o tamanho do buffer é o terminal do mt5. Logo, não podemos exceder seu tamanho alocado dinamicamente e nem apendar dados adicionais. Só podemos substitui-los.
Seria interessante mostrar o código, mas falando assim recomendaria a voce ler a documentação com atenção. Nela é falado que quando definimos um buffer que irá ser plotado pelo mt5, quem gerencia o tamanho do buffer é o terminal do mt5. Logo, não podemos exceder seu tamanho alocado dinamicamente e nem apendar dados adicionais. Só podemos substituir
What I need is, to plot the data that I calculated. I'm literally not using OnCalculate() events, only OnBookEvent. I want to calculate the total volume of orders in the DOM, both sell and buy, and plot the evolution of each event on the graph. I believe my mistake is in the way I add elements to Buffer.
//+------------------------------------------------------------------+ //| DOM.mq5 | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link " https://www.mql5.com " #property version "1.00" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_type1 DRAW_LINE #property indicator_type2 DRAW_LINE #property indicator_color1 Blue #property indicator_color2 Silver #property indicator_width1 2 #property indicator_width2 2 #property indicator_label1 "Volume Vendas" #property indicator_label2 "Volume Compras" double VendasBuffer[]; double ComprasBuffer[]; int j= 0 ; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit () { MarketBookAdd ( _Symbol ); Print ( "Adicionando Ativo" ); ArraySetAsSeries (ComprasBuffer, true ); ArraySetAsSeries (VendasBuffer, true ); SetIndexBuffer ( 2 , ComprasBuffer, INDICATOR_DATA ); SetIndexBuffer ( 1 , VendasBuffer, INDICATOR_DATA ); ArrayGetAsSeries (ComprasBuffer); ArrayGetAsSeries (VendasBuffer); return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- valor de retorno de prev_calculated para a próxima chamada return (rates_total); } MqlBookInfo DadosDOM[]; void OnBookEvent ( const string & symbol) {j=j+ 1 ; Print (j); bool getBook= MarketBookGet ( NULL ,DadosDOM); if (getBook) { long VolCompra= 0 ; long VolVenda= 0 ; int size= ArraySize (DadosDOM); for ( int i= 0 ;i<size;i++) { if (DadosDOM[i].type== 1 ) VolCompra=VolCompra +DadosDOM[i].volume; if (DadosDOM[i].type== 2 ) VolVenda=VolVenda +DadosDOM[i].volume; } ComprasBuffer[j]=VolCompra; VendasBuffer[j]=VolVenda; Print ( "COMPRA" , ComprasBuffer[j]); Print ( "VENDAS" , VendasBuffer[j]); } else { Print ( "Não foi possível obter dados do DOM " , Symbol ()); } } void OnDeinit ( const int reason) { Print ( "Tchau Abner, Espero que tenha Lucrado!!!" ); }
What I need is, to plot the data that I calculated. I'm literally not using OnCalculate() events, only OnBookEvent. I want to calculate the total volume of orders in the DOM, both sell and buy, and plot the evolution of each event on the graph. I believe my mistake is in the way I add elements to Buffer.'
Tu não pode fazer o "j+=1", remove isso e coloca no OnCalculate por exemplo "j=rates_total - 1;" . Respostas em inglês vou ignorar porque o forum é em lingua portuguesa se quiser use a tradução.
Além disso, tira do OnInit as chamadas a Array*AsSeries que não vejo necessidade e SetIndexBuffer inicia no valor 0 (zero) e não 1. Logo troca os locais onde estão 1 por 0 e 2 por 1.
- 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
Ei pessoal! Sou novo no MQL5 e estou tentando adicionar elementos a um array. Este Vector é um Buffer de um indicador. Eu venho da linguagem python, e aí, só preciso usar a função append() para adicionar meus dados ao final do meu vetor. Meus dados serão fornecidos por eventos no DOM, então não é possível adicionar dados com um for(). Alguém poderia me ajudar nessa situação?
Muito obrigado antecipadamente!!