package singlejartest;
import com.dukascopy.api.IEngine.OrderCommand;
import com.dukascopy.api.system.ISystemListener;
import com.dukascopy.api.system.IClient;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.IEngine;
import com.dukascopy.api.IOrder;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import java.util.HashSet;
import java.util.Set;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
public class ProgramFillCover {
private static final Logger LOGGER = LoggerFactory.getLogger(ProgramFillCover.class);
private static String jnlpUrl = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
private static String userName = "mzd";
private static String password = "mzd";
static int counter;
public static void main(String[] args) throws Exception {
final IClient client = ClientFactory.getDefaultInstance();
client.setSystemListener(new ISystemListener() {
private int lightReconnects = 3;
@Override
public void onStart(long processId) {
LOGGER.info("ストラテジー起動: " + processId);
}
@Override
public void onStop(long processId) {
LOGGER.info("ストラテジー停止: " + processId);
if (client.getStartedStrategies().size() == 0) {
System.exit(0);
}
}
@Override
public void onConnect() {
LOGGER.info("接続完了");
lightReconnects = 3;
}
@Override
public void onDisconnect() {
LOGGER.warn("Disconnected");
if (lightReconnects > 0) {
client.reconnect();
--lightReconnects;
} else {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
try {
client.connect(jnlpUrl, userName, password);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
}
});
LOGGER.info("接続中…");
client.connect(jnlpUrl, userName, password);
int i = 10;
while (i > 0 && !client.isConnected()) {
Thread.sleep(1000);
i--;
}
if (!client.isConnected()) {
LOGGER.error("デューカスコピーのサーバーに接続出来ませんでした");
System.exit(1);
}
Set<Instrument> instruments = new HashSet<Instrument>();
instruments.add(Instrument.EURUSD);
instruments.add(Instrument.CADCHF);
LOGGER.info("通貨ペア登録…");
client.setSubscribedInstruments(instruments);
LOGGER.info("ストラテジー開始");
client.startStrategy(new StrategyFillListener(new StrategyFillListener.ClientActions() {
@Override
public void onOrderFill(IOrder order, IEngine engine) {
LOGGER.info("新規オーダー完了。クライアント側でカバーアップオーダーを行います。");
try {
Thread.sleep(1000);
OrderCommand cmd = order.isLong() ? OrderCommand.SELL : OrderCommand.BUY;
engine.submitOrder("orderClient" + ++counter, order.getInstrument(), cmd, order.getAmount());
} catch (Exception e) {
e.printStackTrace();
}
}
}));
}
}