EA N7S_AO_772012 - page 30

 
SHOOTER777 >> :

А

malheureusement, cette observation est malheureuse...également remarquée...

 

SHOOTER pouvez-vous nous dire brièvement ce que les groupes de paramètres optimisent exactement ?

  • x
  • y
  • z
  • X
  • Y
  • Z
J'en comprends probablement une partie, mais je n'arrive pas encore à avoir une vue d'ensemble dans ma tête.
 

Voici une autre bizarrerie, ou peut-être juste un problème.

double BTS() {
	if (( prcptrnz1() > 0 || F==0) && bu< HM_Up_X) {
		if ( prcptx1 > 0 && Delta_G12>0) {
			sl = slx; 
			tp = tpx * slx; 
			mn = mnx1; 
			return (1);
		}
	} 
	if (( prcptrnz1() < 0 || F==0) && sll< HM_Dn_Y) {
		if ( prcpty1 > 0 && Delta_G12<0) {
			sl = sly; 
			tp = tpy * sly; 
			mn = mny1;
			return (-1);
		}
	}
	return (0);
}

Il s'avère que si maintenant F == 0 et qu'il n'y a aucune position ouverte - alors nous pouvons entrer dans le premier bloc d'abord, puis dans le second, ce qui conduira ensuite à des résultats incorrects.

Ou est-ce que je rate quelque chose ?

 

Probablement pas, cependant. On ne peut pas entrer dans les deux blocs en même temps parce qu'ils ne nous laissent pas entrer.

Delta_G12

ne nous laisse pas entrer.

 
ShestkoFF писал(а) >>

Je n'aime pas critiquer les choses qui fonctionnent. Je vais juste vous donner quelques critiques sur le code :

cpsb. Je ne prends pas les critiques comme des critiques, mais comme un guide pour l'action, c'est-à-dire pour lire au moins un peu du manuel MQL.

  • Je n'ai pas besoin detout écrire en lignes, car il est impossible de lire le code.

Accepté, mais probablement dans les travaux futurs. J'ai obtenu cette "écriture" après d'autres projets plus globaux et en raison de la faible résolution de mon moniteur de 12 pouces. Votre version est sans aucun doute meilleure, mais je devrais constamment faire défiler la liste en avant et en arrière. Mais comme je ne suis pas ici pour moi, je vais le répéter - je vais le garder à l'esprit.

  • Nommer les variables de manière significative

Voir ci-dessus ! Bien que j'aime mes noms, il faut s'y habituer, comme on s'est habitué aux abréviations GOELRO, OBHSS, IMHO, etc. Si vous regardez bien, j'ai donné à certaines variables des noms plus ou moins significatifs, mais j'ai abrégé toutes les voyelles.

  • Ne rendez pas les variables globales si elles sont locales.

Je n'ai pas encore maîtrisé les variables. Lorsque vous écrivez du code à partir de zéro, vous n'avez aucune idée de l'endroit où se trouvera une variable, donc presque tout est global.

  • Cela n'a aucun sens de ne pas rendre les variables globales statiques. Si ce n'est pas le cas, veuillez expliquer.

empiriquement ce n'est pas le cas, je me rappellerai où je l'ai rencontré - je pense que c'était dans la fonction BuSll ()

  • Utilisez les constantes standard définies dans la langue. Par exemple, la spécification d'un intervalle de temps. double iA_C (int pr){int tmfr=60 ; return(iAO(Symbol(), tmfr, pr));} Je pense qu'il est préférable de le remplacer par double iA_C (int pr){return(iAO(Symbol(), PERIOD_H1, pr));}.

Je suis d'accord, corrigeons-le, encore une fois, quand on écrit un bloc à partir de zéro on n'a pas encore idée des paramètres qu'on va passer dans la fonction, et puis l'œil se "salit" et on ne fait pas attention à ces "broutilles" ;))

 
ShestkoFF писал(а) >>

SHOOTER pouvez-vous nous dire brièvement ce que les groupes de paramètres optimisent exactement ?

  • x
  • y
  • z
  • X
  • Y
  • Z
Je comprends probablement en partie, mais je n'arrive pas encore à avoir une vue d'ensemble dans ma tête.

La principale force motrice et directrice de l'Expert Advisor est la fonction notoire)) G12(). C'est cette fonction qui permet de calculer les directions préférentielles du commerce sur la base d'indicateurs. Mais une direction ne suffit pas - nous avons besoin de points d'entrée. Dans les "classiques", si sur un horizon temporel, soit on recherche des patrons, soit on fait correspondre l'indicateur lui-même s'il y a des paramètres externes, s'il y en a deux ou plus, ils sont aussi optimisés. J'ai essayé une autre méthode nouvelle pour moi NN

Voici cette fonction

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1) ;

si (MathAbs(qw)>at) return(qw);else return(0);}

appelé perceptron et conçu pour obtenir.... quelque chose. Voici en détail quelques réponses à de nombreuses questions, et mieux que je ne l'aurais fait. Comment trouver une stratégie de trading rentable" et Recettes de réseaux neuronaux. Certes, je l'ai moi-même lu en diagonale et je suis devenu plus intéressant en étudiant le travail des autres ; voir ci-dessous.

Cet EA est "créé à partir" de MTS "Neural network + MACD" de Batohov, MTS "Сombo", "Combo_Right" & AI de Reshetov, PROphet de PraVedNiK,RSI_Test de zerkmax, auto_optimization.mqh d'Igor Malcev et quelques autres.

 
ShestkoFF писал(а) >>

Voici une autre bizarrerie, ou peut-être juste un problème.

Il s'avère que si maintenant F == 0 et qu'il n'y a aucune position ouverte - alors nous pouvons entrer dans le premier bloc d'abord, puis dans le second, ce qui conduira ensuite à des résultats incorrects.

Ou peut-être que je ne comprends pas quelque chose ?

F == 0 uniquement dans les deux premières étapes d'optimisation, lorsqu'en plus de Delta_G12 il y a Trd_Up_X et Trd_Dn_Y.

Si les six étapes sont passées correctement et que les fichiers d'optimisation sont utilisés séquentiellement, alors F devrait toujours être égal à 1.

Et j'ai trouvé mon autre erreur en revoyant le code. Je constate que les dernières versions fonctionnent moins bien. Cette erreur est apparue dans les versions 7 et 9.

Quelqu'un a-t-il remarqué ?

 
SHOOTER777 >> :

Voici cette fonction

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1) ;

si (MathAbs(qw)>at) return(qw);else return(0);}

une sorte de perceptron et destiné à obtenir.... quelque chose.

C'est un peu un mystère pour moi en ce moment. Bien sûr, je comprends ce qu'il fait et à quoi il sert. Mais la formule elle-même est quelque peu inhabituelle.
Le résultat du travail des neurones devrait être un nombre additionnant les entrées des neurones multipliées par les poids de ces entrées.
C'est-à-dire que, logiquement, cela devrait être quelque chose comme ce qui suit :

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Il est clair que les deux sont une certaine fonction de 4 variables (ou est-ce 8 ?) qui est impliquée dans la recherche du maximum (équilibre résultant), mais c'est toujours bizarre :)

 
ShestkoFF писал(а) >>

Cette fonction est toujours un mystère pour moi. Bien sûr, je comprends ce qu'il fait et pourquoi il le fait. Mais la formule elle-même est quelque peu inhabituelle.
Le résultat du travail des neurones devrait être un nombre additionnant les entrées des neurones multipliées par les poids de ces entrées.
Donc, logiquement, ça devrait être quelque chose comme ça :

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Il est clair que les deux sont une fonction de 4 variables (ou est-ce 8 ?) qui est impliquée dans la recherche du maximum (équilibre résultant), mais c'est toujours bizarre :)

Vous avez donné une version simplifiée de la fonction, du moins c'est ainsi que je la comprends.

C'est ici qu'on en parle

MTS 'Sombo'.

Pour être honnête, il ne s'agit pas d'un réseau neuronal dans sa forme la plus pure. Tout d'abord, il manque une valeur seuil sans laquelle la capacité de division du NS est beaucoup plus faible. Deuxièmement, IMHO, il vaut la peine d'ajouter un seuil d'activation de la sortie. Qu'est-ce que cela signifie ? Pour ne renvoyer le signal à la négociation que si le seuil d'activation est dépassé. Par exemple :

double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Diviser par Close[0] pour unification
if (MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- seuil d'activation

 
gorby777 писал(а) >>

Les versions antérieures utilisaient Close(0) dans la formule z1 du perceptron, mais dans les versions 7 et 9 Close(1). C'est de ça qu'on parle ?

Non, je ne pense pas qu'il s'agisse de cela, après tout il y a une règle pour travailler sur des barres formées.

Mais le fait que le drapeau Flq=faux ; un pour l'achat et un pour la vente influence fortement la répartition de ces directions de trading et donc les résultats.