Chart object catalog
The given examples can be used with the following template strategy:
@Override
public void onStart(IContext context) throws JFException {
IHistory history = context.getHistory();
IConsole console = context.getConsole();
Instrument instrument = Instrument.EURUSD;
IChart chart = context.getChart(instrument);
if(chart == null){
console.getErr().println("No chart opened for " + instrument);
context.stop(); //stop the strategy
}
Period period = chart.getSelectedPeriod();
OfferSide offerSide = chart.getSelectedOfferSide();
IChartObjectFactory factory = chart.getChartObjectFactory();
IBar bar10 = history.getBar(instrument, period, offerSide, 10);
IBar bar30 = history.getBar(instrument, period, offerSide, 30);
//TODO: place here the code of the respective chart object
}
Lines
Vertical line
A vertical line from the top to the bottom of the chart window.
Code example:
IVerticalLineChartObject vLine = factory.createVerticalLine("vLine", bar10.getTime());
chart.add(vLine);
Horizontal line
A horizontal line from the left to the right the chart window.
Code example:
IHorizontalLineChartObject hLine = factory.createHorizontalLine("hLine", bar10.getClose() );
chart.add(hLine);
Short line
A short line.
Code example:
IShortLineChartObject shortLine = factory.createShortLine("shortLine",
bar10.getTime(), bar10.getHigh(),
bar30.getTime(),bar30.getLow());
chart.add(shortLine);
Long line
A line which traverses the whole chart window. Code example:
ILongLineChartObject longLine = factory.createLongLine("longLine",
bar10.getTime(), bar10.getHigh(),
bar30.getTime(),bar30.getLow());
chart.add(longLine);
Consider another example: LongTrendLine.java
Poly line
Code example:
IPolyLineChartObject polyLine = chart.getChartObjectFactory().createPolyLine("polyLine");
polyLine.addNewPoint(bar30.getTime(), bar30.getLow());
polyLine.addNewPoint(bar30.getTime() + period.getInterval() * 5, bar30.getLow() + instrument.getPipValue() * 10);
polyLine.addNewPoint(bar30.getTime() + period.getInterval() * 10, bar30.getLow() - instrument.getPipValue() * 10);
polyLine.addNewPoint(bar30.getTime() + period.getInterval() * 15, bar30.getLow() + instrument.getPipValue() * 10);
polyLine.addNewPoint(bar10.getTime(), bar10.getLow());
chart.add(polyLine);
Ray line
Code example:
IRayLineChartObject rayLine = chart.getChartObjectFactory().createRayLine("rayLine",
bar10.getTime(), bar10.getHigh(),
bar30.getTime(), bar30.getLow());
chart.add(rayLine);
Price marker
Code example:
IPriceMarkerChartObject priceMarker = factory.createPriceMarker("priceMarker", bar10.getHigh());
chart.add(priceMarker);
Order line
Code example: IOrderLineChartObject orderLine = factory.createOrderLine("orderLine", bar10.getHigh()); chart.add(orderLine);
Graphical and compound objects
Channel
Two parallel lines which indicate a trend.
Code example:
IChannelChartObject channel = chart.getChartObjectFactory().createChannel("channelLine",
bar30.getTime(), bar30.getClose(),
bar10.getTime(), bar10.getClose() + instrument.getPipValue() * 10,
bar10.getTime(), bar10.getClose() + instrument.getPipValue() * 20);
chart.add(channel);
Rectangle
Code example:
IRectangleChartObject rectangle = factory.createRectangle("rectangle",
bar10.getTime(), bar10.getHigh(),
bar30.getTime(), bar30.getLow());
chart.add(rectangle);
Triangle
Code example:
ITriangleChartObject triangle = factory.createTriangle("triangle",
bar10.getTime(), bar10.getHigh(),
bar30.getTime(), bar30.getLow(),
bar30.getTime(), bar30.getHigh() + instrument.getPipValue() * 20
);
chart.add(triangle);
Ellipse
Code example:
IEllipseChartObject ellipse = factory.createEllipse("ellipse",
bar10.getTime(), bar10.getHigh(),
bar30.getTime(), bar30.getLow());
chart.add(ellipse);
Text
ITextChartObject text = factory.createText("textKey", bar10.getTime(), bar10.getLow());
text.setText("Hello world");
text.setColor(Color.BLUE);
chart.add(text);
Symbol
Consider drawing a text by character codes:
ITextChartObject text = chart.getChartObjectFactory().createText("symbolKey", tick.getTime(), tick.getAsk());
//pick character number from http://www.alanwood.net/demos/wingdings.html
text.setText(String.valueOf(new char[] {10102, 10103, 10104}), new Font(Font.DIALOG, Font.PLAIN, 30));
text.setColor(Color.BLUE);
chart.add(text);
Label
In comparison with ITextChartObject, which gets plotted in time-price coordinate system, the IScreenLabelChartObject gets plotted in particular distance from a particular corner of the chart.
IScreenLabelChartObject label = chart.getChartObjectFactory().createScreenLabel("screenLabel");
label.setCorner(Corner.BOTTOM_RIGHT);
label.setxDistance(50);
label.setyDistance(50);
label.setText("Screen label", new Font(Font.SANS_SERIF, Font.BOLD, 20));
label.setColor(Color.RED);
chart.add(label);
Signal Up
ISignalUpChartObject signalUp = factory.createSignalUp("signalUpKey",
bar10.getTime(), bar10.getLow()
);
chart.add(signalUp);
Signal Down
ISignalDownChartObject signalDown = factory.createSignalDown("signalDownKey",
bar10.getTime(), bar10.getHigh()
);
chart.add(signalDown);
Fibo arc
Code example:
IFiboArcChartObject fiboArc = factory.createFiboArc("fiboArc",
bar30.getTime(), bar30.getLow(),
bar10.getTime(), bar10.getLow());
chart.add(fiboArc);
Gann
One can change the Gann object appearance by application of the setPipsPerBar method.
Gann angles
Code example:
IGannAnglesChartObject gannAngles = factory.createGannAnglesChartObject("gannAngles",
bar10.getTime(), bar10.getClose());
chart.add(gannAngles);
Consider changing the angle every 2 seconds:
for(double pipsPerBar = 0.5; pipsPerBar<5; pipsPerBar+=0.5){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
gannAngles.setPipsPerBar(pipsPerBar);
}
Gann grid
Code example:
IGannGridChartObject gannGrid = factory.createGannGridChartObject("gannGrid",
bar10.getTime(), bar10.getClose());
chart.add(gannGrid);
Consider changing the grid segment height every 2 seconds:
for(double pipsPerBar = 0.5; pipsPerBar<5; pipsPerBar+=0.5){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
gannGrid.setPipsPerBar(pipsPerBar);
}
Leveled objects
Leveled objects are represented by the ILeveledChartObject interface. For leveled objects one can:
- retrieve all level values,
- add a level,
- modify a level (change value, color, or add a label),
- remove a level.
Consider a method which prints all level values:
private void printLevels( ILeveledChartObject leveledObject, String comment){
String str = "";
for(int i = 0; i <leveledObject.getLevelsCount(); i++){
str += i + "=" + leveledObject.getLevelValue(i) + ", ";
}
console.getOut().println(comment + leveledObject.getClass().getSimpleName() + " levels: " +str);
}
Consider a method which removes, modifies, and adds a new level. It also shows how one can add a label to a level.
private void customizeLevels( ILeveledChartObject leveledObject){
printLevels(leveledObject, "before modification: ");
console.getOut().println("remove level: "+leveledObject.getLevelValue(2));
leveledObject.removeLevel(2);
leveledObject.addLevel("new level", 0.90, Color.RED);
leveledObject.setLevelValue(3, 1.40);
leveledObject.setLevelColor(3, Color.BLUE);
leveledObject.setLevelLabel(3, "modified level");
printLevels(leveledObject, "after modification: ");
}
Consider a strategy which sequentially adds each type of level objects to chart, customizes its levels and after 5 seconds, removes the object:
Fibo retracements
Code example for the fibo retracements in the picture:
IFiboRetracementChartObject fiboRetracement = factory.createFiboRetracement("fiboRetracement",
bar30.getTime(), bar30.getLow(),
bar10.getTime(), bar30.getLow()+ instrument.getPipValue() * 10);
chart.add(fiboRetracement);
Fibo times
Code example:
IFiboTimeZonesChartObject fiboTimezones = factory.createFiboTimeZones("fiboTimeZones",
bar30.getTime(), bar30.getLow(),
bar30.getTime() + period.getInterval() * 2, bar30.getLow());
chart.add(fiboTimezones);
Fibo fan
Code example:
IFiboFanChartObject fiboFan = factory.createFiboFan("fiboFan",
bar30.getTime(), bar30.getLow(),
bar10.getTime(), bar30.getLow()+ instrument.getPipValue() * 20);
chart.add(fiboFan);
Fibo expansion
Code example:
IFiboExpansionChartObject fiboExpansion = factory.createFiboExpansion("fiboExpansion",
bar30.getTime(), bar30.getClose(),
bar10.getTime(), bar10.getClose() + instrument.getPipValue() * 10,
bar10.getTime(), bar10.getClose());
chart.add(fiboExpansion);
Andrews pitchfork
Code example:
IAndrewsPitchforkChartObject andrewsPitchfork = factory.createAndrewsPitchfork("andrewsPitchfork",
bar30.getTime(), bar30.getClose(),
bar10.getTime(), bar10.getClose() + instrument.getPipValue() * 10,
bar10.getTime(), bar10.getClose());
chart.add(andrewsPitchfork);
Percent
Code example:
IPercentChartObject percent = factory.createPercent("percent",
bar30.getTime(), bar30.getLow(),
bar30.getTime(), bar30.getLow() + instrument.getPipValue() * 30);
chart.add(percent);