package onBarExample;
import java.util.*;
import com.dukascopy.api.IEngine.OrderCommand;
import com.dukascopy.api.*;
public class OnBarExample implements IStrategy {
private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
private IBar previousBar;
private IOrder order;
@Configurable( value = "通貨ペア" )
public Instrument myInstrument = Instrument.EURGBP;
@Configurable( value = "オーダータイプ", obligatory = true )
public OfferSide myOfferSide = OfferSide.ASK;
@Configurable( value = "時間軸" )
public Period myPeriod = Period.TEN_MINS;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.history = context.getHistory();
this.context = context;
this.indicators = context.getIndicators();
this.userInterface = context.getUserInterface();
Set<Instrument> instruments = new HashSet<Instrument>();
instruments.add(myInstrument);
context.setSubscribedInstruments(instruments, true);
}
public void onAccount(IAccount account) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
if( message.getOrder() != null )
console.getOut().println("オーダーラベル: " + message.getOrder().getLabel() + " || メッセージログ: " + message.getContent());
}
public void onStop() throws JFException {
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
if (!instrument.equals(myInstrument) || !period.equals(myPeriod)) {
return;
}
order = engine.getOrder("MyStrategyOrder");
if ( order != null && engine.getOrders().contains(order) ){
order.close();
order.waitForUpdate(IOrder.State.CLOSED);
console.getOut().println(order.getLabel() + " ラベルのポジションをクローズしました" );
} else if (order == null ) {
console.getOut().println("クローズするポジションは有りません");
}
previousBar = myOfferSide == OfferSide.ASK ? askBar : bidBar;
console.getOut().println(" | 最後に確定したバー⇒" + previousBar + " | 時間軸⇒" + period + " | 通貨ペア⇒" + instrument);
OrderCommand myCommand = previousBar.getOpen() > previousBar.getClose() ? OrderCommand.SELL : OrderCommand.BUY;
engine.submitOrder("MyStrategyOrder", myInstrument, myCommand, 0.001);
}
}