package jforex.orders2;
import com.dukascopy.api.*;
import com.dukascopy.api.IEngine.OrderCommand;
import com.dukascopy.api.util.DateUtils;
@RequiresFullAccess
public class PartialClose implements IStrategy {
private IOrder order;
private IEngine engine;
private IConsole console;
private IContext context;
@Override
public void onStart(IContext context) throws JFException {
engine = context.getEngine();
console = context.getConsole();
this.context = context;
context.setSubscribedInstruments(java.util.Collections.singleton(Instrument.EURUSD), true);
order = engine.submitOrder("order1", Instrument.EURUSD, OrderCommand.BUY, 0.01);
}
private void print(Object o){
console.getOut().println(o);
}
@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 != Instrument.EURUSD || period != Period.TEN_SECS){
return;
}
if(order.getState() == IOrder.State.FILLED){
order.close(0.004);
order.waitForUpdate(2000);
print(String.format("%s クローズ価格=%.5f, 取引数量=%.3f, リクエストした取引数量=%.3f, クローズ時間=%s, オーダー状態=%s",
order.getLabel(), order.getClosePrice(), order.getAmount(), order.getRequestedAmount(),
DateUtils.format(order.getCloseTime()), order.getState()));
}
}
@Override
public void onMessage(IMessage message) throws JFException {
print(message);
if(order.getState() == IOrder.State.CLOSED){
print("ポジションが全てクローズされたので、ストラテジー停止します。");
print(String.format("%s クローズ価格=%.5f, 取引数量=%.3f, リクエストした取引数量=%.3f, クローズ時間=%s, オーダー状態=%s",
order.getLabel(), order.getClosePrice(), order.getAmount(), order.getRequestedAmount(),
DateUtils.format(order.getCloseTime()), order.getState()));
context.stop();
return;
}
}
@Override
public void onAccount(IAccount account) throws JFException {}
@Override
public void onStop() throws JFException {}
}