The following strategy changes all charts to the same period. It works fine with JForex2 but generates an access control exception in JForex3.
The strategy:
package jforex;
import java.util.*;
import com.dukascopy.api.*;
import com.dukascopy.api.feed.*;
import com.dukascopy.api.feed.util.*;
public class Strategy implements IStrategy {
@Configurable("Period")
public Period period = Period.FIFTEEN_MINS;
private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
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<IChart> charts = context.getCharts();
for (IChart chart : charts) {
IFeedDescriptor feedDescriptor;
if (period.equals(Period.TICK)) {
feedDescriptor = new TicksFeedDescriptor(chart.getInstrument());
} else {
feedDescriptor = new TimePeriodAggregationFeedDescriptor(chart.getInstrument(), period, chart.getFeedDescriptor().getOfferSide());
}
chart.setFeedDescriptor(feedDescriptor);
}
context.stop();
}
public void onAccount(IAccount account) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
}
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 {
}
}
The exception:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThread")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:884)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.sun.javaws.security.JavaWebStartSecurity.checkPermission(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.checkShutdownAccess(ThreadPoolExecutor.java:735)
at java.util.concurrent.ThreadPoolExecutor.shutdownNow(ThreadPoolExecutor.java:1419)
at com.dukascopy.charts.dataprovider.indicator.calculator.a.dispose(L:75)
at com.dukascopy.charts.dataprovider.indicator.a.a.stop(L:1467)
at com.dukascopy.charts.dataprovider.a.setActive(L:273)
at com.dukascopy.charts.dataprovider.b.deactivate(L:882)
at com.dukascopy.charts.dataprovider.b.setActive(L:537)
at com.dukascopy.charts.dataprovider.e.a.setActive(L:246)
at com.dukascopy.charts.data.b.deactivate(L:130)
at com.dukascopy.charts.chartbuilder.bd.deactivate(L:627)
at com.dukascopy.charts.chartbuilder.bd.b(L:493)
at com.dukascopy.charts.chartbuilder.bd.f(L:560)
at com.dukascopy.charts.chartbuilder.c.e(L:1281)
at com.dukascopy.charts.chartbuilder.c.a(L:1274)
at com.dukascopy.charts.chartbuilder.l.setFeedDescriptor(L:1403)
at com.dukascopy.charts.g.b.setFeedDescriptor(L:762)
at jforex.Strategy.onStart(Strategy.java:36)
at com.dukascopy.api.impl.execution.s.call(L:27)
at com.dukascopy.api.impl.execution.s.call(L:13)
at com.dukascopy.api.impl.connect.at.a(L:127)
at com.dukascopy.api.impl.connect.cm.call(L:678)
at com.dukascopy.api.impl.connect.cm.call(L:640)
at com.dukascopy.api.impl.execution.j.call(L:34)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.dukascopy.api.impl.execution.f$a.f(L:904)
at com.dukascopy.api.impl.execution.f$a.run(L:926)
at java.lang.Thread.run(Thread.java:745)