@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; }
private void printPercentEarned(DataSetName name, Double actualChange, Prediction prediction) { double percent; if (prediction == Prediction.OUT) { Debug.d("No position"); return; } if (prediction.isCorrect(actualChange)) percent = Math.abs(actualChange); else percent = -Math.abs(actualChange); Debug.d("Profit for", name, percent); }
private void savePopulation() { String dirName = getSavedPopulationDirName(); File dirFile = new File(dirName); if (!dirFile.exists() && !dirFile.mkdirs()) { Debug.d("Unable to create directory", dirName); } else { population.savePopulation(dirName); } }
private static void checkShowPopulation(Parameters parameters) { String value = parameters.getValue("showPopulation"); if (value != null) { try { showPopulation(value); } catch (IllegalAccessException e) { Debug.d(e); } System.exit(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; }
@SuppressWarnings("unused") public static void setDebugInfoNone() { Debug.setDebugInfo(params, DebugInfo.NONE); }
public static synchronized void d(Object... output) { Debug.log(params, output); }
@SuppressWarnings("unused") public static void setPrefix(String prefix) { Debug.setPrefix(params, prefix); }
public static void toFile(String path) { Debug.setOutputStream(new ToFile(path)); }
public static void setShowTime(boolean enabled) { Debug.setShowTime(params, enabled); }
@SuppressWarnings("unused") public static void setAllowedPattern(String regex) { Debug.setAllowedPattern(params, regex); }
public void setAllowedPattern(String regex) { Debug.setAllowedPattern(params, regex); }
public void setDebugInfoFullTrace() { Debug.setDebugInfo(params, DebugInfo.TRACE); }
public void setDebugInfoFileAndLine() { Debug.setDebugInfo(params, DebugInfo.LINE); }
public void setDebugInfoNone() { Debug.setDebugInfo(params, DebugInfo.NONE); }
public void d(Object... output) { Debug.log(params, output); }
public void setPrefix(String prefix) { Debug.setPrefix(params, prefix); }
public void setOutputStream(OutputStream outputStream) { Debug.setOutPutStream(params, outputStream); }
@SuppressWarnings("unused") public static void setDebugInfoFileAndLine() { Debug.setDebugInfo(params, DebugInfo.LINE); }
@SuppressWarnings("unused") public static void setDebugInfoFullTrace() { Debug.setDebugInfo(params, DebugInfo.TRACE); }
public void setEnabled(boolean enabled) { Debug.setEnabled(params, enabled); }
@SuppressWarnings("unused") public static void setEnabled(boolean enabled) { Debug.setEnabled(params, enabled); }
private static void setupDebug() { Debug.setShowTime(true); String outFileName = "genotick_" + DataUtils.getDateTimeString() + ".txt"; Debug.toFile(outFileName); }
@SuppressWarnings("unused") public static void allowedClasses(Class... classes) { Debug.allowClasses(params, classes); }
@SuppressWarnings("WeakerAccess") public static void setOutputStream(OutputStream outputStream) { Debug.setOutPutStream(params, outputStream); }
public void allowedClasses(Class... classes) { Debug.allowClasses(params, classes); }
@SuppressWarnings("unused") public static void allowAllClasses() { Debug.allowAllClasses(params); }
public void allowAllClasses() { Debug.allowAllClasses(params); }
private static void setupExceptionHandler() { Thread.setDefaultUncaughtExceptionHandler(Debug.createExceptionHandler()); }