Consider the following example program:
package jforex.strategies.oneorder;
import java.lang.reflect.Field;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.Configurable;
/**
* The example program prints out strategy parameter names and default values
*
*/
public class StrategyParamPrinter {
public static void main(String[] args){
EmptyStrategyWithParams strategy = new EmptyStrategyWithParams();
printParamData(strategy);
}
public static void printParamData(IStrategy strategyInstance) {
Field[] fields = strategyInstance.getClass().getFields();
for (Field field : fields) {
Configurable configurable = field.getAnnotation(Configurable.class);
if (configurable != null) {
Object fieldValue = null;
try {
fieldValue = field.get(strategyInstance);
} catch (IllegalArgumentException e) {
e.printStackTrace(System.err);
} catch (IllegalAccessException e) {
e.printStackTrace(System.err);
}
System.out.println("name: " + configurable.value() + " value: " + fieldValue);
}
}
}
}
And the example strategy:
package jforex.strategies.oneorder;
import java.io.File;
import com.dukascopy.api.*;
public class EmptyStrategyWithParams implements IStrategy {
@Configurable("Period")
public Period period = Period.TEN_SECS;
@Configurable("Instrument")
public Instrument instrument = Instrument.EURUSD;
@Configurable("Order count")
public int orderCount = 10;
@Configurable("File Path")
public File file = new File("C:/temp/textFile.txt");
public void onStart(IContext context) throws JFException {}
public void onTick(Instrument instrument, ITick tick) throws JFException {}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
public void onMessage(IMessage message) throws JFException {}
public void onAccount(IAccount account) throws JFException {}
public void onStop() throws JFException {}
}