public void run() {
		
		try {
			
			csvParser = new CSVParser(filename);
			
			String[] splitDesiredInputs = desiredInputs.split(Constants.SEPARATOR);
			int[] intDesiredInputs = new int[csvParser.countColumns()];
		    
			for (int i = 0; i < splitDesiredInputs.length; i++) {
		    	intDesiredInputs[i] = Integer.parseInt(splitDesiredInputs[i]);
		     }
			
			int inputCount = 0;
			for(int i = 0; i < intDesiredInputs.length; i++)
				inputCount += intDesiredInputs[i];
			
			NeuralNetwork neuralnetwork = NeuralNetworkFactory.createInstance()
															  .createInputLayer(inputCount)
															  .addActivationFunction(new ActivationFunctionSigmoid())
															  .createHiddenLayer(hiddenCount)
															  .createOuputLayer(Constants.OUTPUT_COUNT);
			
			csvparsertransformer = new CSVParserTransformerNormalization(csvParser);
			
			neuralnetworkexecution = NeuralNetworkExecutionFactory.createInstance()
																  .setParser(csvparsertransformer.getCSVParser())
																  .setMultiplier(new Multiplier(csvParser.getMaxValueFromColumn(mainColumnId)))
																  .setRawCsvParser(csvParser)
																  .setNeuralNetwork(neuralnetwork)
																  .setLearningRate(learningRate)
																  .setMomentum(momentum)
																  .setEpochs(epochs)
																  .setPercentageTrainingTesting(percentage)
																  .setDeltaTime(deltaTime)
																  .setDesiredInputs(intDesiredInputs)
																  .setMainColumnId(mainColumnId);
			
			pricesrecord.registerObserver(tradesrecord);
			TimerTask task = new FileMonitorRobot(new File(filename), this);
			
			while(true) {
				task.run();
				Thread.sleep(Constants.LATENCY_ON_DETECTING_FILE_MODIFICATION);
			}
			
		} catch (Exception e) {}
	}