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
- votos: 42
- 2014.01.14
- Andrey Khatimlianskii
- www.mql5.com
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 ?
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>.
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.
:)
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
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 ???
- 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
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.