//Todo: Create dialog private void optimizeParametersNN_btn_Click(object sender, EventArgs e) { new Thread(delegate() { //Todo: Drop fields random string[] inputFields = new string[] { "ssi-mt4", "spread", "mid-TradingTime", "mid-Stoch_600000", "mid-Stoch_1800000", "mid-Stoch_3600000", "mid-Stoch_7200000", "mid-Stoch_14400000", "mid-Stoch_21600000", "mid-MA_600000", "mid-MA_1800000", "mid-MA_3600000", "mid-MA_7200000", "mid-MA_14400000", "mid-MA_21600000", "mid-Range_1800000", "mid-Range_3600000", "mid-Range_7200000" }; string outputField = "buy-outcomeCode-0,001_600000"; int epochs = 10; int networksCount = 500; string path = Application.StartupPath + "/AI/"; GeneralExcelGenerator excel = new GeneralExcelGenerator(path + "excel.xlsx"); string sheetName = "OptimizeNN-E10"; string[] header = new string[2 + AdvancedNeuralNetwork.getExcelHeader().Length]; AdvancedNeuralNetwork.getExcelHeader().CopyTo(header, 2); header[0] = "ValidationE"; header[1] = "TrainingE"; excel.CreateSheet(sheetName, header); double[][] inputsTraining = new double[][] { }; double[][] outputsTraining = new double[][] { }; dataminingDb.getInputOutputArrays(inputFields, outputField, "EURUSD", ref inputsTraining, ref outputsTraining, DataGroup.All, 100 * 1000, 0); double[][] inputsValidation = new double[][] { }; double[][] outputsValidation = new double[][] { }; dataminingDb.getInputOutputArrays(inputFields, outputField, "EURUSD", ref inputsValidation, ref outputsValidation, DataGroup.All, 10 * 1000, 1); dataminingDb.unloadPair("EURUSD"); for (int ns = 0; ns < networksCount; ns++) { IMachineLearning network = AdvancedNeuralNetwork.getRandom(inputFields, outputField); network.train(inputsTraining, outputsTraining, epochs); double trainingError = network.getError(); double validationError = network.getPredictionErrorFromData(inputsValidation, outputsValidation); string[] excelRow = new string[2 + network.getInfo(inputFields, outputField).Length]; network.getInfo(inputFields, outputField).CopyTo(excelRow, 2); excelRow[0] = validationError.ToString(); excelRow[1] = trainingError.ToString(); excel.addRow(sheetName, excelRow); setState("Optimizing NN " + ns + "/" + networksCount); } if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } excel.FinishSheet(sheetName); excel.FinishDoc(); excel.save(); }).Start(); }
//Todo: Dialog, Training, Testing, Validation private void create_ann_button_click(object sender, EventArgs e) { new Thread(delegate() { string path = Application.StartupPath + "/AI/"; int maxEpochs = int.MaxValue; string[] inputFields = new string[] { "ssi-mt4", "spread", "mid-TradingTime", "mid-Stoch_600000", "mid-Stoch_1800000", "mid-Stoch_3600000", "mid-Stoch_7200000", "mid-Stoch_14400000", "mid-Stoch_21600000", "mid-MA_600000", "mid-MA_1800000", "mid-MA_3600000", "mid-MA_7200000", "mid-MA_14400000", "mid-MA_21600000", "mid-Range_1800000", "mid-Range_3600000", "mid-Range_7200000" }; int[] neuronsCount = new int[] { inputFields.Length, 18, 12, 1 }; string outputField = "buy-outcomeCode-0,001_600000"; IMachineLearning network = new AdvancedNeuralNetwork(inputFields, outputField, neuronsCount, 0.1, 2, false, false, false, Accord.Neuro.Learning.JacobianMethod.ByBackpropagation); double[][] inputs = new double[][] { }; double[][] outputs = new double[][] { }; dataminingDb.getInputOutputArrays(inputFields, outputField, "EURUSD", ref inputs, ref outputs, DataGroup.Training); dataminingDb.unloadPair("EURUSD"); int epochsDone = 0; double lastError = -1; while (epochsDone < maxEpochs) { setState("e" + Math.Round(network.getError(), 4).ToString()); network.train(inputs, outputs, 1); if (lastError == network.getError()) { break; } else { lastError = network.getError(); } if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } network.save(path + "E" + epochsDone + "_" + "e" + Math.Round(network.getError(), 4).ToString().Replace(',', '-').Replace('.', '-') + "_" + "EURUSD" + ".network"); //DateTime.Now.ToString("yyyy_dd_mm") epochsDone++; } setState("Done learning"); }).Start(); }