예제 #1
0
 @Override
 public List<TimePointStats> start(UserOutput output) {
   Thread.currentThread().setName("Main engine execution thread");
   double result = 1;
   initPopulation();
   TimePoint timePoint = new TimePoint(engineSettings.startTimePoint);
   List<TimePointStats> timePointStats = new ArrayList<>();
   while (engineSettings.endTimePoint.compareTo(timePoint) >= 0) {
     TimePointStats stat = executeTimePoint(timePoint);
     if (stat != null) {
       timePointStats.add(stat);
       result *= (stat.getPercentEarned() / 100 + 1);
       profitRecorder.recordProfit(stat.getPercentEarned());
       output.reportProfitForTimePoint(timePoint, (result - 1) * 100, stat.getPercentEarned());
       Debug.d("Time:", timePoint, "Percent earned so far:", (result - 1) * 100);
     }
     timePoint = timePoint.next();
   }
   if (!engineSettings.executionOnly) {
     savePopulation();
   }
   Debug.d(
       "Profit:",
       profitRecorder.getProfit(),
       "Drawdown:",
       profitRecorder.getMaxDrawdown(),
       "Profit / DD:",
       profitRecorder.getProfit() / profitRecorder.getMaxDrawdown());
   return timePointStats;
 }
예제 #2
0
 private TimePointStats executeTimePoint(TimePoint timePoint) {
   List<ProgramData> programDataList = data.prepareProgramDataList(timePoint);
   if (programDataList.isEmpty()) return null;
   Debug.d("Starting TimePoint:", timePoint);
   TimePointResult timePointResult =
       timePointExecutor.execute(
           timePoint, programDataList, population, !engineSettings.executionOnly);
   TimePointStats timePointStats = TimePointStats.getNewStats(timePoint);
   for (DataSetResult dataSetResult : timePointResult.listDataSetResults()) {
     Prediction prediction = dataSetResult.getCumulativePrediction();
     Debug.d("Prediction for:", dataSetResult.getName(), prediction);
     Double actualChange = data.getActualChange(dataSetResult.getName(), timePoint);
     if (!actualChange.isNaN()) {
       Debug.d("Actual change:", actualChange);
       printPercentEarned(dataSetResult.getName(), actualChange, prediction);
       timePointStats.update(dataSetResult.getName(), actualChange, prediction);
     }
   }
   if (!engineSettings.executionOnly) {
     updatePopulation();
   }
   Debug.d("Finished TimePoint:", timePoint);
   return timePointStats;
 }