Exportar Cotações "Observação de Mercado" para Excel

 

Olá,


Alguem sabe se é possível exportar cotações do "Observação de Mercado" para Excel?


Porém não um-a-um, e sim de um grupo de ativos que está no painel?


Grato.

 

Olá Japa Trader,

veja esse programa, dei uma olhada bem rápida e parece que atende as suas necessidades, basta alterar o layout de saída.

Att.

Rogério

sHistoryExport - roteiro prático para exportar os dados históricos no formato do МetaТrader 4
sHistoryExport - roteiro prático para exportar os dados históricos no formato do МetaТrader 4
  • votos: 42
  • 2014.01.14
  • Andrey Khatimlianskii
  • www.mql5.com
Exportação de todos os instrumentos necessários e períodos gráficos em um clique com a verificação e o carregamento do histórico.
 
Rogerio Giannetti Torres:

Olá Japa Trader,

veja esse programa, dei uma olhada bem rápida e parece que atende as suas necessidades, basta alterar o layout de saída.

Att.

Rogério


Fantástico Rogerio!

Testei e atende em parte, mas é muito legal.

Ele exportou os dados para um arquivo CSV. Pena que ele abre um arquivo .CSV para cada ativo que está no "Observação de Mercado".


Será que há algo para mexer no código para exportar todos os ativos para um único .CSV?


//+------------------------------------------------------------------+
//|                                               sHistoryExport.mq5 |
//|                                   Copyright 2012-2013, komposter |
//|                                         http://www.komposter.me/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012-2013, komposter"
#property link      "http://www.komposter.me/"
#property version   "2013.03.28"

#property script_show_inputs

#include <komposter\CheckHistory.mqh>
#include <komposter\String.mqh>
#include <Files\FileTxt.mqh>
#include <Files\FileBin.mqh>

input string                                    Main_Properties         = "";           // Main properties:
input string                                    SymbolsList                             = "all";        // * List of symbols (or "all" MarketWatch symbols)
input string                                    TimeFramesList                  = "D1"; // * List of TFs (or "all" MT4 TFs)
input int                                               BarsToDownload                  = 2;            // * Bars to download (0 - all visible in MT)

#define OFFLINE_HEADER_SIZE 148 // LONG_VALUE + 64 + 12 + 4 * LONG_VALUE + 13 * LONG_VALUE
#define OFFLINE_RECORD_SIZE 44  // 5 * DOUBLE_VALUE + LONG_VALUE

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{
        uint start = GetTickCount();

//--- Get symbols from list
        string strSymbols = SymbolsList;
        if ( strSymbols == "all" || strSymbols == "" )
        {
                strSymbols = "";
                for ( int s = SymbolsTotal( true )-1; s >= 0; s -- )
                {
                        StringAdd( strSymbols, SymbolName( s, true ) );
                        if ( s != 0 ) StringAdd( strSymbols, "," );
                }
        }

        string  SymbolsName[];
        int             SymbolsCount = StringToArray( strSymbols, SymbolsName );
        if ( SymbolsCount <= 0 )
        {
                Alert( "Invalid SymbolsList (\"", SymbolsList, "\")!" );
                return;
        }

//--- Get TFs from list
        string strTimeFrames = TimeFramesList;
        if ( strTimeFrames == "all" || strTimeFrames == "" ) strTimeFrames = "M1,M5,M15,M30,H1,H4,D1";

        string  PeriodsName[];
        int             PeriodsCount = StringToArray( strTimeFrames, PeriodsName );
        if ( PeriodsCount <= 0 )
        {
                Alert( "Invalid TimeFramesList (\"", TimeFramesList, "\")!" );
                return;
        }

//--- Get bars count
        int BarsCount = BarsToDownload, MaxBars = TerminalInfoInteger( TERMINAL_MAXBARS );
        if ( BarsCount <= 0 || BarsCount > MaxBars ) BarsCount = MaxBars;

//--- 
        int files_count = 0;
        for ( int s = 0; s < SymbolsCount; s ++ )
        {
                for ( int p = 0; p < PeriodsCount; p ++ )
                {
                   Comment( "Downloading history and writing files: ", DoubleToString( (PeriodsCount*s+p)/double(SymbolsCount*PeriodsCount)*100.0, 1 ), "% complete..." );
                        CheckLoadHistory( SymbolsName[s], StringToPeriod( PeriodsName[p] ), BarsCount );
                        if ( WriteHistoryToFile( SymbolsName[s], StringToPeriod( PeriodsName[p] ), BarsCount ) ) files_count ++;
                }
        }

//---
        Alert( "History export finished within ", DoubleToString( (GetTickCount() - start)/1000.0, 1 ), " sec! ", IntegerToString( files_count ), " files have been written to:\n", 
                                TerminalInfoString( TERMINAL_DATA_PATH ), "\\MQL5\\Files\\History (" + AccountInfoString( ACCOUNT_SERVER ) + ")\\" );
        Comment( "" );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool WriteHistoryToFile( string symbol, ENUM_TIMEFRAMES period, int bars_count )
{
        uint start = GetTickCount();

        CFileTxt FileTxt;
        CFileBin FileBin;

        MqlRates rates_array[];
        ArraySetAsSeries( rates_array, true );

        int copy_count = CopyRates( symbol, period, 0, bars_count, rates_array );
        if ( copy_count < 0 ) return(false);

        int digits =(int)SymbolInfoInteger( symbol, SYMBOL_DIGITS );
        int period_s = PeriodSeconds( period ) / 60;

        // Open a file
        FileTxt.Open( "History (" + AccountInfoString( ACCOUNT_SERVER ) + ")\\" + symbol + PeriodToString ( period   ) + ".csv", FILE_WRITE );
        FileBin.Open( "History (" + AccountInfoString( ACCOUNT_SERVER ) + ")\\" + symbol + IntegerToString( period_s ) + ".hst", FILE_ANSI|FILE_WRITE );

//---
   int          version         = 400;
   string       c_copyright     = "Copyright 2012-2013, komposter";
   int          i_unused                [13];

   FileBin.Seek                         ( 0, SEEK_SET );
   FileBin.WriteInteger         ( version );
   FileBin.WriteString          ( c_copyright, 64 );
   FileBin.WriteString          ( symbol, 12 );
   FileBin.WriteInteger         ( period_s );
   FileBin.WriteInteger         ( digits );
   FileBin.WriteInteger         ( (int)TimeCurrent() );
   FileBin.WriteInteger         ( (int)TimeCurrent() );
   FileBin.WriteArray           ( i_unused, 0, 13 );

//---
        for ( int i = copy_count-1; i > 0; i -- )
        {
                string str_write = "";
                StringConcatenate( str_write
                                                                        ,                TimeToString( rates_array[i].time, TIME_DATE )
                                                                        , ",", TimeToString( rates_array[i].time, TIME_MINUTES )
                                                                        , ",", DoubleToString( rates_array[i].open      , digits )
                                                                        , ",", DoubleToString( rates_array[i].high      , digits )
                                                                        , ",", DoubleToString( rates_array[i].low               , digits )
                                                                        , ",", DoubleToString( rates_array[i].close     , digits )
                                                                        , ",", DoubleToString( rates_array[i].tick_volume, 0 )
                                                                        , "\n" );
                FileTxt.WriteString( str_write );

//---
                FileBin.WriteInteger    ( (int)rates_array[i].time );
                FileBin.WriteDouble     (  rates_array[i].open );
                FileBin.WriteDouble     (  rates_array[i].low );
                FileBin.WriteDouble     (  rates_array[i].high );
                FileBin.WriteDouble     (  rates_array[i].close );
                FileBin.WriteDouble     (  rates_array[i].tick_volume );
        }

        Print( symbol, ", ", EnumToString( period ), ": ", IntegerToString( copy_count ), " bars have been written to \"", FileTxt.FileName(), "\" and \"", FileBin.FileName(), "\" within ", DoubleToString( (GetTickCount() - start)/1000.0, 1 ), " sec!" );
        FileTxt.Close();
        FileBin.Close();

        return(true);
}
 

Eae Japa,

conseguiu alterar o programa ?

 
Rogerio Giannetti Torres:

Eae Japa,

conseguiu alterar o programa ?


Ola!

Infelizmente não...

Consegui rodar ele perfeitamente, porém gostaria ficassem tudo num unico arquivo.

:/

 

Bom Japa,

Você pode usar o DOS para concatenar os arquivos desejados é bem simples e o melhor é de graça:

Abra o prompt do DOS e vá para pasta do MT5 onde são gravados os arquivos, no meu caso:

cd C:\Users\Rgtorres\AppData\Roaming\MetaQuotes\Terminal\FB9A56D617EDDDFE29EE54EBEFFE96C1\MQL5\Files>


Concatene os arquivos num único arquivo usando um dos comandos abaixo:

C:\Users\Rgtorres\AppData\Roaming\MetaQuotes\Terminal\FB9A56D617EDDDFE29EE54EBEFFE96C1\MQL5\Files>copy COTEURUSD.txt + COTUSDJPY.TXT + COTGBPUSD.TXT   TUDO.TXT

ou  

C:\Users\Rgtorres\AppData\Roaming\MetaQuotes\Terminal\FB9A56D617EDDDFE29EE54EBEFFE96C1\MQL5\Files>type  COT*.txt >>  TUDO.txt  


Por fim, depois que aprendeu a usar os comandos acima, coloque-os  num arquivo com extensão .bat  na pasta do WINDOWS, para rodar a concatenação basta digitar o nome desse arquivo

na janela <EXECUTAR>.

 
Rogerio Giannetti Torres:

Bom Japa,

Você pode usar o DOS para concatenar os arquivos desejados é bem simples e o melhor é de graça:

Abra o prompt do DOS e vá para pasta do MT5 onde são gravados os arquivos, no meu caso:

cd C:\Users\Rgtorres\AppData\Roaming\MetaQuotes\Terminal\FB9A56D617EDDDFE29EE54EBEFFE96C1\MQL5\Files>


Concatene os arquivos num único arquivo usando um dos comandos abaixo:

C:\Users\Rgtorres\AppData\Roaming\MetaQuotes\Terminal\FB9A56D617EDDDFE29EE54EBEFFE96C1\MQL5\Files>copy COTEURUSD.txt + COTUSDJPY.TXT + COTGBPUSD.TXT   TUDO.TXT

ou  

C:\Users\Rgtorres\AppData\Roaming\MetaQuotes\Terminal\FB9A56D617EDDDFE29EE54EBEFFE96C1\MQL5\Files>type  COT*.txt >>  TUDO.txt  


Por fim, depois que aprendeu a usar os comandos acima, coloque-os  num arquivo com extensão .bat  na pasta do WINDOWS, para rodar a concatenação basta digitar o nome desse arquivo

na janela <EXECUTAR>.


Gente do ceu, puxou comando do DOS, hehehe

Vou testar e retorno.


:)

 
Japa Trader Br:

Gente do ceu, puxou comando do DOS, hehehe

Vou testar e retorno.


:)


Deu uma mensagem errada "A sintaxe do comando está incorreta".

O script gera arquivos CSV, não será isso o problema?


Deixa eu explicar o motivo da minha necessidade, exportar as cotações para poder abrir no excel, importar e usar para calcular alguns dados na planilha.


Abs.

 

Eae Japa

eu te  dei um exemplo, você tem que alterar o nome e a extensão dos arquivos conforme gerado pelo programa.


A sintaxe está correta, veja o exemplo abaixo, para concatenar os arquivos  arqA.txt ,  arqB.txt , arqC.txt  gravando o resultado no arquivo tudo.txt

C:>copy  arqA.txt +  arqB.txt + arqC.txt   tudo.txt

ou 

C:>type arq*.txt >> tudo.txt

aqui todos os arquivos .txt começando com arq serão concatenados e gravados em tudo.txt

 
Rogerio Giannetti Torres:

Eae Japa

eu te  dei um exemplo, você tem que alterar o nome e a extensão dos arquivos conforme gerado pelo programa.


A sintaxe está correta, veja o exemplo abaixo, para concatenar os arquivos  arqA.txt ,  arqB.txt , arqC.txt  gravando o resultado no arquivo tudo.txt

C:>copy  arqA.txt +  arqB.txt + arqC.txt   tudo.txt

ou 

C:>type arq*.txt >> tudo.txt

aqui todos os arquivos .txt começando com arq serão concatenados e gravados em tudo.txt

Desculpe, eu esqueci de colocar o "+" na linha de comando e estava deixando espaços apenas.


Obrigado pelo retorno.

 

Pessoal, eu baixei e executei o script e ele funcionou legal, porém ....

o que eu queria era apenas EXPORTAR EXATAMENTE as cotações que aparecem no painel "observação do mercado", ou seja, apenas UMA cotação para cada ativo ( a ULTIMA) !!!  

Este script me trouxe TODAS as cotações ...  reduzi o Charts para 5000 (o minimo que consegui) e ele trouxe (logico) 5000 cotações ...

Alguma sugestão ???