Une bibliothèque rapide et gratuite pour MT4, pour le plus grand plaisir des neuralnetworkers. - page 14

 

J'ai maintenant testé l'EA et j'ai trouvé ceci

2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1 : -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1 : -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1 : -1
2009.12.24 23:04:28 2009.09.04 13:00 n5_test EURUSD,H1 : 1024
2009.12.24 23:04:27 2009.09.04 12:00 n5_test EURUSD,H1 : 1023
2009.12.24 23:04:26 2009.09.04 11:00 n5_test EURUSD,H1 : 1022


Ces chiffres sont ceux que le code renvoie :

a = f2M_create_standard (nn_layer,nn_input,nn_hidden1,nn_hidden2,nn_output);
Print(a);

L'ID de la grille passe donc à 1024 et le système refuse ensuite de créer une nouvelle grille.

La fonction f2M_destroy(ann[i]) ne détruit aucune grille ! C'est l'hypothèse...

 
Kharin писал(а) >>

Cependant, la fonction f2M_destroy(ann[i]) ne détruit aucune grille ! C'est l'hypothèse...

Alexander, avez-vous essayé f2M_destroy_all_anns() ;

Peut-être y aura-t-il une différence dans les performances ?

 

Oui, je l'ai essayé maintenant, on dirait qu'un problème a été localisé...

I. - J'ai mis static int AnnsNumber = 1027 dans EA ;

- J'ai tout supprimé du dossier ANN et nettoyé le journal.

- Je peux voir dans le journal que des réseaux avec des indices de 7 à 1024 sont créés.

- Les réseaux sont enregistrés dans des fichiers dont les numéros vont de .1017.net à .0.net.

J'ai répété cette séquence plusieurs fois et rien ne change.

Je joins le journal de la première variante.

.

===========================

II. J'ai inséré f2M_destroy_all_anns() ; au début de init() ; et la situation a cardinalement changé pour le mieux, seul un dysfonctionnement est apparu à la fin

22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5 : f2M_save(1, E:\ANN\USDJPY-870.1.net) returned : 0
22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5 : f2M_destroy(1) returned : 0
22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5 : f2M_save(0, E:\ANN\USDJPY-870.0.net) returned : -1
22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5 : f2M_destroy(0) returned : -1

La grille zéro n'a pas été sauvegardée, alors que 1024.net l'a été. Mais ce sont les petites choses ))))

Dossiers :
fanneea_tmp.zip  18 kb
 
Dali писал(а) >>

Quelqu'un a décomplémenté toutes les options. Il n'y a pas de telles erreurs dans le code provenant du CVS.

Question : Qui a déployé FANN2MQL comment ?

Par l'installateur ? A la main depuis le site officiel ? Par d'autres moyens ?

Peut-être que nous sommes tous victimes d'une conspiration anti-réseaux ? )

 
Henry_White писал(а) >>

Je vais aussi ajouter à la liste des bizarreries de FANN...

Pour les besoins de l'expérience, j'ai décidé d'entraîner un comité de 46 réseaux de dimension 30/N/N/1 par bruteforcing (c'est-à-dire sur chaque barre : ~300k).

Veuillez clarifier. Chacun des 46 réseaux a-t-il des sorties différentes ?

Quelle est la gamme des échelles ?

Si possible, joignez le profil d'une grille de comité.

 
Kharin >> :

J'ai maintenant testé l'EA et j'ai trouvé ceci

2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1 : -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1 : -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1 : -1
2009.12.24 23:04:28 2009.09.04 13:00 n5_test EURUSD,H1 : 1024
2009.12.24 23:04:27 2009.09.04 12:00 n5_test EURUSD,H1 : 1023
2009.12.24 23:04:26 2009.09.04 11:00 n5_test EURUSD,H1 : 1022


Ces chiffres sont ceux que le code renvoie :

a = f2M_create_standard (nn_layer,nn_input,nn_hidden1,nn_hidden2,nn_output);
Print(a);

L'ID du réseau passe donc à 1024 et le système refuse ensuite de créer un nouveau réseau

La fonction f2M_destroy(ann[i]) ne détruit aucune grille ! C'est une hypothèse...

C'est donc défini dans la bibliothèque elle-même :


#ifdef FANN2MQL_EXPORTS
#define FANN2MQL_API __declspec(dllexport)
#else
#define FANN2MQL_API __declspec(dllimport)
#endif

/* maximum number of concurrently handled networks */
#define ANNMAX	1024

....................................................


/* array of FANN network structures */
extern struct fann *_fanns[ ANNMAX];
/* array of output values of networks */
extern double* _outputs[ ANNMAX];
/* index to last allocated network */
extern int _ann;
 
Kharin >> :


La fonction f2M_destroy(ann[i]) ne détruit aucun réseau ! Voici une telle hypothèse...

La fonction elle-même :


DLLFUNC int __stdcall f2M_destroy(int ann)
{
	int i, last_null=_ann-1;

	/* this network is not allocated */
	if ( ann<0 || ann>_ann || _fanns[ ann]==NULL) return (-1);

	/* destroy */
	fann_destroy(_fanns[ ann]);

	/* clear the pointers */
	_fanns[ ann]=NULL;
	_outputs[ ann]=NULL;

	/* let reuse the handlers if last */
	if ( ann==_ann) {
		_ann--;

		/* look if we can recover any more handlers */
		for ( i=_ann; i>-1; i--) {
			if (_fanns[ i]==NULL) {
				_ann--;
			} else {
				break;
			}
		}
	}

	return 0;
}

La mémoire est libérée.

FANN_EXTERNAL void FANN_API fann_destroy(struct fann * ann)
{
	if( ann == NULL)
		return;
	fann_safe_free( ann-> weights);
	fann_safe_free( ann-> connections);
	fann_safe_free( ann-> first_layer-> first_neuron);
	fann_safe_free( ann-> first_layer);
	fann_safe_free( ann-> output);
	fann_safe_free( ann-> train_errors);
	fann_safe_free( ann-> train_slopes);
	fann_safe_free( ann-> prev_train_slopes);
	fann_safe_free( ann-> prev_steps);
	fann_safe_free( ann-> prev_weights_deltas);
	fann_safe_free( ann-> errstr);
	fann_safe_free( ann-> cascade_activation_functions);
	fann_safe_free( ann-> cascade_activation_steepnesses);
	fann_safe_free( ann);
}
#define fann_safe_free(x) {if(x) { free(x); x = NULL; }}

Bonne chance.

Le problème peut se poser si vous détruisez les filets dans un ordre aléatoire ou du premier au dernier. Vous devez le faire du dernier au dernier, c'est-à-dire dans l'ordre inverse de la façon dont les filets ont été créés.

 
VladislavVG писал(а) >>

Le problème peut se poser si vous détruisez les filets de manière aléatoire ou du premier au dernier. Elle doit se faire du dernier au dernier, c'est-à-dire dans l'ordre inverse de la création des filets.

Permettez-moi d'ajouter. Ou en cas de crash terminal. Mais la solution semble avoir été trouvée.

La question est différente. Vladislav, je pense que tu lis le code C++ sans "intermédiaires".

Pourriez-vous commenter le problème des réponses identiques des comités de grille et de l'initialisation correcte des valeurs de pondération ? (détaillé ici et aussi les journaux, et ici une question sur les poids)

 

lasso et VladislavVG

Merci beaucoup

 
lasso >> :

Veuillez clarifier. Les résultats de chacun des 46 réseaux sont-ils différents ?

Quelle est la gamme de tailles des poids ?

Si possible, joignez le profil d'une grille de comité.

Oui. Les entrées sont différentes pour chaque grille, bien que cela ne soit pas crucial. Vous pouvez prendre un signal standard, par exemple le même RSI et une grille, et obtenir des valeurs négatives en force brute pour toutes les entrées.

Initialisation des poids -1, 1.

A propos du profil... Voulez-vous dire le fichier résultant du réseau formé ?