I included GridGain into my backtesting system. If a choice is made,
the updaetIndicatorsExectue() method starts GridGain and invokes
updaetIndicatorsExectueGridified() method, which is specified with
@Gridify to use
(taskClass=PriceBarUpdate_UpdateIndicatorsExecuteTask.class) . In
PriceBarUpdate_UpdateIndicatorsExecuteTask which extends
GridTaskSplitAdapter<GridifyArgument,
ArrayList<OptimizationResult>>, the overriden split() will do the job.
BTW, I have integrated RapidMiner into my system, if you have plan to
include it as well, I'd like to contribute part of my code.
public static ArrayList<OptimizationResult>
updaetIndicatorsExectue(OptimizerRunner optimizerRunner,
LinkedList<Strategy> stratCandidates, QuoteHistoryBars
quoteHistoryOfBars,
MidPointHistory midQuoteHistory) throws JBookTraderException
{
boolean toGridGain =
optimizerRunner.optimizerDialog.getGridOrNot();
if(toGridGain){
ArrayList<OptimizationResult> results;
try{
GridFactory.start();
results = updaetIndicatorsExectueGridified(
optimizerRunner,
stratCandidates, //.get(stratCandidates.size()/2)
quoteHistoryOfBars,
midQuoteHistory
);
GridFactory.stop(true);
return results;
// com.primoi.gridgain.HelloWorld.main(new String[]{""});
// return new ArrayList<Result>();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
else {
return
updaetIndicatorsExectueGridifiedNot(optimizerRunner,stratCandidates,quoteHistoryOfBars,midQuoteHistory);
}
}
@Gridify(taskClass=PriceBarUpdate_UpdateIndicatorsExecuteTask.class)
protected static ArrayList<OptimizationResult>
updaetIndicatorsExectueGridified(
OptimizerRunner optimizerRunner,
LinkedList<Strategy> stratCandidates,
QuoteHistoryBars quoteHistoryOfBars,
MidPointHistory midQuoteHistory
) throws JBookTraderException
{
// System.out.println("<<<<<<<<<<<<<80:"
// +optimizerRunner+" "
// +stratCandidates.size()+" "
// +quoteHistoryOfBars.size()+" "
// +midQuoteHistory.size()+" "
// );
// return new ArrayList<Result>();
return updaetIndicatorsExectueGridifiedNot(optimizerRunner,
stratCandidates,quoteHistoryOfBars,midQuoteHistory);
}
public class PriceBarUpdate_UpdateIndicatorsExecuteTask extends
GridTaskSplitAdapter<GridifyArgument, ArrayList<OptimizationResult>>
{
@Override
protected Collection<? extends GridJob> split(int gridSize,final
GridifyArgument arg
) throws GridException {
List<GridJobAdapter<ArrayList<Strategy>> > jobs =
new ArrayList<GridJobAdapter<ArrayList<Strategy>> >();
try{
// Split number of iterations.
Object[] params = arg.getMethodParameters();
final OptimizerRunner optimizerRunner = (OptimizerRunner)params[0];
final LinkedList<Strategy> stratCands =
(LinkedList<Strategy>)params[1];
final QuoteHistoryBars quoteHistoryOfBars =
(QuoteHistoryBars)params[2];
final MidPointHistory midQuoteHistory =
(MidPointHistory)params[3];
// for(int i=0;i<3;i++){}
// gridSize = 2;
// debug.Tracker.track("30:" + gridSize);
// System.err.println();
int sizeInGrid = stratCands.size()/gridSize;
//? extends Strategy
final ArrayList<Strategy> list = new ArrayList<Strategy>();
int stratCount = 0;
for (final Strategy strat : stratCands) {
stratCount++;
list.add(strat);
if (stratCount % sizeInGrid == 0) {
System.out.println("60"+" "+list.size());
System.out.println("75:"+" "+list.get(0)+"
"+list.get(list.size()-1));
ArrayList<Strategy> listArg = new
ArrayList<Strategy>(list.size());
for(Strategy stratTmp: list){
listArg.add(stratTmp);
}
jobs.add(new
GridJobAdapter<ArrayList<Strategy>>((ArrayList<Strategy>)listArg) { //
ArrayList<Strategy>
@Override
public Serializable execute() throws GridException {
try {
ArrayList<Strategy> argInner = getArgument();
// System.out.println("80:"+optimizerRunner+" "+argInner.size()
+" "+quoteHistoryOfBars.size()+" "+midQuoteHistory.size()+" "+arg);
return OptimizerRunner.updaetIndicatorsExectueGridified(
optimizerRunner,stratCands,quoteHistoryOfBars,midQuoteHistory); ////it
is necessary to return it
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
});
list.clear();
}
}
}catch(Exception e){
e.printStackTrace();
throw new GridException(e.getMessage());
}
return jobs;
}
@Override
public ArrayList<OptimizationResult> reduce(List<GridJobResult>
gridJobResults)
throws GridException {
ArrayList<OptimizationResult> resultsAll = new
ArrayList<OptimizationResult>();
for (GridJobResult gridResult : gridJobResults) {
if(gridResult==null)continue;
ArrayList<OptimizationResult> results = gridResult.getData();
for (OptimizationResult optResult : results) {
resultsAll.add(optResult);
}
}
return resultsAll;