Try the following:
package charts.test;
import java.awt.Color;
import java.text.DecimalFormat;
import com.dukascopy.api.Configurable;
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IChart;
import com.dukascopy.api.IChartObject.ATTR_INT;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.Period;
import com.dukascopy.api.drawings.ILabelChartObject;
import com.dukascopy.api.drawings.IShortLineChartObject;
public class ShortLineMidBar implements IStrategy {
@Configurable("Period")
public Period period = Period.TEN_SECS;
@Configurable("Instrument")
public Instrument instrument = Instrument.EURUSD;
@Configurable("Line lenght (in bar widths)")
public double barWidth = 1.5;
private IChart chart;
private DecimalFormat df = new DecimalFormat("0.00000");
@Override
public void onStart(IContext context) throws JFException {
this.chart = context.getChart(Instrument.EURUSD);
}
@Override
public void onTick(Instrument instrument, ITick tick) throws JFException {}
@Override
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
if (instrument != this.instrument || period != this.period){
return;
}
double price = (bidBar.getHigh() + bidBar.getLow()) /2;
long barMidTime = bidBar.getTime() + period.getInterval()/3;
long lineLength = (long)(barWidth * period.getInterval());
long lineStartTime = barMidTime - lineLength/2;
long lineEndTime = barMidTime + lineLength/2;
IShortLineChartObject line = chart.getChartObjectFactory().createShortLine();
line.setTime(0, lineStartTime);
line.setTime(1, lineEndTime);
line.setPrice(0, price);
line.setPrice(1, price);
line.setText(df.format(price));
line.setAttrInt(ATTR_INT.WIDTH, 3);
line.setColor(Color.BLUE);
chart.addToMainChart(line);
ILabelChartObject label = chart.getChartObjectFactory().createLabel();
label.setTime(0, lineEndTime);
label.setPrice(0, price);
label.setText(df.format(price));
label.setColor(Color.MAGENTA);
chart.addToMainChart(label);
}
@Override
public void onMessage(IMessage message) throws JFException {}
@Override
public void onAccount(IAccount account) throws JFException {}
@Override
public void onStop() throws JFException {}
}
Note that High+Low/2 means middle point between high and low, middle of the candle would be Close+Open/2.