Hi,
we prepared for you strategy example. Strategy places several orders for different instruments. After orders are filled, it places on current instruments chart new chart object (IChart.Type.TEXT) with message.
package jforex;
import java.util.*;
import com.dukascopy.api.*;
/**
* This is simple strategy example. Strategy places several
* orders for different instruments. After orders are filled,
* it places on current instruments chart new chart object (IChart.Type.TEXT)
* with message.
*/
public class OrdersForFourInstruments implements IStrategy{
private IContext context;
private IEngine engine;
private List<IOrder> orders;
public void onStart(IContext context) throws JFException {
this.context = context;
this.engine = context.getEngine();
this.orders = new ArrayList<IOrder>();
}
public void onAccount(IAccount account) throws JFException {
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar)throws JFException {
}
public void onMessage(IMessage message) throws JFException {
//Case filled is one of our orders
if (message.getType().equals(IMessage.Type.ORDER_FILL_OK)){
if (message.getOrder().getInstrument().equals(Instrument.EURUSD)||
message.getOrder().getInstrument().equals(Instrument.EURJPY)||
message.getOrder().getInstrument().equals(Instrument.EURGBP)||
message.getOrder().getInstrument().equals(Instrument.EURAUD)) {
// create chart object
IChart chart = context.getChart(message.getOrder().getInstrument());
if (chart != null) {
long creationTime = message.getOrder().getCreationTime();
double openPrice = message.getOrder().getOpenPrice();
// use chart object to create and manipulate drawings
chart.draw("chart", IChart.Type.TEXT, creationTime, openPrice);
IChartObject chartObject = chart.get("chart");
chartObject.setText("Order Filled");
}
}
}
}
public void onStop() throws JFException {
// closing orders
for (IOrder order : orders) {
if (order.getState() == IOrder.State.FILLED
|| order.getState() == IOrder.State.OPENED){
order.close();
}
}
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
// placing orders once on first tick (one for each instrument)
if (orders != null && orders.isEmpty()){
orders.add(engine.submitOrder("order_EURUSD", Instrument.EURUSD, IEngine.OrderCommand.BUY, 5));
orders.add(engine.submitOrder("order_EURJPY", Instrument.EURJPY, IEngine.OrderCommand.BUY, 5));
orders.add(engine.submitOrder("order_EURGBP", Instrument.EURGBP, IEngine.OrderCommand.BUY, 5));
orders.add(engine.submitOrder("order_EURAUD", Instrument.EURAUD, IEngine.OrderCommand.BUY, 5));
}
}
}