Se esses artigos se tornarem uma série, será ótimo!!!!
Como senti falta desses artigos há cerca de quatro anos, quando comecei a aprender a escrever código.
E agora ainda encontro neles coisas que eu ainda não sabia.
Especialmente o artigo anterior sobre StringFormat e PrintFormat é muito informativo, considerando que a ajuda sobre essas funções é muito ruim.
Agradeço ao autor pelos artigos interessantes e necessários!
- www.mql5.com
Artigo muito bom. Onde está o arquivo mqh para fazermos o download?
Os arquivos não estão anexados ao artigo, pois ele foi concebido como um tipo de informação de referência estendida. Você pode simplesmente usar os códigos de copiar e colar do artigo no editor de código do MetaEditor.
Os arquivos não são anexados ao artigo, pois ele foi concebido como um tipo de informação de referência estendida. Você pode simplesmente usar os códigos de copiar e colar do artigo no editor de código do MetaEditor.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Vladimir Karputov, 2016.10.15 08:38 AM
Por favor, escreva em russo na parte russa do fórum.Acho que me esqueci dela. Obrigado.
//+------------------------------------------------------------------+ //| Registra a descrição de todos os campos da estrutura MqlRates. //+------------------------------------------------------------------+ void MqlRatesPrint(const string symbol,const ENUM_TIMEFRAMES timeframe,const MqlRates &rates, const bool short_entry=true,const uint header_width=0,const uint indent=0,int index=WRONG_VALUE) { //--- Declare uma variável para armazenar o resultado string res=""; //--- Obter o número de casas decimais e o valor da cadeia de caracteres do período de tempo int dg=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); string tf=StringSubstr(EnumToString(timeframe==PERIOD_CURRENT ? Period() : timeframe),7); string num=(index==WRONG_VALUE ? ":" : StringFormat("[%ld]:",index)); //--- Se for um registro curto - dados de barra de saída para o registro no formato Symbol TF[index]: Time, O, H, L, C, S, V/VR if(short_entry) { res=StringFormat("%s %s%s %s, O: %.*f, H: %.*f, L: %.*f, C: %.*f, S: %2ld, V: %5lld, RV: %lld", symbol,tf,num,(string)rates.time,dg,rates.open,dg,rates.high,dg,rates.low,dg,rates.close,rates.spread,rates.tick_volume,rates.real_volume); Print(res); } /* Exemplo de saída: GBPUSD H1: 2023.07.21 08:00:00, O: 1.28794, H: 1.28848, L: 1.28772, C: 1.28772, S: 4, V: 448, RV: 0 */ //--- Caso contrário. else { //--- criar uma string descrevendo todos os dados da estrutura com recuo e largura especificada do campo de cabeçalho res=StringFormat("%s %s%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",symbol,tf,num, MqlRatesTime(rates,header_width,indent), MqlRatesOpen(symbol,rates,header_width,indent), MqlRatesHigh(symbol,rates,header_width,indent), MqlRatesLow(symbol,rates,header_width,indent), MqlRatesClose(symbol,rates,header_width,indent), MqlRatesTickVolume(rates,header_width,indent), MqlRatesSpread(rates,header_width,indent), MqlRatesRealVolume(rates,header_width,indent) ); //--- Emite a string recebida para o livro de registros Print(res); } /* Exemplo de saída (se Last não for nulo): Time: 2023.07.20 14:42:33 Bid: 1.28958 Ask: 1.28962 Last: 1.28947 Volume: 33 Time msc: 2023.07.20 14:42:33.401 Flags: BID|ASK Volume Real: 33.45 Exemplo de saída (se Last for nulo): Time: 2023.07.20 14:42:33 Bid: 1.28958 Ask: 1.28962 Time msc: 2023.07.20 14:42:33.401 Flags: BID|ASK */ } //+------------------------------------------------------------------+
Proponho completar a funcionalidade.
string GetPrintSource( const string Source );
Retorna a origem da função de impressão pela origem da estrutura.
string GetPrintSource( const string Source ) { return("string ToString( const STRUCT &Data ) { return(\"i = \" + (string)Data.i); }"); } void OnStart() { Print(GetPrintSource("struct STRUCT { int i; };")); }Fiz algo semelhante aqui, mas com entradas.
- www.mql5.com
- 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 Estruturas em MQL5 e formas de imprimir seus dados foi publicado:
Neste artigo, examinaremos as estruturas MqlDateTime, MqlTick, MqlRates, MqlBookInfo e as maneiras de imprimir os dados dessas estruturas. Para imprimir todos os campos de uma estrutura, existe a função padrão ArrayPrint(), que exibe os dados contidos em um array com o tipo da estrutura processada em um formato de tabela conveniente.
As estruturas MqlParam e MqlTradeRequest são usadas para transmitir informações técnicas para a criação de indicadores e o envio de solicitações de negociação para o servidor. Preenchemos os campos necessários das estruturas de acordo com o resultado desejado ao enviar os dados na estrutura preenchida. Ou seja, essas estruturas não precisam necessariamente imprimir os dados preenchidos nela pelo programador.
Por outro lado, as outras estruturas retornam resultados de solicitações, e cada campo é preenchido pelo subsistema do terminal ou pelo servidor de negociação. Obter dados dessas estruturas, analisar os campos preenchidos programaticamente ou imprimir no log para análise manual são convenientes e essenciais tanto para a tomada de decisões programáticas quanto para a compreensão e busca de erros lógicos.
Para imprimir todos os campos de uma estrutura, existe a função padrão ArrayPrint(), que exibe os dados em formato de tabela contidos em um array com o tipo da estrutura processada. No entanto, às vezes é necessário imprimir os dados de uma estrutura em um formato diferente, que pode ser mais conveniente do que uma representação de tabela. Por exemplo, imprimir todos os campos de uma estrutura em uma única linha, com cabeçalhos e dados correspondentes. Isso pode ser mais conveniente para a análise de grandes conjuntos de dados. Ao mesmo tempo, às vezes é necessário ver uma representação mais detalhada, com descrições dos campos da estrutura e uma apresentação diferente dos dados correspondentes.
Autor: Artyom Trishkin