Posso convertire dati metastock in ASCII in questo modo?

marcobrasich

¡Saludos a todos!
Registrato
8/1/01
Messaggi
6.251
Punti reazioni
437
Ho una banca dati metastock che aggiorno tutte le sere.

Posso convertire i dati metastock, che sono nella cartella C:/DatiMeta/A, in dati ASCII da mettere nella cartella C:/DatiAscii/A usando un file BATCH e questo programmino ATEM ??

Non vorrei ripetere tutte le sere la scrittura da riga di comando... ...se meccanizzo tramite file batch sarei contento.
Anche perché non ho solo la "cartella A (C:/DatiMeta/A)", ma ho diverse cartelle da convertire (A, B, C, D... etc)... ...magari si riesce a scrivere un file batch che mi fa tutte le cartelle con un solo click.

Se non è possibile con il file batch avete idea come meccanizzare la cosa???

Grazie.
 
Ho una banca dati metastock che aggiorno tutte le sere.

Posso convertire i dati metastock, che sono nella cartella C:/DatiMeta/A, in dati ASCII da mettere nella cartella C:/DatiAscii/A usando un file BATCH e questo programmino ATEM ??

Non vorrei ripetere tutte le sere la scrittura da riga di comando... ...se meccanizzo tramite file batch sarei contento.
Anche perché non ho solo la "cartella A (C:/DatiMeta/A)", ma ho diverse cartelle da convertire (A, B, C, D... etc)... ...magari si riesce a scrivere un file batch che mi fa tutte le cartelle con un solo click.

Se non è possibile con il file batch avete idea come meccanizzare la cosa???

Grazie.

Puoi farlo tranquillamente, dato che il programma accetta in ingresso il percorso di una cartella e converte tutti i files che trova all'interno. L'output va in stdout, quindi devi ridirigerlo, tipo:
atem -F percorso\cartella\sorgente > percorso\cartella\destinazione\nomefile
puoi ripetere il tutto per ciascuna delle tue cartelle.
Per i dettagli naturalmente dovrai fare riferimento alla documentazione del programma.
NB: non ho capito guardando il sito se forniscono anche un eseguibile windows. In caso negativo c'e' da smanettare di piu', compilando i sorgenti...
 
Ho trovato degli esempi di istruzioni per ATEM da mettere nel prompt dei comandi (...o in un file batch) di windows...


Ho messo ATEM64.EXE nella cartella: C:/atem quindi il percorso del programma è C:/atem/atem64.exe


Questa istruzione inserita nel prompt dei comandi di windows da l'help:
atem\atem64 --help


Questo altro comando da la lista dei symbol in un file master di metastock che si trova nella cartella C:/hist (ad esempio):
atem\atem64 --symbols --field-separator , ../hist
oppure:
atem\atem64 --symbols --field-separator , C:/hist
 
Ultima modifica:
Puoi farlo tranquillamente, dato che il programma accetta in ingresso il percorso di una cartella e converte tutti i files che trova all'interno. L'output va in stdout, quindi devi ridirigerlo, tipo:
atem -F percorso\cartella\sorgente > percorso\cartella\destinazione\nomefile
puoi ripetere il tutto per ciascuna delle tue cartelle.
Per i dettagli naturalmente dovrai fare riferimento alla documentazione del programma.
NB: non ho capito guardando il sito se forniscono anche un eseguibile windows. In caso negativo c'e' da smanettare di piu', compilando i sorgenti...

Grazie Folletto

Mi servirebbe qualche piccolo aiuto per un for loop nel file Batch...

Ho messo ATEM64.EXE nella cartella: C:/atem quindi il percorso del programma è C:/atem/atem64.exe

Ho messo il file batch in C:/

Ho il file metastock da convertire (con 200 titoli) in C:/Datiok/AIM ITALIA

Voglio mettere i file convertiti in C:/DatiAscii/AIM ITALIA
Ho creato tutte le cartelle (altrimenti ATEM va in errore).


ho creato un file Batch che ho messo in C:/ con le seguenti istruzioni che funzionano benissimo per convertire il primo e il secondo titolo:

atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/1.txt --fdat=1 --field-separator , C:/datiOK/"AIM ITALIA"
atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/2.txt --fdat=2 --field-separator , C:/datiOK/"AIM ITALIA"

Le virgolette in "AIM ITALIA" servono perché questa cartella (AIM ITALIA) ha uno spazio all'interno del nome che fa dare errore ad ATEM se non si mettono.




Però il file metastock contiene 200 titoli

Posso fare un FOR LOOP per far ripetere 200 volte una delle due istruzioni di sopra per ottenere i file convertiti -> 1.txt, 2.txt, 3.txt... ...200.txt?
 
Ultima modifica:
Grazie Folletto

Mi servirebbe qualche piccolo aiuto per un for loop nel file Batch...

Ho messo ATEM64.EXE nella cartella: C:/atem quindi il percorso del programma è C:/atem/atem64.exe

Ho messo il file batch in C:/

Ho il file metastock da convertire (con 200 titoli) in C:/Datiok/AIM ITALIA

Voglio mettere i file convertiti in C:/DatiAscii/AIM ITALIA
Ho creato tutte le cartelle (altrimenti ATEM va in errore).


ho creato un file Batch che ho messo in C:/ con le seguenti istruzioni che funzionano benissimo per convertire il primo e il secondo titolo:

atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/1.txt --fdat=1 --field-separator , C:/datiOK/"AIM ITALIA"
atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/2.txt --fdat=2 --field-separator , C:/datiOK/"AIM ITALIA"

Le virgolette in "AIM ITALIA" servono perché questa cartella (AIM ITALIA) ha uno spazio all'interno del nome che fa dare errore ad ATEM se non si mettono.




Però il file metastock contiene 200 titoli

Posso fare un FOR LOOP per far ripetere 200 volte una delle due istruzioni di sopra per ottenere i file convertiti -> 1.txt, 2.txt, 3.txt... ...200.txt?

prova qualcosa del genere:

FOR /L %%N IN (1, 1, 200) Do atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/%%N.txt --fdat=%%N --field-separator , C:/datiOK/"AIM ITALIA"

nello specifico (1, 1, 200) sarebbe (limite inferiore, incremento, limite superiore)

ah, e se vuoi evitare che ti scriva tutto il codice a video, all'inizio del bat puoi mettere un @echo OFF. E alla fine puoi mettere pause, così la finestra del dos non si chiude e vedi se tutto è andato bene
 
prova qualcosa del genere:

FOR /L %%N IN (1, 1, 200) Do atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/%%N.txt --fdat=%%N --field-separator , C:/datiOK/"AIM ITALIA"

nello specifico (1, 1, 200) sarebbe (limite inferiore, incremento, limite superiore)

ah, e se vuoi evitare che ti scriva tutto il codice a video, all'inizio del bat puoi mettere un @echo OFF. E alla fine puoi mettere pause, così la finestra del dos non si chiude e vedi se tutto è andato bene

Funziona perfettamente! Grazie, non ci riuscivo!

Non so se si può migliorare...

ho notato adesso che stavo convertendo tutto,
che ho cartelle con il file metastock da 1300 titoli e cartelle con il file metastock da 40 titoli ( ho una trentina di cartelle)...

Volevo mettere per tutte le cartelle il for loop a 1500, ma facendo così creo sempre 1500 file txt anche per cartelle con 40 titoli.
I file txt in più che vengono creati sono tutti vuoti...

Non c'è un modo per cancellare in massa tutti i txt vuoti?
Oppure non c'è un modo per non crearli facendo in modo che controlla prima che esiste il file F1.DAT, F2.DAT... ..etc??
Ho notato che a volte esiste il file F10.DAT e poi c'è il file F12.DAT cioè manca il file F11.DAT (cioè hanno, a volte, un buco).
Comunque anche se c'é un file 11.txt relativo al file F11.DAT che non c'è non fa niente.
Se c'è un modo per limitare 1460 file txt vuoti per le cartelle che contengono 40 titoli è già una grande cosa!
 
Puoi testare l'essitenza di un file con qualcosa di questo tipo:
IF EXIST "filename" (
REM Do one thing
) ELSE (
REM Do another thing
)
 
Puoi testare l'essitenza di un file con qualcosa di questo tipo:<br>
IF EXIST "filename" (<br>
REM Do one thing<br>
) ELSE (<br>
REM Do another thing<br>
)


Ho provato così
FOR /L %%N IN (1, 1, 200) Do IF EXIST F%%N.DAT (REM Do atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/%%N.txt --fdat=%%N --field-separator , C:/datiOK/"AIM ITALIA")

ma non va. Devo dirgli che F%%N.DAT deve cercarla C:/datiOK/"AIM ITALIA"
 
Questo funziona come una bomba!!!!


FOR /L %%N IN (1, 1, 2001) Do IF EXIST C:/datiOK/"AIM ITALIA"/F%%N.??? ( atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/%%N.txt --fdat=%%N --field-separator , C:/datiOK/"AIM ITALIA")

Soprao ho scritto F%%N.??? e non F%%N.DAT perché, ormai, non ci sono solo i file metastock da F1.DAT... fino a ...F255.DAT,
ma ci sono anche i file metastock che partono da F256.MWD... che arrivono fino a ...F2000.MWD.
E pertanto ho messo il simbolo jolly "?" che vale per un solo carattere, e quindi .??? vale per beccare sia i file .DAT che i file .MWD.

Il programma ATEM è molto valido e aggiornato, tiene conto anche dei file F.DOP oltre ai file .MWD già citati sopra.
 
Ultima modifica:
La riga messa sopra:
FOR /L %%N IN (1, 1, 2001) Do IF EXIST C:/datiOK/"AIM ITALIA"/F%%N.??? ( atem\atem64 --output=C:/DatiAscii/"AIM ITALIA"/%%N.txt --fdat=%%N --field-separator , C:/datiOK/"AIM ITALIA")

scrive i file TXT con la riga di intestazione:
symbol,date,time,open,high,low,close,volume,openint

Se volete dei file TXT senza riga di intestazione l'istruzione da mettere nel file BATCH è:
FOR /L %%N IN (1, 1, 2000) Do IF EXIST C:/datiOK/"AIM ITALIA"/F%%N.??? ( atem\atem64 --skip-header --output=C:/DatiAscii/"AIM ITALIA"/%%N.txt --fdat=%%N --field-separator , C:/datiOK/"AIM ITALIA")

Dove è stata aggiunta l'opzione: --skip-header



Un file.txt daily (con intestazione) è del tipo:

symbol,date,time,open,high,low,close,volume,openint
XS1265958832,2016-05-24,00:00:00,94.25000,94.25000,94.25000,94.25000,0,0
XS1265958832,2016-05-25,00:00:00,94.13000,94.13000,94.13000,94.13000,0,0
XS1265958832,2016-05-26,00:00:00,93.57000,93.57000,93.57000,93.57000,0,0
XS1265958832,2016-05-27,00:00:00,94.80000,94.80000,94.80000,94.80000,0,0

In questi tipi di file è facilissimo far sparire la colonna del time ",00:00:00".
Basta usare Notepad++ che può cancellare (con un solo click) tutte le colonne ",00:00:00" in tutti i file (compreso le sottocartelle).

Se volete cancellare, con un sol click, tutte le colonne ",00:00:00" è obbligatorio scrivere i file txt senza intestazione,
altrimenti nel cancellare, con notepad++, la parola ",time" dall'intestazione dei file txt daily la cancellate anche nei file txt dei dati intraday che hanno time diverso da ",00:00:00"

Con notepad++ potete formattare in massa (con un solo click) tutte le date di tutte le righe di tutti i file.txt (compreso le sottocartelle).

Se qualcuno è interessato vi dico come si fa.






Poi, siccome i file txt che escono sono anonimi, cioè del tipo 1.txt, 2.txt, etc, etc

Per sapere/trovare subito quali titoli rappresentano conviene associare quest'altra riga:
atem\atem64 --symbols --output=C:/DatiAscii/"AIM ITALIA"/0000_Symbol_List.NFO C:/datiOK/"AIM ITALIA"


Tale riga crea nella stessa cartella il file "0000_Symbol_List.NFO" (da far aprire al programma notepad) che grazie al suo nome (che inizia per "0000_...") sarà il primo file in elenco fra i tanti file 1.txt, 2.txt,... ...300.txt,... ...1540.txt, etc

Ho usato l'estensione .NFO per questo file della lista titoli per non farlo leggere (e quindi farlo ignorare) dai programmi di borsa che accedono a tale cartella per cercare file di dati ascii di tipo TXT.


Le informazioni sono separate dal TAB (se volete si può cambiare il carattere separatore)


il file 0000_Symbol_List.NFO è del tipo:


symbol long_name barsize from_date to_date file_number file_name field_bitset record_number kind
AMB.MI AMBROMOBILIARE D 2011-12-23 2021-03-23 1 F1.DAT 127 8 M
YARC.MI ARC REAL ESTATE D 2012-03-05 2014-12-17 2 F2.DAT 127 11 M
CDR.MI COMPAGNIA DELLA RUOTA D 2012-07-30 2020-12-18 3 F3.DAT 127 32 E
DM.MI DIGITAL MAGICS D 2013-07-31 2021-03-24 4 F4.DAT 127 41 M
ENT.MI ENERTRONICA D 2013-03-15 2021-03-24 5 F5.DAT 127 52 M
EXSY.MI EXPERT SYSTEM D 2014-02-18 2021-03-24 6 F6.DAT 127 56 M
FTL.MI FINTEL ENERGIA GROUP D 2010-03-23 2020-01-16 7 F7.DAT 127 61 E
FIC.MI FIRST CAPITAL D 2010-12-22 2021-03-24 8 F8.DAT 127 62 M
FDE.MI FRENDY ENERGY D 2012-06-22 2021-03-23 9 F9.DAT 127 65 M
GALA.MI GALA D 2014-03-10 2017-07-07 10 F10.DAT 127 67 M
GI1.MI ZEPHYRO D 2013-12-27 2018-10-22 11 F11.DAT 127 175 M
GGP.MI GRUPPO GREEN POWER D 2014-01-22 2020-10-02 12 F12.DAT 127 79 E

In ogni riga c'è il titolo (nome corto + nome lungo) e c'è anche il file dat di provenienza (ad es.) F1.DAT che ci dice che corrisponde al nostro file 1.txt della banca dati ascii.
 
Ultima modifica:
Indietro