Some samples of what can be done in Groovy, using the classes provided in the org.otfeed Driver package.
//
// Demostrates a simple request to retrieve historical quotes
// for 'GOOG'. Result is printed to the screen.
//
import org.otfeed.*;
import org.otfeed.event.*;
import org.otfeed.command.*;
import org.otfeed.support.*;
// command-line parameters are in the pre-defined variable called "args".
println("script called with parameters: $args");
// create Connection factory
def cf = new OTConnectionFactory(
username: args[0],
password: args[1],
hosts: [
new OTHost("feed1.opentick.com", 10010)
// , new OTHost("feed2.opentick.com", 10010)
]
);
// helper: convenient date input
def dateParser = new DateFormat("MM/dd/yyyy");
// handles incoming data: just print it out (make date look nice too)
def dataHandler = {
def t = dateParser.format(it.timestamp);
println("$t, $it.openPrice, $it.highPrice, $it.lowPrice, $it.closePrice");
}
// prepare a command.
def command = new HistDataCommand(
exchangeCode: "Q",
symbolCode: "GOOG",
startDate: dateParser.parse("1/1/2006"),
endDate: dateParser.parse("5/5/2006"),
aggregationSpan: AggregationSpan.days(),
dataDelegate: dataHandler as IDataDelegate
);
// connect
def connection = cf.connect(null, new SimpleConnectionStateListener());
// prepare and submit request. Wait for request completion.
def r = connection.prepareRequest(command);
r.submit();
r.waitForCompletion();
if(r.error != null) {
println "ERROR: $r.error"
}
// disconnect
connection.shutdown();
connection.waitForCompletion();
To run the script, use command:
$ java -jar lib/otfeed-script-X.X.X.jar samples/exa01.groovy username password
//
// Demonstrates download of two historical data streams.
// Data is saved in a file 'data.csv', in CSV format
// Note that download requests are executed in parallel.
//
import org.otfeed.*;
import org.otfeed.event.*;
import org.otfeed.command.*;
import org.otfeed.support.*;
// define Connection factory. Take username/password from the command line
def connectionFactory = new OTConnectionFactory(
username: args[0],
password: args[1],
hosts: [
new OTHost("feed1.opentick.com", 10015)
// , new OTHost("feed2.opentick.com", 10010)
]
);
// helper: nice date input/output
dateFormat = new DateFormat("MM/dd/yyyy");
// create file
def file = new FileWriter('data.csv');
file.write("# ticker, openPrice, highPrice, lowPrice, closePrice\n");
// closure that defines how we process data
// events (write in CSV format to the file)
def writer = { f, id, o ->
def t = dateFormat.format(o.timestamp);
f.write("$id, $t, $o.openPrice, $o.highPrice, $o.lowPrice, $o.closePrice\n");
}
// list of commands to execute
def commandList = [
new HistDataCommand(
exchangeCode: 'Q',
symbolCode: 'GOOG',
startDate: dateFormat.parse("1/1/2006"),
endDate: dateFormat.parse("5/5/2006"),
aggregationSpan: AggregationSpan.days(),
dataDelegate: writer.curry(file, 'GOOG') as IDataDelegate
),
new HistDataCommand(
exchangeCode: "Q",
symbolCode: "MSFT",
startDate: dateFormat.parse("1/1/2006"),
endDate: dateFormat.parse("5/5/2006"),
aggregationSpan: AggregationSpan.days(),
dataDelegate: writer.curry(file, 'MSFT') as IDataDelegate
)
];
// connect to the server
def connection = connectionFactory.connect(null, new SimpleConnectionStateListener());
def requests = [];
// submit all commands to the server
commandList.each() { c ->
def r = connection.prepareRequest(c);
r.submit();
requests << r;
}
// wait for the completion of all commands
requests.each() { r ->
r.waitForCompletion();
if(r.error != null) println("ERROR: $r.error");
}
// disconnect
connection.shutdown();
connection.waitForCompletion();
file.close()
To run the script, use command:
$ java -jar lib/otfeed-script-X.X.X.jar samples/exa02.groovy username password