package jforex.orders;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import com.dukascopy.api.*;
import com.dukascopy.api.IEngine.OrderCommand;
@RequiresFullAccess
public class TestOnMessageSLQueue implements IStrategy {
private IEngine engine;
private IConsole console;
private IOrder order;
private Queue<IOrder> justFilledOrders = new ConcurrentLinkedQueue<IOrder>();
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
context.setSubscribedInstruments(java.util.Collections.singleton(Instrument.EURUSD), true);
double price = context.getHistory().getLastTick(Instrument.EURUSD).getBid();
order = engine.submitOrder("orderValid", Instrument.EURUSD, OrderCommand.BUY, 0.001, 0, 20,
price - 0.0005, price + 0.0005);
}
public void onMessage(IMessage message) throws JFException {
if(message.getOrder() == order && message.getType() == IMessage.Type.ORDER_FILL_OK){
justFilledOrders.add(message.getOrder());
}
print("<html><font color=\"gray\">"+message+"</font>");
}
public void print(String message) {
console.getOut().println(message);
}
public void onStop() throws JFException {
for (IOrder order : engine.getOrders()) {
order.close();
}
}
public void onAccount(IAccount account) throws JFException { }
public void onTick(Instrument instrument, ITick tick) throws JFException {
while(!justFilledOrders.isEmpty()){
IOrder filledOrder = justFilledOrders.poll();
if(filledOrder == order){
order.setStopLossPrice(order.getOpenPrice() - 0.0005);
}
}
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException { }
}