Exporting Zorro Data to CSV

Earlier versions of Zorro used to ship with a script for converting market data in Zorro binary format to CSV. That script seems to have disappeared with the recent versions of Zorro, so I thought I’d post it here.

When you run this script by selecting it and pressing [Test] on the Zorro interface, you are asked to select a Zorro market data file to convert to CSV format. Zorro then does the conversion for you and writes the data to Zorro/History/Export.csv.

// convert a .t6 or .t1 file to .csv

//#define ASCENDING
#define MAX_RECORDS    10000
string Target = "History\\Export.csv";

int point(int Counter)
{
    if(0 == Counter % 10000) {
        if(!wait(0)) return 0;
        printf(".");
    }
    return 1;
}

function main()
{
    file_delete(Target);
    string Source = file_select("History","T1,T6\0*.t1;*.t6\0\0");
    if(strstr(Source,".t6")) {
        T6 *Ticks = file_content(Source);
        int Records = file_length(Source)/sizeof(T6);
        printf("\n%d records..",Records);
#ifdef MAX_RECORDS
        Records = min(Records,MAX_RECORDS);
#endif
#ifdef ASCENDING
        int nTicks = Records;
        while(--nTicks) 
#else
        int nTicks = -1;
        while(++nTicks < Records) 
#endif
        {
            T6 *t = Ticks+nTicks;
            file_append(Target,strf("%s,%.5f,%.5f,%.5f,%.5f\n",
                strdate("%Y-%m-%d %H:%M:%S",t->time),
                (var)t->fOpen,(var)t->fHigh,(var)t->fLow,(var)t->fClose));
            if(!point(nTicks)) return;
        }
    } else if(strstr(Source,".t1")) {
        T1 *Ticks = file_content(Source);
        int Records = file_length(Source)/sizeof(T1);
        printf("\n%d records..",Records);
#ifdef MAX_RECORDS
        Records = min(Records,MAX_RECORDS);
#endif
#ifdef ASCENDING
        int nTicks = Records;
        while(--nTicks) 
#else
        int nTicks = -1;
        while(++nTicks < Records) 
#endif
        {
            T1 *t = Ticks+nTicks;
            file_append(Target,strf("%s,%.5f\n",
                strdate("%Y-%m-%d %H:%M:%S",t->time),(var)t->fVal));
            if(!point(nTicks)) return;
        }
    }
    printf("\nDone!");
}

By default, the data is written in descending order (newest data first). If you want ascending order instead, uncomment the line #define ASCENDING.

As you can see, this script works with Zorro version 2.30:

This script is useful if you want to convert a single market data file. But it’s a little cumbersome if you want to convert the entire market data history of a ticker since Zorro splits that data into separate files by year (except for end-of-day data – that all goes into a single file).

Here’s a script for converting the entire history of a ticker from Zorro format to CSV:

//Export selected asset history to CSV

function run()
{
    StartDate = 20060101;
    LookBack = 0;
    BarPeriod = 1;
    
    
    string Format = ifelse(assetType(Asset) == FOREX,
        "\n%04i-%02i-%02i %02i:%02i, %.5f, %.5f, %.5f, %.5f",
        "\n%04i-%02i-%02i %02i:%02i, %.1f, %.1f, %.1f, %.1f");
    char FileName[40];
    sprintf(FileName,"History\\%s.csv",strx(Asset,"/","")); // remove slash from forex pairs
    
    if(is(INITRUN))
        file_write(FileName,"Date,Open,High,Low,Close",0);
    else
        file_append(FileName,strf(Format,
            year(),month(),day(),hour(),minute(),
            round(priceOpen(),0.1*PIP),
            round(priceHigh(),0.1*PIP),
            round(priceLow(),0.1*PIP),
            round(priceClose(),0.1*PIP)));
}

This one takes the ticker selected in Zorro’s asset dropdown box and writes its entire history to Zorro/History/ticker.csv. Again, you can see it works with Zorro 2.30:

If you want to import that data into R as an xts object, the following snippet will do the trick:

Data <- xts(read.zoo("ticker.csv", tz="UTC", format="%Y-%m-%d %H:%M", sep=",", header=TRUE))

1 thought on “Exporting Zorro Data to CSV”

Leave a Comment