Пример #1
0
int main( int argc, char** argv )
{
	fann_type *calc_out;
	unsigned int i;
	int ret = 0;
	struct fann *ann;
	struct fann_train_data *data;
	printf("Creating network.\n");
	ann = fann_create_from_file("xor_float.net");
	if(!ann)
	{
		printf("Error creating ann --- ABORTING.\n");
		return 0;
	}
	fann_print_connections(ann);
	fann_print_parameters(ann);
	printf("Testing network.\n");
	data = fann_read_train_from_file("5K.txt");
	for(i = 0; i < fann_length_train_data(data); i++)
	{
		fann_reset_MSE(ann);
    	fann_scale_input( ann, data->input[i] );
		calc_out = fann_run( ann, data->input[i] );
		fann_descale_output( ann, calc_out );
		printf("Result %f original %f error %f\n",
			calc_out[0], data->output[i][0],
			(float) fann_abs(calc_out[0] - data->output[i][0]));
	}
	printf("Cleaning up.\n");
	fann_destroy_train(data);
	fann_destroy(ann);
	return ret;
}
Пример #2
0
/*
 * Scale input and output data based on previously calculated parameters.
 */
FANN_EXTERNAL void FANN_API fann_descale_train( struct fann *ann, struct fann_train_data *data )
{
	unsigned cur_sample;
	if(ann->scale_mean_in == NULL)
	{
		fann_error( (struct fann_error *) ann, FANN_E_SCALE_NOT_PRESENT );
		return;
	}
	/* Check that we have good training data. */
	if(fann_check_input_output_sizes(ann, data) == -1)
		return;

	for( cur_sample = 0; cur_sample < data->num_data; cur_sample++ )
	{
		fann_descale_input( ann, data->input[ cur_sample ] );
		fann_descale_output( ann, data->output[ cur_sample ] );
	}
}
Пример #3
0
/*
 * Scale input and output data based on previously calculated parameters.
 */
FANN_EXTERNAL void FANN_API fann_descale_train( struct fann *ann, struct fann_train_data *data )
{
    unsigned cur_sample;
    if(ann->scale_mean_in == NULL)
    {
        fann_error( (struct fann_error *) ann, FANN_E_SCALE_NOT_PRESENT );
        return;
    }
    /* Check that we have good training data. */
    /* No need for if( !params || !ann ) */
    if(    data->num_input != ann->num_input
            || data->num_output != ann->num_output
      )
    {
        fann_error( (struct fann_error *) ann, FANN_E_TRAIN_DATA_MISMATCH );
        return;
    }

    for( cur_sample = 0; cur_sample < data->num_data; cur_sample++ )
    {
        fann_descale_input( ann, data->input[ cur_sample ] );
        fann_descale_output( ann, data->output[ cur_sample ] );
    }
}
Пример #4
0
bool TwoAnn::sellShort(CandleStick * stick)
{
	int numSticks = CandleStickManager::instance()->numSticks(stock_->symbol());
	if(!isTradingTime(stock_->time()) || numSticks < 12)
	{
		return false;
	}
	
	if(0 != stick)
	{
		double closePrice = stick->closePrice();
		double openPrice = stick->openPrice();

		fann_type *annData = new fann_type[8];

		fann_type * ann1Data = data_->getCandleData();
		fann_scale_input( ann1_, ann1Data );
		fann_type * ann1Out = fann_run( ann1_, ann1Data );
		annData[0] = ann1Out[0];
		delete [] ann1Data;

		fann_type * ann2Data = data_->getCandleData();
		fann_scale_input( ann2_, ann2Data );
		fann_type * ann2Out = fann_run( ann2_, ann2Data );
		annData[1] = ann2Out[0];
		delete [] ann2Data;

		fann_type * ann3Data = data_->getGMMAData();
		fann_scale_input( ann3_, ann3Data );
		fann_type * ann3Out = fann_run( ann3_, ann3Data );
		annData[2] = ann3Out[0];
		delete [] ann3Data;

		fann_type * ann4Data = data_->getGMMAData();
		fann_scale_input( ann4_, ann4Data );
		fann_type * ann4Out = fann_run( ann4_, ann4Data );
		annData[3] = ann4Out[0];
		delete [] ann4Data;

		fann_type * ann5Data = data_->getHilbertData();
		fann_scale_input( ann5_, ann5Data );
		fann_type * ann5Out = fann_run( ann5_, ann5Data );
		annData[4] = ann5Out[0];
		delete [] ann5Data;

		fann_type * ann6Data = data_->getHilbertData();
		fann_scale_input( ann6_, ann6Data );
		fann_type * ann6Out = fann_run( ann6_, ann6Data );
		annData[5] = ann6Out[0];
		delete [] ann6Data;

		fann_type * ann7Data = data_->getMishMashData();
		fann_scale_input( ann7_, ann7Data );
		fann_type * ann7Out = fann_run( ann7_, ann7Data );
		annData[6] = ann7Out[0];
		delete [] ann7Data;

		fann_type * ann8Data = data_->getMishMashData();
		fann_scale_input( ann8_, ann8Data );
		fann_type * ann8Out = fann_run( ann8_, ann8Data );
		annData[7] = ann8Out[0];
		delete [] ann8Data;

		fann_scale_input( annChairman_, annData );
		fann_type * annChairmanOut = fann_run( annChairman_, annData );
		fann_descale_output(annChairman_, annChairmanOut);
		double result = annChairmanOut[0];
		delete [] annData;

		debugLog_ << stock_->symbol() << ","
			   << TimeZone::instance()->formatDateTZ(stick->date(), stick->endTime()) << " " << TimeZone::instance()->formatTZ(stick->endTime()) << ","
			   << openPrice << ","
			   << stick->highPrice() << ","
			   << stick->lowPrice() << ","
			   << closePrice << ","
			   << result << std::endl;

		double vote = 0.0;

		if(result > ann2Lower_)
		{
			std::strstream strstr;
			strstr << "\n\tTwo Ann Entry (Short)\nClose Price: " << closePrice 
				   << "\nChairman Data: " << result << std::ends;
			std::string  msg = strstr.str();
			strstr.clear();
			strstr.rdbuf()->freeze(0);

			DataLogger::instance()->recordDebug(msg, stock_->symbol());

			return true;
		}
	}
	return false;
}
Пример #5
0
int main(int argc, const char* argv[])
{
	
	if (argc < 2) {
    printf("Usage: ./dinneuro filename\n");
    return -1;
	}
	
	//подготавливаем выборки
	if (csv2fann2(argv[1], 59, 50, 100, true)) { printf("Converted\n"); }
	
	//получим данные о количестве входных и выходных параметров
	int *params;
	const char * filename;
	const char * normfilename;
	filename = "data.data";
	//filename = "scaling.data";
	normfilename = "normalized.train";
	params = getparams(filename);
	
    unsigned int num_threads = omp_get_thread_num();
	float error;
	const unsigned int num_input = params[1];
	const unsigned int num_output = params[2];
	//printf("num_input=%d num_output=%d\n", num_input, num_output);
	const unsigned int num_layers = 4;
	//const unsigned int num_neurons_hidden = num_output;
	const unsigned int num_neurons_hidden = 5;
	const float desired_error = (const float) 0.0001;
	const unsigned int max_epochs = 5000;
	const unsigned int epochs_between_reports = 1000;
	struct fann_train_data * data = NULL;
	struct fann *ann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_neurons_hidden, num_output);
	fann_set_activation_function_hidden(ann, FANN_LINEAR);
	fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);
	fann_set_training_algorithm(ann, FANN_TRAIN_RPROP);
	//printf("test\n");
	data = fann_read_train_from_file(filename);
	
	printf("Readed train from %s\n", filename);
	
	fann_set_scaling_params(
		    ann,
			data,
			-1,	/* New input minimum */
			1,	/* New input maximum */
			-1,	/* New output minimum */
			1);	/* New output maximum */

	fann_scale_train( ann, data );
	printf("Scaled\n");
	
	//сохраним нормализованную обучающу выборку в файл
	fann_save_train(data, normfilename);
	printf("Saved scaled file %s\n", normfilename);
	
	unsigned int i;
	printf("Start learning...\n");
	for(i = 1; i <= max_epochs; i++)
	{
		error = num_threads > 1 ? fann_train_epoch_irpropm_parallel(ann, data, num_threads) : fann_train_epoch(ann, data);
		//если ошибка обучения меньше или равно заданной - выходим из цикла обучения
		//if (error <= desired_error) { printf ("Desired error detected. Finishing teaching.\n"); break; }
		//если текущий счетчик делится без остатка на epochs_between_reports - пишем лог
		//if (i % epochs_between_reports == 0) { printf("Epochs     %8d. Current error: %.10f\n", i, error); }
		
	}
	printf("End learning.\n");
	printf("MSE = %f\n", fann_get_MSE(ann));

	//fann_train_on_data(ann, data, max_epochs, epochs_between_reports, desired_error);
	fann_destroy_train( data );
	fann_save(ann, "scaling.net");
	fann_destroy(ann);
	
	//проверка
	printf("Testing...\n");
	fann_type *calc_out;
	//printf("fann_length_train_data=%d\n",fann_length_train_data(data));
	printf("Creating network.\n");
	ann = fann_create_from_file("scaling.net");
	if(!ann)
	{
		printf("Error creating ann --- ABORTING.\n");
		return 0;
	}
	
	//печатаем параметры сети
	//fann_print_connections(ann);
	//fann_print_parameters(ann);
	
	printf("Testing network.\n");
	data = fann_read_train_from_file(filename);
	for(i = 0; i < fann_length_train_data(data); i++)
	{
		fann_reset_MSE(ann);
    	fann_scale_input( ann, data->input[i] );
		calc_out = fann_run( ann, data->input[i] );
		fann_descale_output( ann, calc_out );
		printf("Result %f original %f error %f or %.2f%%\n",
			calc_out[0], data->output[i][0],
			(float) fann_abs(calc_out[0] - data->output[i][0]), (100*(float) fann_abs(calc_out[0] - data->output[i][0]))/(float)calc_out[0]);
	}

	fann_destroy_train( data );
	fann_destroy(ann);

return 0;
}